어셈블리어에서 사칙연산에 사용하는 기호는 주소표현 내에서만 사용한다
따라서 각 연산에 해당하는 명령어를 사용하여야 한다
INC 명령어는 피연산자의 값을 1만큼 증가시켜준다
형식
INC OP
예제
MOV AX, 5 ; AX에 5를 넣는다
INC AX ; AX의 값을 1 증가시킨다 (결과: AX == 6)
DEC 명령어는 피연산자의 값을 1만큼 감소시켜준다
형식
DEC OP
예제
MOV BX, 3 ; BX에 3을 넣어준다
DEC BX ; BX의 값을 1 감소시킨다 (결과: BX == 2)
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)
이때 덧셈 과정에서 결과가 커져 받아올림이 발생하면 ADD는 이를 반영하지 못한다
이때 Carry Flag가 발생하는데, ADC 명령어를 사용하면 이를 함께 더해주어 올림수도 더해줄 수 있다
형식
ADC dst, src
SUB 명령어는 데이터의 빼기 연산을 해준다
형식
SUB dst, src
빼기 연산을 해주는것 빼고는 ADD와 똑같다
예제
MOV AL, 3 ; AL에 2를 넣어준다
MOV BL, 2 ; BL에 3을 넣어준다
ADD AL, BL ; AL에서 BL의 값을 뺀다 (결과: AL + BL = 1)
덧셈과 마찬가지로 뺄셈을 하는 과정에서 받아내림이 발생할 수 있다
SBC는 Carry Flag가 0이면 추가로 1을 더 빼준다
형식
SBC dst, src
곱셈은 덧셈과 뺄셈과 형식의 차이가 있다
비트에 따라 8bit면 AL, 16bit면 AX와 피연산자를 곱하여 AL 또는 AX에 저장한다
형식
MUL OP
예제
MOV AL, 5 ; al에 5를 넣어준다
MOV BL, 10 ; bl에 10을 넣어준다
MUL BL ; al과 bl을 곱해준다 (결과: AL = 50)
나눗셈은 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)