티스토리 뷰

카테고리 없음

어셈블리 명령어

D41JUNG0D 2017. 12. 20. 13:44

명령어 종류가 많으므로 Ctrl+F 로 필요한 명령어만 찾으시는 것을 추천드립니다.


데이터 이동

  1. MOV : 데이터 복사

    1. 사용법

      1. MOV 목적지, 소스

    2. 설명

      1. 소스의 내용을 목적지로 복사

  2. MOVZX : 0을 확장하여 데이터 복사

    1. 사용법

      1. MOVZX 목적지(32bits), 소스(16bits)

      2. MOVZX 목적지(16bits), 소스(16bits)

    2. 설명

      1. 소스의 내용을 목적지로 복사하고, 목적지 나머지 부분MY을 0으로 채운다. 목적지에 32bits 레지스터가 온다면 소스에는 16bits 레지스터가 온다.

  3. MOVSX : 부호를 확장하여 데이터 복사

    1. 사용법

      1. MOVSX 목적지(32bits), 소스(16bits)

      2. MOVSX 목적지(16bits), 소스(16bits)

    2. 설명

      1. 소스의 내용을 목적지로 복사하고, 목적지 나머지 부분을 소스의 맨 처음 비트로 채운다. 목적지에 32bits 레지스터가 온다면 소스에는 16bits 레지스터가 온다.

  4. LEA : 주소 복사

    1. 사용법

      1. LEA 목적지(레지스터), 소스

    2. 설명

      1. 소스의 주소를 목적지로 복사한다. 목적지에는 레지스터만 올 수 있다.


산술 연산자

  1. ADD : 덧셈

    1. 사용법

      1. ADD 목적지, 소스

    2. 설명

      1. 목적지와 소스의 내용을 더해서 목적지에 저장한다.

  2. SUB : 뺄셈

    1. 사용법

      1. SUB 목적지, 소스

    2. 설명

      1. 목적지에서 소스의 내용을 빼서 목적지에 저장한다.

  3. MUL : 부호 없는 곱셈

    1. 사용법

      1. MUL 소스

    2. 설명

      1. EAX 레지스터의 내용에 소스의 내용을 곱해서 EAX 레지스터에 저장한다. 결과 값이 커서 목적지에 다 들어가지 못할 때는 EDX 레지스터에 넘치는 상위 비트 값을 저장한다.

  4. IMUL : 부호 있는 곱셈

    1. 사용법

      1. IMUL 목적지

      2. IMUL 목적지, 소스

      3. IMUL 목적지, 소스, 정수

    2. 설명

      1. EAX 레지스터의 내용에 소스의 내용을 곱해서 EAX 레지스터에 저장한다. 결과 값이 커서 목적지에 다 들어가지 못할 때는 EDX 레지스터에 넘치는 값을 저장한다.

      2. 목적지와 소스의 내용을 곱해서 목적지에 저장한다. 결과 값이 커서 목적지에 다 들어가지 못할 때는 EDX 레지스터에 넘치는 값을 저장한다.

      3. 정수와 소스의 내용을 곱해서 목적지에 저장한다. 결과 값이 커서 목적지에 다 들어가지 못할 때는 EDX 레지스터에 넘치는 값을 저장한다.

  5. DIV : 부호 없는 나눗셈

    1. 사용법

      1. DIV 소스(레지스터)

    2. 설명

      1. EAX 레지스터 값을 소스의 내용으로 나누어서 몫은 EAX 레지스터에 저장하고 나머지는 EDX 레지스터에 저장한다. DIV 연산을 테스트해서 원하는 값을 얻으려면 EDX 레지스터 값을 먼저 0으로 변경해야 한다.

  6. IDIV : 부호 있는 나눗셈

    1. 사용법

      1. IDIV 소스(8비트 레지스터)

      2. IDIV 소스(16비트 레지스터)

      3. IDIV 소스(32비트 레지스터)

    2. 설명

      1. AX 레지스터 값을 소스의 내용으로 나누어서 몫은 AL 레지스터에 저장하고 나머지는 AH 레지스터에 저장한다.

      2. DX 와 AX 레지스터 값을 소스의 내용으로 나누어서 몫은 AX 레지스터에, 나머지는 DX 레지스터에 저장한다.

      3. EDX 와 EAX 레지스터 값을 소스의 내용으로 나누어서 몫은 EAX 레지스터에 저장하고 나머지는 EDX 레지스터에 저장한다.

  7. INC : 1 증가

    1. 사용법

      1. INC 목적지

    2. 설명

      1. 목적지에 있는 데이터를 1만큼 증가시킨다.

  8. DEC : 1 감소

    1. 사용법

      1. DEC 목적지

    2. 설명

      1. 목적지에 있는 데이터를 1만큼 감소시킨다.

  9. NEG

    1. 사용법

      1. NEG 목적지

    2. 설명

      1. 목적지에 있는 데이터의 부호를 바꾼다. 2의 보수를 취한다.


부울 연산자

  1. AND

    1. 사용법

      1. AND 목적지, 소스

    2. 설명

      1. 목적지와 소스 데이터를 부울 AND 연산 후 목적지에 저장

  2. OR

    1. 사용법

      1. OR 목적지, 소스

    2. 설명

      1. 목적지와 소스 데이터를 부울 OR 연산 후 목적지에 저장

  3. XOR

    1. 사용법

      1. XOR 목적지, 소스

    2. 설명

      1. 목적지와 소스 데이터를 배타적 OR연산 후 목적지에 저장


