CMP와 TEST의 다른 점
CMP는 첫번째 operand에서 두 번째 Operand를 뺀다. 이 연산의 결과는 operand 값이 변경되지 않고 EFLAGS 레지스터만 변경된다. (두 operand 값이 동일하다면 SUB 결과는 0이고 ZF=1. SUB 명령과 동일하나 SUB는 operand 값이 변경됨.)
TEST는 첫 번째 operand와 두 번째 operand를 AND연산 시킨다. 이 연산의 결과는 ZF에만 영향을 미치고 operand에는 영향을 미치지 않는다.
두 개의 다른 점은 두 operand를 비교하는 방식이다. CMP는 숫자를 빼서 비교하고, TEST는 AND연산을 시켜서 비교한다. 이로 인해 CMP는 두 operand가 완전히 같은지 비교할 수 있고 TEST는 두 operand가 모두 0인지 아닌지 판단할 수 있다. TEST의 경우 두 operand가 0이 아닌 경우를 제외하고 서로 다른 값일지라도 연산 결과가 0이 나올 수 있으므로 TEST eax,eax와 같이 대상의 값이 0이 아닌지 확인하는 용도로 사용된다.
mov와 lea의 다른 점
mov는 좌변에 우변의 값을 대입한다.
lea는 좌변(레지스터만 가능)에 우변의 주소값을 대입한다.
조건 점프문
PUSHAD - 8개의 범용 레지스터의 값을 스택에 저장하는 명령
POPAD - PUSHAD 명령에 의해서 스택에 저장된 값을 다시 각 레지스터들에게 입력하는 명령