/*
written by kaspy (kaspyx@gmail.com)
*/
문득 어셈블리 언어를 보다보면 자주쓰지 않는 만큼 해깔릴수 있는것들이 많은것 같아서 정리해보았다. 특히 주소 연산 mov [100], 10 같은것들
많이 사용되지 않는 16bit 어셈블리어지만 레지스터 크기나 명령어 이름만 조금 바꾼 형태로 익힌다면 32bit도 그리 어렵지는 않을것이다.
(ex. 16bit 레지스터 ax -> 32bit는 eax)
이어서 진행~~
NEG 명령어
예제)
- neg cx
- ;cx를 보수형태로 바꾸어 줍니다.
- ;19 -> 0000 0000 0001 1001 ->
- ; 1111 1111 1110 0110 -> ffe7
CBW 명령어
예제)
- mov al, f1
- cbw
- mov al,3
- cbw
- ;cbw는 al레지스터를 ax 로 확장하는 명령입니당.
CWD 명령어
예제)
- mov ax, 1a
- cwd
- ;ax 레지스터를 더블워드 크기로 바꿉니다.
- ;dx레지스터와 합쳐서 크기를 확장합니다.
CMP 명령어
예제)
- mov al, 38
- cmp al, 38
- mov al, 00
- cmp al, 01
- ; al에 38을 저장하고 al과 38을 비교하면 두수의 차이는 0이므로 제로플래그가 켜집니다.
- ; 반대로 al에 0을 저장하고 1과 비교하면 차이가 -1이어서 사인플래그가 켜졌고 결과치가 0이 아니므로
- ; 제로플래그는 NZ로 바뀌었습니다.
XCHG 명령어
예제)
- mov bx, 0103
- xchg bx, ax
- ;두 레지스터의 값을 바꿉니다.
PUSH 명령어
예제)
- push ax
- ;스택 포인터 sp를 감소시키고 감소된 sp의주소가 가리키는 값에 ax의 값을 저장시킵니다.
관련 링크 참조
http://kaspyx.tistory.com/entry/16bit-Assembly-예제-정리-1
'IT > Intel 16bit Assembly' 카테고리의 다른 글
x86 16bit 어셈블리(Assembly) 예제 정리 - 4 (2) | 2015.04.10 |
---|---|
x86 16bit 어셈블리(Assembly) 예제 정리 - 2 (0) | 2015.04.09 |
x86 16bit 어셈블리(Assembly) 예제 정리 - 1 (0) | 2015.04.08 |