분기 명령어

  1. CMP : 비교

    1. 사용법

      1. CMP 인자1, 인자2

    2. 설명

      1. 인자 1과 인자 2가 같으면 CF는 0, ZF는 1로 설정, CF가 0인 상태에서 인자1과 인자2가 다르면 CF는 그대로 0이다.

  2. JMP : 점프

    1. 사용법

      1. JMP 목적지

    2. 설명

      1. 목적지 주소로 이동한다. 복귀주소를 백업하지 않는다.

  3. JE : 같을 경우 점프

    1. 사용법

      1. JE 목적지

    2. 설명

      1. ZF 가 1일 경우 점프한다. 보통 CMP 명령어 뒤에 온다.

  4. JNE : 다를 경우 점프

    1. 사용법

      1. JNE 목적지

    2. 설명

      1. ZF가 0일 경우 점프한다. 보통 CMP 명령어 뒤에 온다.

  5. JZ : 0일 경우 점프

    1. 사용법

      1. JZ 목적지

    2. 설명

      1. ZF 가 1이거나 앞의 연산 결과가 0이면 점프한다. 보통 DEC나 CMP 명령어 뒤에 온다.

  6. JNZ : 0이 아닐 때 점프

    1. 사용법

      1. JNZ 목적지

    2. 설명

      1. ZF가 0이거나 앞의 연산 결과가 0이 아니면 점프한다. 보통 DEC나 CMP명령어 뒤에 온다.

  7. JA : 앞의 값이 크면 점프

    1. 사용법

      1. CMP 인수 1, 인수 2

      2. JA 목적지

    2. 설명

      1. ‘CMP 인수 1, 인수 2’ 명령어 뒤에 와서 인수 1이 인수 2보다 크면 목적지로 점프한다.

  8. JB : 뒤의 값이 크면 점프

    1. 사용법

      1. CMP 인수 1, 인수 2

      2. JB 목적지

    2. 설명

      1. ‘CMP 인수 1, 인수 2’ 명령어 뒤에 와서 인수 2가 인수 1보다 크면 목적지로 점프한다.


시프트 연산자

  1. SHL : 왼쪽으로 비트 이동

    1. 사용법

      1. SHL 목적지, 비트 수

    2. 설명

      1. 목적지에 있는 데이터를 비트 수만큼 왼쪽으로 이동, 곱셈과 관련이 있다. SAL도 같은 명령이다.

  2. SHR : 오른쪽으로 비트 이동

    1. 사용법

      1. SHR 목적지, 비트 수

    2. 설명

      1. 목적지에 있는 데이터를 비트 수만큼 오른쪽으로 이동, 나눗셈과 관련이 있다. SAR도 같은 명령이다.


스택 연산자

  1. PUSH : 스택에 입력

    1. 사용법

      1. PUSH 데이터

    2. 설명

      1. 데이터를 스택에 저장. ESP를 4바이트 만큼 감소시킨다. 함수에 인수를 전달하거나 데이터를 백업하고 지역 변수를 위한 공간을 할당할 때 사용한다.

  2. POP : 스택에서 출력

    1. 사용법

      1. POP 데이터

    2. 설명

      1. 데이터를 스택에서 데이터를 꺼내서 목적지에 저장. ESP를 4바이트 만큼 증가시킨다.

  3. PUSHAD : 레지스터 백업

    1. 사용법

      1. PUSHAD

    2. 설명

      1. EAX->ECX->EDX->EBX->ESP->EBP->ESI->EDI 레지스터 순서대로 스택에 PUSH한다. 레지스터 백업용도로 사용된다. ESP 레지스터는 32비트는 만큼 감소한다.

  4. POPAD : 레지스터 복구

    1. 사용법

      1. POPAD

    2. 설명

      1. 스택에 존재하는 값을 EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP 레지스터로 POP한다. ESP 레지스터는 32비트 만큼 증가한다.


기타 연산자

  1. CALL : 서브루틴(함수) 호출

    1. 사용법

      1. CALL 목적지

    2. 설명

      1. 복귀 주소(EIP 레지스터 값)를 스택에 백업한 후에 목적지 주소에 있는 서브루틴(함수)으로 이동한다.

  2. RETN : 복귀

    1. 사용법

      1. RETN

      2. RETN 바이트 수

    2. 설명

      1. 백업된 복귀 주소로 이동한다. POP EIP와 같은 의미이다. 즉 현재 스택 맨위에 있는 주소를 EIP에 저장한다. EIP는 다음에 실행될 주소가 저장된 레지스터이므로 복귀 주소가 된다.

      2. RETN 명령어 뒤에 오는 바이트 수는 스택을 사용하고 나서 반환해야하는 바이트 수를 의미한다.

  3. TEST : 테스트

    1. 사용법

      1. TEST 인수 1, 인수 2

    2. 설명

      1. 인수 1과 인수 2의 내용을 AND 연산하여 결과가 0이면 ZF를 1로 설정한다. 보통 NULL 체크할 때 사용한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함