어셈블리어 명령어 [MOV, INC, DEC]
어셈블리어에서 사용하는 명령어 중 MOV, INC, DEC에 대하여 알아보겠습니다.
MOV (Move)
Source에서 Destination으로 데이터를 복사한다.
MOV Dest, Src
Src에 있는 값을 Dest로 복사한다고 보시면 됩니다. 복사라고도 할 수 있고 대입이나 입력이라고 보셔도 됩니다. 그리고 Dest에는 상수가 올 수 없습니다.
C언어에서 int a = 1 코드는 뒤에 있는 숫자 1을 앞에 있는 변수 a에 저장하듯이 MOV 명령어도 뒤에 있는 값을 앞에 있는 변수(레지스터,메모리)에 저장한다고 이해하시면 됩니다.
사용 양식을 보면 다음과 같이 사용할 수 있습니다.
reg : 레지스터, imm : 상수, mem : 메모리
MOV reg, imm
MOV reg, reg
MOV mem, reg
MOV mem, imm
MOV reg, mem
ex)
MOV AX, 1 : 1을 AX에 복사
MOV AX, BX : BX의 값을 AX에 복사
MOV [10], AX : AX의 값을 10번지에 복사
MOV [10], 1 : 1을 10번지에 복사
MOV AX, [10] : 10번지의 값을 AX에 복사
INC (Increase)
피 연산자에 1을 더한다.
연산 결과에 따라 ZF(Zero Flag)나 OF(Overflow Flag)가 세트 될 수 있다.
ZF와 OF는 나중에 확인하겠습니다.
INC 명령어는 레지스터와 메모리만 사용할 수 있습니다.
INC reg
INC mem
실습 환경
VMware Workstation 15 Player (FREE 버전)
Windows XP Professional SP3 (32Bit)
CMD창을 열어 debug 명령어를 입력합니다.
-a 100
MOV AX, 100
INC AX
명령어를 입력합니다.
입력한 후 실행하면 처음 AX=0000입니다.
MOV AX, 100을 실행하니 AX=0100이 됩니다.
INC AX을 실행하면 AX=0101이 됩니다.
추가로 INC 명령어에 대하여 알아보겠습니다.
AX=00FF을 입력한 상태에서 INC AX 명령어를 사용할 경우에는 AX=0100이 됩니다.
그러나 똑같이 AX=00FF인 경우일지라도 INC AL 명령어를 사용하게 되면 AX=0100으로 바뀌는 것이 아니라 AX=0000으로 남아있게 됩니다.
INC 뒤에 AX가 붙는지 AL이 붙는지에 따라서 결과 값이 다르게 나온다는 것을 확인할 수 있습니다.
DEC (Decrease)
피 연산자에 1을 뺀다.
연산 결과에 따라 ZF(Zero Flag)나 OF(Overflow Flag)가 세트 될 수 있다.
ZF와 OF는 나중에 확인하겠습니다.
DEC 명령어는 레지스터와 메모리만 사용할 수 있습니다.
DEC reg
DEC mem
실습 환경
VMware Workstation 15 Player (FREE 버전)
Windows XP Professional SP3 (32Bit)
CMD창을 열어 debug 명령어를 입력합니다.
-a 100
MOV AX, 200
INC AH
INC AX
DEC AL
명령어를 입력합니다.
처음 AX=0000 입니다. 다음 명령어인 MOV AX, 200을 실행합니다.
AX=0200으로 되었습니다.
INC AH 명령어를 사용하니 AX=0300이 되었습니다.
이어서 INC AX 명령어를 진행합니다.
INC AX 명령어를 진행하니 AX=0301이 되었습니다.
마지막 DEC AL 명령어를 진행합니다.
AX=0301에서 AX=0300으로 감소하였습니다.
코드에서 확인하였듯이 AX뿐만 아니라 AH, AL도 사용하실 수 있습니다.
이상으로 어셈블리어 명령어 MOV, INC, DEC에 대하여 알아보았습니다.
감사합니다.
'어셈블리어와 악성코드' 카테고리의 다른 글
어셈블리어 명령어 [CMP, JMP, CALL] (0) | 2018.11.18 |
---|---|
어셈블리어 명령어 [ADD, SUB] (0) | 2018.11.17 |
어셈블리어 기초 (0) | 2018.11.15 |
랜섬웨어(Ransomware) (0) | 2018.11.13 |
악성코드와 악성코드의 역사 (0) | 2018.11.12 |