기본개념

CMP와 TEST 비교

우와해커 2019. 12. 24. 16:23

CMP : 첫 번째 Operand에서 두 번째 Operand를 뺍니다.

       이 연산의 결과는 ZF, Zero Flag에만 영향을 미칠 뿐 Operand에 영향을 미치지 않고 버려집니다.

TEST : 첫 번째 Operand와 두 번째 Operand를 AND 시킵니다

       이 연산의 결과는 ZF에만 영향을 미치고 Operand에 영향을 미치지 않고 버려집니다.

 

결국 한 쪽은 빼기, 한 쪽은 AND인데 이 것으로 인해서 CMP는 두 Operand가 완전히 같은지 판단할 수 있고
TEST는 두 Operand가 모두 0인지 아닌지 판단할 수 있습니다.
(만약 결과가 0이라면 ZF는 1로, 아니라면 0으로 설정된다.)

 

TEST의 경우에는 두 Operand가 0이 아닌 경우를 제외하고는 값을 단정지을 수 없기 때문에(두 값이 0이 아닌 서로 다른 값일지라도 연산 결과는 0이 나올 수 있습니다.)


TEST eax, eax와 같은 형태로 사용되어 대상의 값이 0인지 아닌지 확인할 때 사용됩니다.

'기본개념' 카테고리의 다른 글

QEMU 파일전송  (0) 2020.01.05
[ROP] Ret2ZP on ARM (like RTL on x86)  (0) 2020.01.05
[펌] ARM / x86 에서의 함수 호출 /리턴방식 비교  (0) 2020.01.01
StackFrame  (0) 2020.01.01
[ARM Aseembly basics Part 1 to 7] - v1.0  (0) 2019.12.25