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 |