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.
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.
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.
Provide Feedback