算术运算指令 点击:173 | 回复:0



xilinxue

    
发表于:2010-01-23 13:11:56
楼主
表 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 ;


ê 单字节二进制数转十进制(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;


楼主最近还看过

SSI ļʱ