表 3-3 算术运算指令操作码目标操作数参与运算的操作数说 明CyACOVPADDARn; direct; @Ri; # data不带进位加ÖÖÖÖADDCARn; direct; @Ri; # data带进位加SUBBARn; direct; @Ri; # data带借位减MULAB(A)*(B)积在(B)(A)0-ÖÖDIVAB(A)/(B)商 (A) ,余数 (B)DAA只对加法作十进制修正Ö--ÖINCA; Rn; direct; @Ri; DPTR加一---ÖDECA; 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,#30HMOV R2,#10MOV R3,#0MOV R4,#0MOV R5,#0LOOP:MOV A,@R0ADD A, R3MOV R3,AINC R0MOV A,@R0ADDC A,R4MOV R4,AINC R0MOV A,#0ADDC A,R5MOV R5,ADJNZ R2,LOOP
ê 将内部RAM中从30H开始存放的10个4位十进制正整数(压缩BCD码)相加,其和送(R5 R4 R3),低字节在R3。ê 比较A与B中的无符号数,大数存B。MOV R2,ACLR C ;确保C
= 0SUBB A,BJC 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
;ê 单字节二进制数转十进制(BCD)数:二进制数在A,十进制数存入(R2R3)
MOV B,#10DIV AB ; 除十, 余个位MOV R3,B ; 个位存R3MOV B,#10DIV AB ; 再除十, 余十位MOV R2,A ; 商为百位,存R2MOV A,BSWAP A ; ADD A,R3 ; 十位与个位合并MOV R3,A;
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。