[Assembly] 산술 연산

JongHyeon_Seo·2022년 5월 14일
0

어셈블리어에서 사칙연산에 사용하는 기호는 주소표현 내에서만 사용한다
따라서 각 연산에 해당하는 명령어를 사용하여야 한다

INC

INC 명령어는 피연산자의 값을 1만큼 증가시켜준다
형식

INC OP

예제

MOV	AX, 5	; AX에 5를 넣는다
INC	AX		; AX의 값을 1 증가시킨다 (결과: AX == 6)

DEC

DEC 명령어는 피연산자의 값을 1만큼 감소시켜준다
형식

DEC	OP

예제

MOV	BX, 3	; BX에 3을 넣어준다
DEC	BX		; BX의 값을 1 감소시킨다 (결과: BX == 2)

ADD

ADD 명령어는 데이터의 더하기 연산을 해준다

형식

ADD	dst, src

이때, dst에 값이 저장된다
dst에는 레지스터, 메모리가 올수 있고, src에는 레지스터와 메모리, 상수가 올 수 있다.
하지만 메모리와 메모리의 연산은 불가능하다

예제

MOV	AL, 2		; AL에 2를 넣어준다
MOV	BL, 3		; BL에 3을 넣어준다
ADD AL, BL		; AL과 BL의 값을 더한다 (결과: AL + BL = 5)

ADC

이때 덧셈 과정에서 결과가 커져 받아올림이 발생하면 ADD는 이를 반영하지 못한다
이때 Carry Flag가 발생하는데, ADC 명령어를 사용하면 이를 함께 더해주어 올림수도 더해줄 수 있다

형식

ADC	dst, src

SUB

SUB 명령어는 데이터의 빼기 연산을 해준다

형식

SUB	dst, src

빼기 연산을 해주는것 빼고는 ADD와 똑같다

예제

MOV	AL, 3		; AL에 2를 넣어준다
MOV	BL, 2		; BL에 3을 넣어준다
ADD AL, BL		; AL에서 BL의 값을 뺀다 (결과: AL + BL = 1)

SBC

덧셈과 마찬가지로 뺄셈을 하는 과정에서 받아내림이 발생할 수 있다
SBC는 Carry Flag가 0이면 추가로 1을 더 빼준다

형식

SBC	dst, src

MUL

곱셈은 덧셈과 뺄셈과 형식의 차이가 있다
비트에 따라 8bit면 AL, 16bit면 AX와 피연산자를 곱하여 AL 또는 AX에 저장한다
형식

MUL	OP

예제

MOV	AL, 5		; al에 5를 넣어준다
MOV	BL, 10		; bl에 10을 넣어준다
MUL	BL			; al과 bl을 곱해준다 (결과: AL = 50)

DIV

나눗셈은 8bit일때 AX, 16bit일때 DX:AX에서 피연산자를 나누어 준다
이때 8bit인 경우에는 몫이 AL, 나머지가 AH에 저장되며,
16bit인 경우에는 몫이 AX, 나머지가 DX에 저장된다

형식

DIV	OP

예제

MOV	AX, 35		; AX에 35를 넣어준다
MOV	BX, 8		; BX에 8을 넣어준다
DIV	BX			; AX에서 BX를 나눈다 (결과: AH = 3, AL = 4)
profile
코딩 코딩

0개의 댓글