본문 바로가기

IT/Intel 16bit Assembly

x86 16bit 어셈블리(Assembly) 예제 정리 - 2

/* 
written by kaspy (kaspyx@gmail.com)
*/ 


문득 어셈블리 언어를 보다보면 자주쓰지 않는 만큼 해깔릴수 있는것들이 많은것 같아서 정리해보았다. 특히 주소 연산 mov [100], 10 같은것들
많이 사용되지 않는 16bit 어셈블리어지만 레지스터 크기나 명령어 이름만 조금 바꾼 형태로 익힌다면 32bit도 그리 어렵지는 않을것이다.
(ex. 16bit 레지스터 ax -> 32bit는 eax)

이어서 진행~


문자열 출력

예제)

  1. mov ah, 9
  2. int 21h
  3.  
  4. ;ax의 상위 레지스터 ax에 9를 저장하고 int 21h명령어를 실행시키면 dx에 주소에 저장된 값의 문자가 
  5. ;'$' 가 나올 때 까지 출력됩니다.


ES 세그먼트 오프셋을 이용한 MOV

예제)

  1. mov es, ax
  2. mov ax, [0000]
  3. ; mov ax, es[0]
  4.  
  5. ; ax에 있는 ffff의 값을 es 레지스터에 저장합니다. 
  6. ; 그리고 mov ax, es[0] 명령어를 수행하는데 es에는 ffff 가 들어가있습니다.
  7. ; mov ax, es[0] 를 하면 실제 주소는 es의 주소값 ffff:0000 이 실제 값입니다. 
  8. ; ffff:0000 에 저장되어있는 값을 ax에 저장합니다.


POP 명령어

예제)

  1. pop ax
  2. ; ax 레지스터에 현재 스택포인터(sp) 값을 저장합니다.


RET 명령어

예제)

  1. ret
  2.  
  3. ;ret 명령어는 sp가 가리키는 값을 ip 에 넣어주고 sp를 증가 시킵니다.


SUB 명령어

예제)

  1. mov ax, 0000
  2. sub ax, 0001
  3.  
  4. ; ax에 0을 넣어주고 1을 빼줍니다.
  5. ; 그러면 ax는 실제로 1111 1111 1111 1111 이며 맨 앞에 비트가 1이므로 ng
  6. ; 그리고 짝수이므로 pe 그리고 내림수가 나왔기 때문에 cy 로 플래그가 켜졌습니다.



ADC, SBB 명령어

예제)

  1. mov bx, 2
  2. adc ax, bx  
  3. sbb ax, bx
  4.  
  5. ;ax = 0xffff
  6. ;bx에 2를 저장하고 ax에 bx를 더합니다.
  7. ;ax는 한계치를 넘었고 carry bit가 있기 때문에 ffff + 2는 2가 됩니다. 마찬가지로
  8. ;sbb ax, bx 는 버림수와 같이 계산하고 ffff가 됩니다.


MUL 명령어

예제)

  1. mov ax, 2003
  2. mov cx, 11
  3. mul cx
  4.  
  5. ;ax 레지스터에 2003을 넣고 cx 레지스터에는 11을 넣은다음에 mul cx를 하면
  6. ;ax = ax * cx 값이 들어가게 됩니다.
  7. ;그런데 ax가 표현할수 있는 한계치를 초과하여 오버 플로우 플래그 nv에서 ov로 바뀌었습니다.


IMUL 명령어

예제)

  1. mov ax, ffff
  2. mov cx, 5
  3. imul cx
  4.  
  5. ;ax에 16진수 ffff를 저장하고 cx에 5를 저장해서
  6. ;부호있는 정수형 곱셈 ax <- ax * cx를 해줍니다.
  7. ;이때 ax는 음수이며 맨앞의 1비트를 제외하고 5를 곱하기 때문에
  8. ;ovflow와 carryflag는 켜지지 않습니다.


DIV 명령어

예제)

  1. mov cl, 11
  2. div cl
  3.  
  4. ;ax에서 cl로 나누어 주고 ah에는 몫을 al에는 나머지를 저장합니다.

* 관련 링크 참조

http://kaspyx.tistory.com/entry/16bit-Assembly-예제-정리-1

http://kaspyx.tistory.com/entry/16bit-Assembly-예제-정리-3

http://kaspyx.tistory.com/entry/16bit-Assembly-예제-정리-4