SINT or INT to DINT

For those instructions that convert SINT or INT values to DINT values, the Operands sections identify the conversion method.
This conversion method:
Converts data by placing:
Sign-extension
the value of the left-most bit (the sign of the value) into each bit position to the left of the existing bits until there are 32 bits.
Zero-fill
zeroes to the left of the existing bits until there are 32 bits.
The following example shows the results of converting a value using sign-extension and zero-fill.
This value:
2#1111_1111_1111_1111
(-1)
Converts to this value by sign-extension
2#1111_1111_1111_1111_1111_1111_1111_1111
(-1)
Converts to this value by zero-fill
2#0000_0000_0000_0000_1111_1111_1111_1111
(65535)
Because immediate values are always zero-filled, the conversion of a SINT or INT value may produce unexpected results. In the following example, the comparison is false because Source A, an INT, converts by sign-extension, while Source B, an immediate value, is zero-filled.
EQU_append_ex1
If you use a SINT or INT tag and an immediate value in an instruction that converts data by sign-extension, use one of these methods to handle immediate values:
Specify any immediate value in the decimal radix
If you are entering the value in a radix other than decimal, specify all 32 bits of the immediate value. To do so, enter the value of the left-most bit into each bit position to its left until there are 32 bits.
Create a tag for each operand and use the same data type throughout the instruction. To assign a constant value, either:
  • Enter it into one of the tags
  • Add a MOV instruction that moves the value into one of the tags.
Use a MEQ instruction to check only the required bits
The following examples show two ways to mix an immediate value with an INT tag. Both examples check the bits of a 1771 I/O module to determine if all the bits are on. Since the input data word of a 1771 I/O module is an INT tag, it is easiest to use a 16-bit constant value
Example 1
Mixing an INT tag with an immediate value.
Since remote_rack_1:I.Data[0] is an INT tag, the value to check it against is also entered as an INT tag.
EQU_append_ex2
Example 2
Mixing an INT tag with an immediate value.
Since remote_rack_1:I.Data[0] is an INT tag, the value to check it against first moves into int_0, also an INT tag. The EQU instruction then compares both tags.
EQU_append_ex3
Provide Feedback
Have questions or feedback about this documentation? Please submit your feedback here.