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