表 3-3 算术运算指令
| 操作码 | 目标操作数 | 参与运算的操作数 | 说 明 | Cy | AC | OV | P |
| ADD | A | Rn; direct; @Ri; # data | 不带进位加 | Ö | Ö | Ö | Ö |
| ADDC | A | Rn; direct; @Ri; # data | 带进位加 |
| SUBB | A | Rn; direct; @Ri; # data | 带借位减 |
| MUL | AB | (A)*(B) | 积在(B)(A) | 0 | - | Ö | Ö |
| DIV | AB | (A)/(B) | 商 (A) ,余数 (B) |
| DA | A | 只对加法作十进制修正 | Ö | - | - | Ö |
| INC | A; Rn; direct; @Ri; DPTR | 加一 | - | - | - | Ö |
| DEC | A; Rn; direct; @Ri (无DPTR) | 减一 |
*“Ö”表示标志位根据运算结果取值,“-”表示对标志位无影响。
1. 算术运算指令的一般性说明
ê 除加1/减1指令外,一般以累加器Acc为目标,且影响标志位。
ê 没有不带借位减指令。用SUBB作不带借位减运算,Cy应先清零。
ê 乘法若 积 > 255 , 则OV = 1 ; 除法若 除数 = 0 , 则OV = 1 。
ê DA A 指令只对ADD 或ADDC作十进制修正。
ê 无 DEC DPTR指令。
2. 加/减算术运算指令指令应用例
ê 将内部RAM中从30H开始存放的10个双字节无符号整数相加,其和送(R5 R4 R3),低字节在R3。
MOV R0,#30H
MOV R2,#10
MOV R3,#0
MOV R4,#0
MOV R5,#0
LOOP:MOV A,@R0
ADD A, R3
MOV R3,A
INC R0
MOV A,@R0
ADDC A,R4
MOV R4,A
INC R0
MOV A,#0
ADDC A,R5
MOV R5,A
DJNZ R2,LOOP
ê 将内部RAM中从30H开始存放的10个4位十进制正整数(压缩BCD码)相加,其和送(R5 R4 R3),低字节在R3。
ê 比较A与B中的无符号数,大数存B。
MOV R2,A
CLR C ;确保C = 0
SUBB A,B
JC DONE ;若有借位,A<B,转DONE 结束。
MOV B,R2 ;没有借位,A>B,将大数存B。
DONE: ¼¼
3. 乘/除算术运算指令指令应用例
ê 双字节数乘单字节数:双字节数在(R3R4),单字节数在(R2),积送(R3R4R5)
MOV A,R2 ;
MOV B,R4 ;
MUL AB ; (R4)´(R2)
MOV R5,A ;
MOV R4,B ;
MOV A,R2 ;
MOV B,R3 ;
MUL AB ; (R3)´(R2)
ADD A,R4 ;
MOV A,#0 ;
ADDC A,B ;
MOV R3,A ;
转载须保留地址:
http://www.51hei.com/mcu/281.html
ê 单字节二进制数转十进制(BCD)数:二进制数在A,十进制数存入(R2R3)
MOV B,#10
DIV AB ; 除十, 余个位
MOV R3,B ; 个位存R3
MOV B,#10
DIV AB ; 再除十, 余十位
MOV R2,A ; 商为百位,存R2
MOV A,B
SWAP A ;
ADD A,R3 ; 十位与个位合并
MOV R3,A;
这些算术运算指令你应该了解了吧