1、加法指令

(1)普通加法指令ADD

ADD OPTRD1+OPRD2
OPRD1=OPRD1+OPRD2

(2)带进位加法指令ADC

ADC OPTRD1+OPRD2
OPRD1=OPRD1+OPRD2+CF

  1. mov ax,2
  2. mov bx,1
  3. sub bx,ax
  4. adc ax,1
  5. mov ax,1
  6. add ax,ax
  7. adc ax,3
  8. mov al,98h
  9. add al,al
  10. 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中:

  1. mov bx,1000h
  2. mov ax,003eh
  3. sub bx,2000h
  4. sbb ax,0020h

(3)减1指令DEC

DEC OPTRD
OPRD=OPRD-1
该指令主要用于调整地址指针和计数器
例:假设有两个64位数按高高低低原则存放同一个段的两个缓冲区DATA1和DATA2,现计算DATA1-DATA2。结果存放在DATA1中,可能发生的借位保留在CF中:

  1. mov cx,4 ;64位分成4个字
  2. sub bx,bx ;清指针,同时清CF
  3. next:
  4. mov ax,data2[bx] ;取减数
  5. sbb data1[bx],ax ;带进位减
  6. inc bx ;调整指针
  7. inc bx
  8. dec cx ;计数器减1
  9. jnz next ;没完,继续

(4)取补指令NEG

NEG OPTRD
该指令用于对操作数取补,就是用零减去操作数OPRD,在把结果送回OPRD(把操作数按位取反,末位加1)

(5)比较指令CMP

CMP OPRD1,OPRD2
该指令完成操作数OPRD1减去操作数OPRD2,运算结果不保存,但影响标志CF,ZF,OF,AF,PF主要用于比较两个数的关系,是否相等,根据ZF是否置位,判断是否相等,如果两个操作数是无符号数,则根据CF判断大小,有符号数,根据和OF位判断大小。

  1. mov ax,8
  2. mov bx,3
  3. cmp ax,bx
  4. 执行后,
  5. ax=8,
  6. zf=0,
  7. pf=1,
  8. sf=0,
  9. cf=0,
  10. of=0