사칙연산

namu·2022년 6월 28일

더하기 연산
add a, b (a = a + b)
a는 레지스터 or 메모리
b는 레지스터 or 메모리 or 상수
단! a, b 모두 메모리는 X

add al, 1 ; 레지스터 + 상수

add al, [num] ; 레지스터 + 메모리

mov bl, 3 ;
add al, bl ; 레지스터 + 레지스터

add [num], byte 1 ; 메모리 + 상수

add [num], al ; 메모리 + 레지스터

section .bss
	num resb 1

빼기 연산
sub a, b (a = a - b)

곱하기 연산
mul reg
mul bl => al bl, 연산 결과는 ax에 저장
mul bx => ax
bx, 연산 결과는 dx(상위 16비트) ax(하위 16비트)에 저장
mul ebx => eax * ebx

ex) 5 * 8 은?
mov ax, 0
mov al, 5
mov bl, 8
mul bl
PRINT_DEC 2, ax
NEWLINE

나누기 연산
div reg
div bl => ax / bl, 연산 결과는 al(몫) ah(나머지)

ex) 100 / 3 은?
mov ax, 100
mov bl, 3
div bl
PRINT_DEC 1, al
NEWLINE
;PRINT_DEC 1, ah ; cannot use high register in rex instruction
mov al, ah
PRINTDEC 1, al

곱하기와 나누기 연산은 더하기 빼기만큼 간단하진 않다.
칩을 디지털 회로를 이용해서 만들게 되는데,
곱하기 나누기는 구현하기 어렵다. 회로가 복잡하게 되어있다.

profile
안녕하세요

0개의 댓글