单片机学习笔记4.汇编语言.3.3算术运算类指令详解

 

一、加法指令

1.不带进位加法(ADD )

ADD A,#data8 

ADD A,addr8

ADD A,@Ri

ADD A,Rn


2.带进位加法(ADDC )

ADDC A,#data8 ;A<-A+#data8+CY

ADDC A,addr8 ;A<-A+(addr8)+CY

ADDC A,@Ri  ;A<-A+(Ri)+CY

ADDC A,Rn ;A<-A+Rn+CY

3.增量指令(INC )

 INC A ;A<A+1

INC addr8 ;  (addr8)<-(addr8)+1

INC @Ri ;(Ri)<-(Ri)+1

INC Rn ; Rn<-Rn+1

INC DPTR ;  DPTR<-DPTR+1


二、减法指令

1.带借位减法(SUBB )

SUBB A,#data8 ;A<-A-#data8-CY

SUBB A,addr8 ;A<-A-(addr8)-CY

SUBB A,@Ri  ;A<-A-(Ri)-CY

SUBB A,Rn ;A<-A-Rn-CY

2.减量指令(DEC )

DEC A ;A<A-1

DEC addr8 ;  (addr8)<-(addr8)-1

DEC @Ri ;(Ri)<-(Ri)-1

DEC Rn ; Rn<-Rn-1


三、乘法指令(MUL )

格式:MUL AB

  • 功能A × B,结果的高 8 位存于 B,低 8 位存于 A。
  • 示例MUL AB → 若 A=0x50,B=0x03,则结果为 0x00F0 → A=0xF0,B=0x00。
  • 影响标志位:OV=1(当乘积超过 0xFF 时),CY=0。


 四、除法指令(DIV AB)

格式: DIV AB

  • 功能A ÷ B,商存于 A,余数存于 B。
  • 示例DIV AB → 若 A=0x19(25),B=0x03 → A=0x08(商 8),B=0x01(余 1)。
  • 注意:B 不能为 0,否则 OV=1。

五、十进制调整指令(DA )

格式:DA A

  • 功能:对加法结果进行 BCD 码调整,使 A 的值符合十进制规则。
  • 示例
    MOV A, #0x35  ; A=35(BCD码)
    ADD A, #0x37  ; A=6CH(非BCD码)
    DA A          ; A=72(BCD码,自动修正进位)
    

六、实际应用示例

  1. 多字节加法(16 位)

    MOV A, #LOW(0x1234)  ; A=0x34
    ADD A, #LOW(0x5678)  ; A=0x34+0x78=0xAC(CY=0)
    MOV LOW_RESULT, A
    MOV A, #HIGH(0x1234) ; A=0x12
    ADDC A, #HIGH(0x5678); A=0x12+0x56+CY=0x68
    MOV HIGH_RESULT, A
    
  2. BCD 减法

    CLR C          ; 清除借位
    MOV A, #0x89   ; 89(BCD)
    SUBB A, #0x35  ; 54(BCD)
    DA A           ; 自动修正(若有借位需调整)
    

总结

  • 加法:ADD/ADDC 用于普通加法和多字节运算。
  • 减法:SUBB 需配合 CY 标志处理借位。
  • 乘除:MUL/DIV 直接操作累加器 A 和寄存器 B。
  • 十进制调整:DA A 确保 BCD 码运算正确性。
posted @ 2025-03-23 19:12  RaLi  阅读(0)  评论(0)    收藏  举报  来源