1、加法指令
(1)普通加法指令ADD
ADD OPTRD1+OPRD2
OPRD1=OPRD1+OPRD2
(2)带进位加法指令ADC
ADC OPTRD1+OPRD2
OPRD1=OPRD1+OPRD2+CF
mov ax,2
mov bx,1
sub bx,ax
adc ax,1
mov ax,1
add ax,ax
adc ax,3
mov al,98h
add al,al
adc al,3
ADC指令用于多字节运算中。编程计算:1ef000h+201000h,结果存放在AX高16位和BX低16位
(3)加1指令INC
INC OPTRD
OPRD=OPRD+1
该指令主要用于调整地址指针和计数器
例:假设有100个16位无符号数存放在1234:5678H开始的内存中,现需要求他们的和。设把32位的和保存在DX(高位)和AX寄存器中。
2.减法指令
(1)普通减法指令SUB
SUB OPTRD1,OPRD2
OPRD1=OPRD1-OPRD2
(2)带进位减法指令SBB
SBB OPTRD1,OPRD2
OPRD1=OPRD1-OPRD2-CF
计算003E1000H-00202000H,结果放在AX,BX中:
mov bx,1000h
mov ax,003eh
sub bx,2000h
sbb ax,0020h
(3)减1指令DEC
DEC OPTRD
OPRD=OPRD-1
该指令主要用于调整地址指针和计数器
例:假设有两个64位数按高高低低原则存放同一个段的两个缓冲区DATA1和DATA2,现计算DATA1-DATA2。结果存放在DATA1中,可能发生的借位保留在CF中:
mov cx,4 ;64位分成4个字
sub bx,bx ;清指针,同时清CF
next:
mov ax,data2[bx] ;取减数
sbb data1[bx],ax ;带进位减
inc bx ;调整指针
inc bx
dec cx ;计数器减1
jnz next ;没完,继续
(4)取补指令NEG
NEG OPTRD
该指令用于对操作数取补,就是用零减去操作数OPRD,在把结果送回OPRD(把操作数按位取反,末位加1)
(5)比较指令CMP
CMP OPRD1,OPRD2
该指令完成操作数OPRD1减去操作数OPRD2,运算结果不保存,但影响标志CF,ZF,OF,AF,PF主要用于比较两个数的关系,是否相等,根据ZF是否置位,判断是否相等,如果两个操作数是无符号数,则根据CF判断大小,有符号数,根据和OF位判断大小。
mov ax,8
mov bx,3
cmp ax,bx
执行后,
ax=8,
zf=0,
pf=1,
sf=0,
cf=0,
of=0