본문 바로가기

IT/Intel 16bit Assembly

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

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


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

우선은 간단한 명령어부터~

MOV 레지스터, 숫자

예제)

  1. ; ax 레지스터에 지정된 숫자를 넣어줍니다.
  2. mov ax, 3


MOV 레지스터, [주소]

예제)

  1. mov ax, [0103]
  2. ;mov ax, x(변수)
  3.  
  4. ;ax 레지스터에 지정된 숫자를 넣어줍니다. 
  5. ;여기서는 0103 번지의 값을 ax에 넣으라는 소린데 이는 소스코드에서 x의 주소입니다.


MOV [주소], 숫자

예제)

  1. mov word ptr [0103]2013
  2.  
  3. ;0103 주소에 저장되어 있는 값에 word 만큼의 크기로 2013 이라는 값을 저장합니다.
  4. ;(20 상위 주소에 13은 하위 주소에)


MOV 레지스터, 숫자+배열 인덱스

예제)

  1. mov dl, [bx+0105]
  2. ; mov dl, y[bx]
  3.  
  4. ; bx레지스터의 값 + 105 주소의 값을 dx레지스터 하위 1바이트 레지스터에 저장합니다.
  5. ; 이와 같이 bx레지스터는 인덱스에 사용됩니다.



MOV 레지스터, 레지스터

예제)

  1. mov ds, ax
  2.  
  3. ;데이터 세그먼트(ds)나 엑스트라 세그먼트(ex)도 값을 바꿀 수 있습니다.


INC [주소]

예제)

  1. inc byte ptr [bx]
  2.  
  3. ;bx에 저장된 값의 주소의 값을 1 증가시킵니다. (모르는 주소)


* 관련 링크 참조

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

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

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