SINT or INT to DINT

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.