单片机基础之汇编语言入门学习(九) 算术运算类指令


算术运算类指令包括以下四种指令

加法指令
减法指令
乘法指令
除法指令

1、加法指令

8086具有5条加法指令:
ADD  加法指令
ADC  带进位加法指令
INC  加1指令
AAA  加法ASCII调整指令
DAA  加法十进制调整指令

1.(1)无进位加法指令 ADD

指令格式: ADD  dest,src;
功能:(dest)<-(dest)+(src)
 src: 立即数,通用寄存器,存储器
 dest:通用寄存器,存储器
例如:
  ADD  CL,10
  ADD  DX,SI
  ADD  AX,[2F00H]
  ADD  100H[BX],AL
  ADD  [DI],30H
特点:
   可进行8位或16位的无符号数或有符号数加法运算;
   源操作数和目标操作数不能同时为存储器,不能为段寄存器
指令影响标志位:
   8位(有符号)数相加,和超出范围(-128~127),或16位(有符号)数相加,和超出范围(-32768~+32767),则O=1.
   8位(无符号)数相加,超过255,或16位(无符号)数相加,和超过65535,则C=1.
   其他标志(S,A,P,Z)由运算结果按定义确定。

1.(2)带进位的加法指令 ADC(Add with carry)

格式:ADC  dest,src
功能:(dest)<-(dest)+(src)+C
    C:进位标志C的现行值(上条指令C值)
特点:与ADD同。
用途:主要用于多字节运算中。
类型举例:
   ADC  CX,300
   ADC  AL,BL
   ADC  DX,[SI]
如:求两个32位数12345678H与0ABCDEFABH之和
  MOV  AX,1234H
  MOV  BX,5678H
  ADD  BX,0EFABH
  ADC  AX,0ABCDH

1.(3)加1指令 INC

格式:  INC  dest;
功能:  (dest)<-(dest)+1
         dest:通用寄存器、存储器
用途:用于在循环程序中修改地址指针和循环次数。
标志位影响情况:  影响S,Z,A,P,O;  不影响C。

2、减法指令

8086有7条减法指令:
SUB   减法指令
SBB   进位减法指令
DEC   减1指令
NEG   求补指令
CMP   比较指令
AAS    减法ASCII调整指令
DAS    减法十进制调整指令

2.(1)减法指令 SUB

格式:  SUB  dest,src;
功能:  (dest)<-(dest)-(src)
     src: 立即数,通用寄存器,存储器
     dest: 通用寄存器,存储器。
例如:
    SUB  AL,37H
    SUB  BX,DX       

2.(2)带进位减法指令 SBB

格式: SBB dest,src;
功能:  (dest)<-(dest)-src-C
    src: 立即数,通用寄存器,存储器
    dest: 通用寄存器,存储器
指令影响标志位
例如:
   SBB  BX,100H
   SBB  CX,DX
   SBB  WORD PTR 100H[BP],100

2.(3)减1指令 DEC

格式: DEC  dest
功能:  (dest)<-(dest)-1
    dest: 通用寄存器、存储器。不能是段寄存器。
用途:用于在循环程序中修改地址指针和循环次数。
标志位影响情况: 影响S,Z,A,P,O; 不影响C。

2.(4)求补指令 NEG

格式:  NEG  dest  ;
功能: (dest)<-0-(dest)
     dest: 通用寄存器、存储器。
操作:把操作数按位求反后,末位+1
影响标志: A,C,O,P,S,Z。
   C:操作数为0时求补,C=0;一般使C=1.
   O:对-128 或 -32768求补,O=1;否则 O=0;

2.(5)比较指令 CMP

格式: CMP dest,src  ;(dest)-(src)
          结果不保留,只是用来影响标志位。
影响标志: A,C,O,P,S,Z.
     src: 立即数,通用寄存器,存储器
     dest: 通用寄存器,存储器
例如:
   CMP  AL,0AH       寄存器与立即数比较
   CMP  CX, DI       寄存器与寄存器比较
   CMP  AX,[1000H]   寄存器与存储器比较
   CMP  [BX+5],SI    存储器与寄存器比较
用途;
     用比较指令来比较两个数之间的关系;
     两者是否相等,两个数中哪个大。
    (1)根据Z标志,判断两者是否相等;
    (2)根据C标志,判断两个无符号数的大小;
    (3)用S、O标志,判断两个带符号数的大小。

3、乘法指令
3.(1)无符号乘法 (MUL)

格式: MUL SRC
操作:
    字节操作数:AX<-(AL)*(SRC)
    字操作数:DX:AX<-(AX)*(SRC)

3.(2)带符号乘法 (IMUL)

格式:IMUL SRC
操作:同MUL,但操作数和乘积均带符号;
   按有符号数的规则相乘;

4、除法指令
4.(1)无符号除法(DIV)

格式:  DIV  SRC
操作:
字节除数: AL<-(AX)/(SRC)     之商
          AH<-(AX)/(SRC)     之余数
字除数    AX<-(DX:AX)/(SRC)   之商
          DX<-(DX:AX)/(SRC)  之余数          

4.(2)带符号除法 (IDIV)

格式: IDIV  SRC
操作: 同DIV指令
商和余数是带符号的;商的符号符合一般代数符号规则,余数的符号与被除数相同。

4.(3)字节扩展指令 (CBW)

格式: CBW ;Convert Byte to Word
功能: 将AL字节扩展成字,符号位及高字节在AH中;

4.(4)字扩展指令 (CBD)

格式:
   CBD ; CWord to Double Word
功能:AX扩展成双字,符号位及高字在DX中;
这两条指令的作用是对 被除数 AL 或 AX 进行扩展。

5、十进制调整指令

上一篇:C语言qsort中的cmp函数定义


下一篇:​万能cmp程序, 有了他, 建议把其他程序全删掉!