어셈블리어와 악성코드

어셈블리어 명렁어 [MOV, INC, DEC]

YaluStar 2018. 11. 16. 00:10

어셈블리어 명령어 [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에 대하여 알아보았습니다.

감사합니다.


반응형