강좌 & 팁
글 수 2,412
2015.08.29 23:20:45 (*.39.166.80)
39797
cmp 와 tst 모두 값을 비교하는 연산입니다.
두개의 명령어가 모두 값을 비교해서 그 결과를 이용하는 연산이지만 미묘하게 두가지는 틀립니다.
보통 값이 어떤 특정한 값인가를 체크하게 될때 사용하게 되는데 아래 두가지를 비교해 봅니다.
case 1
ldr r0, [r1]
cmp r0, #0
case 2
ldr r0, [r1]
tst r0, #0
case 1 은 두개의 값을 sub 하게 됩니다.
빼기 연산인 sub 를 사용하므로 그 결과가 완전히 같은 때에만 그 결과가 zero flag 에 저장됩니다.
case 2 는 두개의 값을 AND 시킵니다
and 연산을 사용하므로 두개의 값이 같지 않더라도 원하는 비트가 0 인지 아닌지 확인할수 있습니다.
물론 0 인지 아닌지를 확인할때는 그 결과가 같습니다.
항상 애매하게 사용되는지라...
명확히 의미를 알면 해석이 쉬워집니다.