TEST (x86 명령어)

x86 어셈블리어에서 TEST 명령어는 두 피연산자들에 대한 비트 연산인 AND를 수행한다. SF, ZF, PF 플래그가 수정되며 AND의 결과는 버려진다. OF와 CF 플래그는 0으로 설정되며 AF 플래그는 정의되지 않는다. 종류와 피연자들의 크기에 따라 TEST 명령어를 위한 9가지 다른 옵코드가 존재한다. 이것은 8비트, 16비트, 32비트 또는 64비트 값을 비교할 수 있다. 또한 레지스터, 즉시값 그리고 레지스터 간접 값을 비교할 수도 있다.[1]

TEST 옵코드 변종 편집

TEST 연산은 CF와 OF 플래그를 0으로 설정한다. SF는 AND의 결과물의 최상위 비트로 설정된다. 만약 결과가 0이라면 ZF는 1로, 아니라면 0으로 설정된다. 패리티 플래그는 결과의 최하위 비트의 XNOR 비트 연산으로 설정된다. 이것은 두 바이트가 같으면 1로, 아니면 0으로 설정된다. AF의 값은 정의되지 않는다.

예시 편집

; Conditional Jump
test cl, cl   ; set ZF to 1 if cl == 0
je 0x804f430  ; jump if ZF == 1

; or
test eax, eax  ; set SF to 1 if eax < 0 (negative)
js error ; jump if SF == 1

각주 편집