연산

·2023년 4월 17일
0

C++

목록 보기
5/5

📌사칙연산


입력받아오기

GET_DEC byte, where

10진수를 받아올건데 byte 어디에 받아올건가?

출력하기

PRINT_DEC 1, al

al을 1byte만큼 출력

더하기

더하기 연산

add a, b ;(a = a + b)

a는 레지스터 or 메모리
b는 레지스터 or 메모리 or 상수
단! a, b 모두 메모리는 X

레지스터 + 상수

add al, 1 ; 레지스터 + 상수
PRINT_DEC 1, al ; 1 + 1 = 2
NEWLINE

레지스터 + 메모리

add al, [num] ;레지스터 + 메모리( []안쓰면 주소라서 써야된다)
PRINT_DEC 1, al
NEWLINE

레지스터 + 레지스터

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

메모리 + 상수

add [num], byte 1 ; 메모리 + 상수 num자체는 쌩 메모리 주소라서 얼마만큼 쓸지 해줘야함
PRINT_DEC 1, [num]
NEWLINE

메모리 + 레지스터

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

빼기

sub a, b ;( a = a - b)

곱하기

mul reg

곱하기는 규칙이 있다

1byte

mul bl -> al * bl
연산결과를 ax에 저장

2byte

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

나누기도 규칙이 있다

1byte

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

ex) 100 / 3 은?

mov ax, 100
mov bl, 3
div bl
PRINT_DEC 1, al
NEWLINE
mov al, ah ; 해주는 이유는 ah는 PRINT_DEC안되서
PRINT_DEC 1, al

참고자료

Part1: C++ 프로그래밍 입문
섹션 1.어셈블리 언어 입문

profile
개인공부저장용(하루의 기록)

0개의 댓글