ImFe's study

어셈블리어 본문

Reversing

어셈블리어

ImFe 2020. 4. 12. 21:12



 

MOV)
전에 포스팅 한 글에도 나와있지만

mov a, b 는 b를 a에 넣는것을 의미합니다
mov 목적지, 값 으로 생각하면 되겠네요

EX)

 

AX를 56h와 같게 하려면
MOV AX,56h   //AX의 값이 56h가 된다.

 

값으로 다른 레지스터를 사용할수도있습니다.
MOV AX,BX    //AX의 값이 BX로 바뀐다. BX의 값이 nn이라면 AX또한 nn이 됩니다.

 

 

 

XCHG)

XCHG연산자는 두 레지스터를 바꾸는 역할을 합니다. (exchange)
 

EX)

MOV DX,56h

MOV AX,3Fh

XCHG DX,AX  // 값을 교환함으로써 DX는 3Fh, AX는 56h가 됩니다.

+8비트 레지스터와 16비트가 교환되지 않도록 해야합니다. 해당 코드는 의미가 없습니다.

 

INC(increase)와DEC(decrease) // 피연산자(operand)의 값을 1만큼 변경시킵니다.

MOV DX,50h  //DX의 값을 50h로 설정

INC DX  //DX의 값을 1만큼 증가 51h가 되었음. (=DX++)

 

MOV DX,50h  //DX의 값을 50h로 설정

DEC DX //DX의 값을 1만큼 감소, 4F가 되었음. (=DX--)

 

 

 

스택 조작에 관련된 연산자)

스택 조작에 사용되는 스택 연산자는 6개가 있으며, 그중 2개가 가장 많이 사용됩니다. (POP과 PUSH)

 

만약에 스택에 있는 AX에 값을 일시적으로 저장한다고 가정하면

 

PUSH AX

 

라고 입력하면 됩니다.

 

또 원래 값으로 돌아가려면 POP을 이용하면 됩니다.


POP AX

 

주의할점은 스택이 16비트 레지스터만 받아들인다는 점입니다.

 

다음 예제를 통해 위에서 서술한 항목들을 다시 확인해보겠습니다.

 

MOV AX,51h  //AX에 51h값을 넣습니다.

MOV BX,4Fh  //BX에 4Fh값을 넣습니다.

 

XCHG AX,BX  //AX와 BX값을 교환합니다.

 

PUSH AX  // AX를 스택에 지정해줍니다.

MOV AX,34h // AX의 값을 34h로 지정합니다.

 

POP BX // 원래의 BX값으로 돌아감

 

PUSH BX //BX값은 4Fh

 

POP AX //원래의 AX값으로 돌아갑니다. 4Fh가 됩니다.

 

 

 

 

어셈블리 사칙연산)

사칙연산을 하는 어셈블리어는 ADD,SUB,MUL,DIV가 있습니다. (더하기, 빼기, 곱하기, 나누기)

 

 

ADD)

ADD의 문장 구조는 다음과 같습니다.

ADD 레지스터1, 레지스터2

ADD 레지스터, 값

 

EX)

MOV AX,5h  //AX의 값은 5h

MOV BX,4h  //BX의 값은 4h

 

ADD AX,BX  //AX에 BX를 더하고, 그 값을 AX에 저장(5h+4h = 9h = AX)

 

+)ADD AX,4h  //AX=5h, 여기에 4h를 더합니다. 최종 AX의 값은 5h+4h=9h

 

 

 

SUB)

SUB의 문장 구조는 다음과 같습니다.

SUB 레지스터1, 레지스터2

SUB 레지스터, 값

 

MOV BX,4Fh  //BX의 값은 4Fh

SUB BX,5h  //BX의 값에서 5h를 뺌.  최종 BX의 값은 4A

 

 

 

MUL)

MUL 레지스터는 하나의 피연산자(operand)만 필요로 합니다. 프로세스가 레지스터를 AX또는 AH와 곱하기를 원한다고 추정하기 때문이라네요.(+ AL, AX, EAX)

MUL의 문장 구조는 다음과 같습니다.

 

MOV AX,5h

MOV BX,4Fh

MUL BX

AX값은 결국 18B(4Fh * 5h)가 됩니다.

 

 

 

DIV)

DIV는 MUL과 동일하게 하나의 피연산자만 필요로합니다.
DIV의 문장 구조는 다음과 같습니다.

 

MOV AX,5h

MOV BX,4Fh

DIV BX

AX의 값은 Fh입니다. (4Fh / 5h = Fh)

4Fh = 79

5h = 5

79 / 5 = 15.8

Fh=15

 

 

 

비트 연산자들에 대한 정보는 추후 추가하겠습니다.

 

 

 

 

 

 

 

 

 

 

Comments