SINT 또는 INT에서 DINT로
SINT 또는 INT 값을 DINT 값으로 변환하는 명령어의 경우 피연산자 섹션에서 변환 방법을 식별합니다.
변환 방법: | 다음과 같이 배치하여 데이터를 변환합니다. |
부호 확장 | 32비트가 될 때까지 기존 비트 왼쪽에 있는 각 비트 위치에 맨 왼쪽 비트(값의 부호)의 값을 배치합니다. |
0 채우기 | 32비트가 될 때까지 기존 비트 왼쪽에 0을 배치합니다. |
다음은 부호 확장 및 0 채우기를 사용하여 값을 변환한 결과를 보여주는 예입니다.
값: | 2#1111_1111_1111_1111 | (-1) |
부호 확장을 통해 이 값으로 변환 | 2#1111_1111_1111_1111_1111_1111_1111_1111 | (-1) |
영 채우기를 통해 이 값으로 변환 | 2#0000_0000_0000_0000_1111_1111_1111_1111 | (65535) |
즉시 값은 항상 0으로 채워지기 때문에 SINT 또는 INT 값을 변환할 때 예기치 않은 결과가 발생할 수도 있습니다. 다음 예에서 비교 결과가 거짓이 되는 이유는 INT 형식인 Source A는 부호 확장으로 변환되는 반면 즉시 값인 Source B는 0 채우기를 통해 변환되기 때문입니다.

부호 확장을 통해 데이터를 변환하는 명령어에서 SINT 또는 INT 태그와 즉시 값을 사용하는 경우 다음 방법 중 하나를 사용하여 즉시 값을 처리합니다.
즉시 값을 10진 기수로 지정합니다.
값을 10진수가 아닌 기수로 입력하는 경우 즉시 값의 32비트를 모두 지정합니다. 이렇게 하려면 32비트가 될 때까지 값의 왼쪽에 있는 각 비트 위치에 맨 왼쪽 비트의 값을 입력합니다.
각 연산자에 대한 태그를 생성하고 명령어 전체에서 동일한 데이터 유형을 사용합니다. 상수 값을 할당하려면 다음 중 하나를 수행합니다.
- 태그 중 하나에 입력합니다.
- 태그 중 하나로 값을 이동하는 MOV 명령어를 추가합니다.
MEQ 명령어를 사용하여 필요한 비트만 확인합니다.
다음은 즉시 값을 INT 태그와 혼합하는 두 가지 방법을 보여주는 예입니다. 두 가지 예에서는 1771 I/O 모듈의 비트를 검사하여 모든 비트가 제자리에 있는지 확인합니다. 1771 입/출력(I/O) 모듈의 입력 데이터 워드가 INT 태그이기 때문에 16비트 상수 값을 사용하는 것이 가장 쉽습니다.
예 1
즉시 값과 INT 태그 혼합.
remote_rack_1:I.Data[0]가 INT 태그이므로 이를 검사하는 값도 INT 태그로 입력됩니다.

예 2
즉시 값과 INT 태그 혼합.
remote_rack_1:I.Data[0]가 INT 태그이므로 이를 검사하는 값이 먼저 int_0으로 이동하고 이는 역시 INT 태그입니다. 그런 다음 EQU 명령어가 두 태그를 비교합니다.

의견을 작성 부탁드립니다.