관리 메뉴

Jsecurity

어셈블리 산술명령어 (Mul) 본문

프로그래밍언어/리버싱 입문

어셈블리 산술명령어 (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

 

실습을 통해서 예제의 답을 맞춰 보세요.

Comments