본문 바로가기
Reversing/Assemble

[ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte)

by 코뮤(commu) 2020. 4. 15.
728x90
반응형

 

SASM 환경에서 진행합니다.

 

 

 

Assemble 곱셈 실습

 

어셈블리어에서의 곱셈/나눗셈은 덧셈, 뺄셈보다 조금 복잡합니다.

이번 포스팅은 1byte 곱셈 / 1byte 나눗셈만 다뤄보겠습니다.

 

우선, AX 라는 레지스터는 AH 와 AL 로 나눌 수 있습니다.

이걸 알고 넘어가야 이해할 수 있습니다.

 

AX
AH AL

 

 

곱셈의 형식은 이러합니다.

 

mul 파라미터

 

 

우리가 아는 곱셈의 형식은 피연산자가 2개인, A*B 의 형태입니다.

하지만 어셈블리어에서는 마치 피연산자가 1개인 것 처럼 보입니다.

 

 

핵심만 말하겠습니다.

mul 뒤에 붙는 파라미터 값은 AL 과 곱해져 AL에 저장됩니다.

 

 

AL에 저장된다는 것은, AX에서도 그 값을 볼 수 있다는 말입니다.

 

말로는 조금 어려우니, 코드로 볼까요?

 

 

 

 

 

ax에 0이 들어있는 상황에서, al에 2를, bl에 3을 넣어줍니다.

그리고 mul 을 이용하여 bx와 곱해줍니다.

 

 

 

 

mul bx 만 보도록 하겠습니다.

 

저것은 AX=AL*BL 과 같은 말입니다.

 

al 과 파라미터(bl) 을 곱해준 값을 ax에 넣었습니다.

 

출력하면, 6이 나오는 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

Assemble 나눗셈 실습

 

 

AX
AH AL
나머지

 

AH는 나머지를, AL 은 몫을 표현하는데에 쓰입니다.

 

 

나눗셈의 형식은 이러합니다.

 

div 파라미터

 

 

 

나눗셈도 핵심만 말하겠습니다.

div 뒤에 붙는 파라미터 값은 AL을 나누는 수로, 몫은 AL에, 나머지는 AH에 저장됩니다.

 

 

 

 

나누어지는 값은 반드시 AX 레지스터 안에 있는 값이여야합니다.

코드로 확인해보시죠.

 

 

 

 

ax에 7, bx 에 2를 넣고

div 연산을 해줍니다.

 

 

al 을 확인해보니 몫이 제대로 나온 것을 확인할 수 있고,

ah값을 bl 로 옮겨 확인해보니 나머지도 제대로 연산이 된 것을 확인할 수 있었습니다.

 

 

 

 

 

728x90
반응형