首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MCS-51指令详解-4

MCS-51指令详解-4

算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中应特别注意。




[1].
加法指令(4条)


这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。




ADD  A,#Data   ;(A)+#Data→(A) 累加器A中的内容与立即数#Data相加,结果存在A中


ADD  A,Data    ;(A)+(Data)→(A) 累加器A中的内容与直接地址单元中的内容相加,结果存在A中


ADD  A,Rn     ;(A)+(Rn)→(A) 累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中


ADD  A,@Ri    ;(A)+((Ri))→(A) 累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中




[2].
带进位加法指令(4条)


这4条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。




ADDC  A,Data    ;(A)+(Data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中


ADDC  A,#Data   ;(A)+#Data +(C)→(A) 累加器A中的内容与立即数连同进位位相加,结果存在A中


ADDC  A,Rn      ;(A)+Rn+(C)→(A) 累加器A中的内容与工作寄存器Rn中的内容、连同进位位相加,结果存在A中


ADDC  A,@Ri     ;(A)+((Ri))+(C)→(A) 累加器A中的内容与工作寄存器Ri指向地址单元中的内容、连同进位位相加,结果存在A中




[3].
带借位减法指令(4条)


这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。

    这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。





SUBB  A,Data      ;(A)-(Data) - (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中


SUBB  A,#Data     ;(A)-#Data -(C)→(A) 累加器A中的内容与立即数、连同借位位相减,结果存在A中


SUBB  A,Rn       ;(A)-(Rn) -(C)→(A) 累加器A中的内容与工作寄存器中的内容、连同借位位相减,结果存在A中


SUBB  A,@Ri      ;(A)-((Ri)) -(C)→(A) 累加器A中的内容与工作寄存器Ri指向的地址单元中的内容、连同借位位相减,结果存在A中




[4].
乘法指令(1条)


这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。




MUL  AB       ;(A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中




[5].
除法指令(1条)


这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值,表示除法有溢出。




DIV  AB       ;(A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。




[6].
加1指令(5条)


这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式:




INC  A          ;(A)+1→(A) 累加器A中的内容加1,结果存在A中


INC  Data       ;(Data)+1→(Data) 直接地址单元中的内容加1,结果送回原地址单元中


INC  @Ri       ;((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中


INC  Rn         ;(Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中


INC  DPTR      ;(DPTR)+1→(DPTR)数据指针的内容加1,结果送回数据指针中



        在INC  Data这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作。




[7].
减1指令(4条)


这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址方式,当直接地址是I/O口锁存器时,“读—修改—写”操作与加1指令类似。




DEC  A         ;(A)-1→(A)累加器A中的内容减1,结果送回累加器A中


DEC  Data      ;(Data)-1→(Data)直接地址单元中的内容减1,结果送回直接地址单元中


DEC  @Ri      ;((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中




DEC  Rn      ;(Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中




[8].
十进制调整指令(1条)


在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。




DA  A
返回列表