[어셈블리어] 기본 명령어

반응형

어셈블리어

1. Low Level Language

2. 메모리가 작고 빠른 속도로 컴퓨터에 명령할 수 있다. 

3. 초소형 Embedded System에서 많이 사용된다.


기본 문법(AT&T / Intel)

   - CSAPP 책에는 AT&T로 설명하고 있어 이 문법만 정리

1. Opcode와 Operand로 나뉜다. 

  1) Opcode : 명령어, 어떠한 행동을 할지 지시

  2) Operand : 인자 값, 피 연산자. 즉 어디에 무엇을 해야 하는지 표기 

  예) ADD(더하라) Operand1(Source), Operand2(Destination)

        Operand1 을 Operand2에 더하라

 

2. 숫자 표기(Constant Numver)

  $1, $2, $3, $4.....

 

3. Memory Address

  괄호를 씌움 : (EAX)...

 

4. Offset

  인덱스 값 숫자로 표기 : 4(EAX) ...

 

5. Register

  1) %EAX (Extended Accumulator Register) : 더하기 빼기 등, 연산에 사용

    - 함수에서 return 된 값이 저장

  2) %EDX (Extended Base Register) : 더하기 뺴기 등, 연산에 사용

    - EAX와 다른 점은 return 에 저장 할 수 없음

  3) %ECX (Extended Counter Register) : 반복문의 i 같은 역할

    - 카운팅을 하지만 거꾸로 함

  4) %EDX (Extended Data Register) : EAX, EDX 등이 사용하기 부족할 때 사용함 

  5) %ESI (Extended Source Index) : 데이터를 복사할 때 Source데이터 주소가 복사

  6) %EDI (Extended Destination Index) : 데이터를 복사할 때 Destination 주소가 복사

  >>>ESI 에서 가리키고 있는 주소에 있는 데이터가 EDI에 복사가 된다!

  7) %ESP (Extended Stack Pointer) : Stack Frame의 끝 지점 주소가 저장

  8) %EBP (Extended Base Pointer) : Stack Frame의 시작 지점 주소가 저장

  

6. Register 크기

  1) ax, bx, cx, dx ....

    - 16bit

  2) EAX, EBX, ECX...

    - 32bit

  3) RAX, RBX, RCX...

    - 64bit

 

7. Opcode 명령어 (매우 많지만 많이 쓰는 몇 가지)

  1) PUSH, POP : 스택에 넣고 빼는 것 

  2) MOV : 값을 넣는 것

  3) LEA : 주소를 넣는 것

  4) ADD, SUB : 더하기, 빼기 

  5) INC, DEC : ++ , --

  6) CMP : 두 오퍼랜드를 비교하는 명령어

  7) CALL : 함수를 호출하는 명령어

  8) RET : 함수가 종료되고 함수 호출 다음으로 이동하라는 명령어 

  9) NOT : 아무것도 안 함

 

반응형