어셈블리어

abcd·2023년 8월 23일

어셈블리어 명령어 정리

어셈블리 명령어 상세

  • 명령어의 분류

1) 데이터 이동 : mov, lea

2) 논리, 연산 : add, sub, inc, dec

3) 흐름제어 : cmp,jmp

4) 프로시져 : call, ret

5) 스택조작 : push, pop

6) 인터럽트 : int

1) 데이터 전송

  1. mov (move data)
  • 형식 : mov SOURCE, DESTINATION

  • 기능 : SOURCE위치에 들어있는 데이터를 복사하여 DESTINATION위치에 저장.

  • 원칙 : 메모리와 레지스터(모든 연산은 레지스터에 저장된뒤 이루어진다.) 사이의 데이터 이동, 레지스터와 레지스터 사이의 데이터 이동이나 값을 메모리나 레지스터에 대 입할 때 사용한다. (SOURCE와 DESTINATION의 크기가 동일해야 한다.)

! SOURCE와 DESTINATION이 전부 메모리를 가르칠수 없다. (설계상 불가능)

! SOURCE가 직접지정방식일경우에는 DESTINATION은 CS일 수 없다.

  1. lea
  • 형식 : lea SOURCE, DESTINATION

  • 기능 : SOURCE OPERAND에서 지정된 주소를 DESTINATION으로 로드한다.

LEA의 주된 용도는 매개변수나 지역변수의 주소를 얻어오는 것이다.

예를 들어 C언어에서 지역변수나 매개변수에 &연산자를 사용한다면 컴파일러는

lea명령어를 생성한다.

  • 원칙 : SOURCE OPERAND는 메모리에 위치해야하며, 변경될 주소는 index register나 DESTINATION에 정의된 주소여야 한다.

2) 논리, 연산 : add, sub, inc, dec

  1. add
  • 형식 : add opr1, opr2

  • 기능 : opr2의 내용에 op1의 내용이 더해져서 그 결과를 opr2에 저장.

  • 원칙 : ! 두 개의 오퍼랜드 모두에 메모리로 조합되는 것은 불가능.

  1. sub (subtract)
  • 형식 : sub opr1, opr2

  • 기능 : 첫번째 오퍼랜드로 부터 2번째 오퍼랜드 의 내용을 뺀 다음 결과를 첫 번째 오퍼

  • 원칙 : ! 메모리끼리는 뺄셈을 할수 없다.

  1. inc (Increment)
  • 형식 : inc DESTINATION

  • 기능 : DESTINATION을 1 증가시키고 결과값을 다시 저장

  1. dec (decrement)
  • 형식 : dec DESTINATION

  • 기능 : DESTINATION을 1 감소시키고 결과값을 다시 저장

3) 흐름 제어 : jmp, cmp

  • 형식 : jmp proc

  • 기능 : 프로그램의 흐름을 바꿀 때 사용. proc의 주소로 가서 그곳의 명령어를 실행.

if/else문, loop문(루프가 아직 끝나지 않았을때, 처음위치로 돌아가기 위해)

등에서 나타난다.

  1. cmp
  • 형식 : cmp value, value

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 명령어의 결과에 따라 점프하는 명령어.

profile
NOOOOOOOMU

0개의 댓글