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 인지 아닌지를 확인할때는 그 결과가 같습니다.
  항상 애매하게 사용되는지라... 
  명확히 의미를 알면 해석이 쉬워집니다.