• 赞助网站
  • 您的位置:  首页 >> 网站导航 >> MCU技术 >> MCS-51算术运算指令
    MCS-51算术运算指令
    2008年01月17日 点击: 编辑: admin
    算术运算指令共有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
    赞助网站 | 关于我们 | 版权声明 | 站点导航 | 收藏本站 | 设为首页