
1) 데이터 이동 : mov, lea
2) 논리, 연산 : add, sub, inc, dec
3) 흐름제어 : cmp,jmp
4) 프로시져 : call, ret
5) 스택조작 : push, pop
6) 인터럽트 : int
1) 데이터 전송
형식 : mov SOURCE, DESTINATION
기능 : SOURCE위치에 들어있는 데이터를 복사하여 DESTINATION위치에 저장.
원칙 : 메모리와 레지스터(모든 연산은 레지스터에 저장된뒤 이루어진다.) 사이의 데이터 이동, 레지스터와 레지스터 사이의 데이터 이동이나 값을 메모리나 레지스터에 대 입할 때 사용한다. (SOURCE와 DESTINATION의 크기가 동일해야 한다.)
! SOURCE와 DESTINATION이 전부 메모리를 가르칠수 없다. (설계상 불가능)
! SOURCE가 직접지정방식일경우에는 DESTINATION은 CS일 수 없다.
형식 : lea SOURCE, DESTINATION
기능 : SOURCE OPERAND에서 지정된 주소를 DESTINATION으로 로드한다.
LEA의 주된 용도는 매개변수나 지역변수의 주소를 얻어오는 것이다.
예를 들어 C언어에서 지역변수나 매개변수에 &연산자를 사용한다면 컴파일러는
lea명령어를 생성한다.
2) 논리, 연산 : add, sub, inc, dec
형식 : add opr1, opr2
기능 : opr2의 내용에 op1의 내용이 더해져서 그 결과를 opr2에 저장.
원칙 : ! 두 개의 오퍼랜드 모두에 메모리로 조합되는 것은 불가능.
형식 : sub opr1, opr2
기능 : 첫번째 오퍼랜드로 부터 2번째 오퍼랜드 의 내용을 뺀 다음 결과를 첫 번째 오퍼
원칙 : ! 메모리끼리는 뺄셈을 할수 없다.
형식 : inc DESTINATION
기능 : DESTINATION을 1 증가시키고 결과값을 다시 저장
형식 : dec DESTINATION
기능 : DESTINATION을 1 감소시키고 결과값을 다시 저장
3) 흐름 제어 : jmp, cmp
형식 : jmp proc
기능 : 프로그램의 흐름을 바꿀 때 사용. proc의 주소로 가서 그곳의 명령어를 실행.
if/else문, loop문(루프가 아직 끝나지 않았을때, 처음위치로 돌아가기 위해)
등에서 나타난다.
ex) cmp %eax, 0 (eax레지스터의 값을 0과 비교한다.)
je start (비교 결과가 같다면 start로 분기한다.)
(같지 않다면 je 다음에 오는 명령어를 실행한다.)
기능 : 두값을 비교하고 비교결과에 따라 분기한다. 보통 레지스터나 메모리 및 숫자의 크기를 비교한다. cmp 명령어는 Zero, Sign, Overflow 등의 플래그를 set or clear 한다. 이 플래그의 결과에 의해서 Jcc 명령어들은 분기할 것인지를 결정한다. 보통 CMP 명령어 다음에 JE, JNE 등의 jmp관련 명령어가 위치한다.
원칙 : cmp 명령은 혼자 사용되지 않고 언제나 조건 점프 명령어나 조건 이동(mov) 명령어와 함께 사용된다.
조건 점프 명령어 : cmp 명령어의 결과에 따라 점프하는 명령어.