프로그래밍언어/리버싱 입문
어셈블리 산술명령어 (Mul)
Great king
2019. 4. 14. 17:19
MUL / IMUL
- mul -> 2진수 데이터의 곱셈에서 데이터가 부호가 없을 때 사용
- imul -> 2의 보수일 때 사용, 즉 부호가 있을 때 사용
형식: [라벨:] mul / imul 레지스터 / 메모리
- 피연산자는 레지스터/메모리 여야 하며, 즉시 값, 상수 값은 피연산자로 사용할 수 없다.
- 곱셈 연산
- 바이트 * 바이트 , 워드 * 워드, 더블워드 * 더블워드
바이트(Byte) 곱셈
워드(Word) 곱셈
더블워드(dword) 곱셈
실습1
#레지스터간 곱셈, 레지스터와 메모리 간의 곱셈
%include "io64.inc"
section .data
section.bss
mul_reg resd 1
mul_mem resd 1
a resd 1
section .text
global CMAIN
CMAIN:
; 레지스터간의 곱셈
mov [mul_reg], dword 0
mov rax, 400
mov rbx, 300
mul rbx
mov [mul_reg], rax
PRINT_DEC 4, [mul_reg]
NEWLINE
;레지스터와 메모리 간의 곱셈
mov [a], dword 300
mov rax, 400
mul dword [a]
mov [mul_mem], rax
PRINT_DEC 4, [mul_mem]
NEWLINE
xor rax, rax
ret
실습2
# 곱셈 예제
%include "io64.inc"
section .data
a db 0
b db 0
c dd 0
section.bss
a_byte resb 1
a_word resw 1
a_dword resd 1
section .text
global CMAIN
CMAIN:
mov al, 0
mov al, 7
mov cl, 10
mul cl
mov [a_byte], ax
PRINT_DEC 2, [a_byte]
NEWLINE
mov [b], word 25
mov ax, 30
mul word[b]
mov [a_word], ax
PRINT_DEC 2, [a_word]
NEWLINE
mov [c], dword 500
mov rax, 700
mul dword [c]
mov [a_dword], rax
PRINT_DEC 4, [a_dword]
NEWLINE
xor rax, rax
ret
실습을 통해서 예제의 답을 맞춰 보세요.