当前位置:文档之家› 022 MCS-51单片机的指令系统(2)

022 MCS-51单片机的指令系统(2)

第三章
MCS-51单片机的指令系统
4.4 算术运算类指令
包括+、-、×、÷、加1、减1、十进制调整指 令,共有24条,一般影响PSW中的CY、AC、 OV、P等标志位。
1.加法指令
ADD A,Rn
;A← A + Rn
ADD A,direct ;A← A +(direct)
ADD A,@Ri
;A← A +(Ri)
2.带进位加指令 ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data ;A← A + Rn + C ;A← A +(direct)+ C ;A← A +(Ri)+ C ;A← A + #data + C
C为来自PSW状态寄存器中的进位位C。带进位加法指令 中的累加器A除了加源操作数外,还需要加上程序状态字 PSW寄存器中的进位标志Cy。设置带进位加法指令的目 的是为了实现多字节加法运算。
指令名称 指令格式 INC A INC Rn 增量指令 机器码 00000100 00001rrr 00000101 direct 0000011i 10100011 功 能 A←A+1 Rn←Rn+1 ( direct)←(direct )+1 (Ri)←(Ri)+1 DPTR←DPTR+ 1 指令周期 1 1
该指令除了影响奇偶标志位P外,不影响其他标志位。 ADD A,#01H ;通过加法指令使累加器A内容加1
该指令同样会使累加器A内容加1,但这条指令将影响Cy、 OV、Ac以及P标志位,且该指令的机器码占用两个字节。
当操作数是某一I/O口,如“ INC P1 ”时,先将P1口锁存器 内容读出,加1后,再写入P1口锁存器中,因此INC Pi(i=0,1,2,3) 属于“读—改—写”指令。
加“6”调正后就是“100H”)。
例4-2-7:假设两位BCD码形式的被减数、减数分别存放在R1和 R2单元中,试编写一程序段求“R1-R2”,结果存放在R3单元中。 参考程序如下:
CLR
MOV
C
A, #9AH
; 清进位标志Cy
; 把BCD码“100”等效表示码送累加器A ; 计算“100-R2”,结果为BCD形式 ; 加被减数 ; 调整
值得注意的是:十进制调整指令一般放在加法指令后, 用于十进制加法调整,不能单独使用“DA A”指令将累加 器A中的内容转化为BCD码。 MCS-51没有提供BCD码减法调整指令,但可以通过 “补码”概念,将BCD码减法运算变成BCD码加法运算。 我们知道两位BCD可以表示00~99,需要用8位二进制存 放;三位BCD可以表示000~999,需要用12位二进制存 放;四位BCD可以表示0000~9999之间的数,需要用16 位二进制存放,因此: xy的“补码” XY-xy=XY+100-xy
BA←A×B
指令周期 4
被乘数放在累加器A(8位无符号数)中,乘数放在寄存 器B(8位无符号数)中,乘积(16位无符号数)的高8位放在寄 存器B中,低8位放在累加器A中。
该指令影响标志位:当结果大于255时,OV为1;反之 为0。进位标志Cy总为0;AC保持不变;奇偶标志P随累加 器A中“1”的个数变化而变化。
减1指令 DEC direct 1
DEC @Ri
1
没有对DPTR减1的指令,如果要完成对DPTR减1的操 作,则需要以下几条指令来完成:
CLR MOV SUBB MOV MOV SUBB MOV
C A,DPL A,#1 DPL,A A,DPH A,#00H DPH,A
6. 乘法指令
表4-2-3 MCS-51乘法指令 指令名称 A×B 指令格式 MUL AB 机器码 10100100 功能
(21H) (20H)
× (30H) (41H) (40H) + B A . (42H) (41H) (40H)
8. 十进制调整指令
表4-2-5 MCS-51十进制调整指令
指令名称 指令格式 机器码 功能
根据进位标志 Cy、辅助进位 标志Ac以及累 加器A中结果, 将累加器A内容 转化为BCD码形 式
ADD A,#data ;A← A + #data
例4-2-1:设A=D3H,(30H)=E8H 执行: ADD A,30H 无符号数 211
1101 0011 (D3) (-45)补
+) 1110 1000 (E8) (-24)补
= 1 1011 1011 (-69) 补
232
443
结果:Cy=1,AC=0,P=0,OV=0,A=BBH
DA
A
(低4位>9,加6 调整)
ADD
A,R1
0001 1000 + 0001 1001 0011 0001
(18)BCD (19)BCD (31)H
DA
A
(AC=1,加6 调整)
0011 0001 + 0000 0110 0011 0111
(31)H (06) (37)BCD
(2)同样,若累加器高4位大于9或者进位位标志Cy=1 (包括由于低4位调整后导致上述结果),则高4位加6调 整,即A ←A+60H。 例如:若作加法后A=9BH,Cy=0,AC=0,则执行 DA A 指令后,A的低4位作加6调整,调整后高4位为 1010,大于9,所以也需要调整: 1001 1011 + 0000 0110 1010 0001 + 0110 0000 1 0000 0001 低4位调整 高4位调整 (101)BCD
INC direct
INC @Ri INC DPTR
1
1 2
加1指令 不影响标志位 ,只有操作对象为累加器A时,才 影响奇偶标志位P。
当操作数初值为0FFH,则加1后,将变为00H。
尽管加1指令与加数为1的加法指令同样会使操作数增1,但 彼此并不完全相同,例如:
INC A ;通过增量指令使累加器A内容加1
在计算机中,通常把两位十进制数用一字节BCD码 来表示,这也叫做压缩BCD码。 如: (0101 1001)BCD = (59)D
十进制调整指令的原理(过程): (1)若累加器低4位大于9或者辅助进位位标志AC=1,则 低4位加6调整,即A ←A+06H。 ADD A,R1 0001 0111 + 0001 0101 0010 1100 0010 1100 + 0000 0110 0011 0010 (17)BCD (15)BCD (2C)H (2C)H (06) (32)BCD
40H, A
41H, A A,42H A,#00H
MOV
SJMP
42H, A

3.带借位减指令 SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data ;A← A - Rn - C ;A← A -(direct)- C ;A← A -(Ri)- C ;A← A - #data – C
7. 除法指令
表4-2-4 MCS-51除法指令
指令名称
A÷B
指令格式
DIV AB
机器码
10000100
功能
A(商)←A÷B B(余数)←A÷B
指பைடு நூலகம்周期
4
被除数放在累加器A(8位无符号数)中,除数放在寄存 器B(8位无符号数)中,商(8位无符号数)放在累加器A中, 余数(8位无符号数)放在寄存器B中。
方法一、部分积右移算法(略) 方法二、 7 × + 2 3 5 4 0
.
2 8 0
0
分析:将16位被乘数分为高8位和低8位,首先由低8位与8 位乘数相乘,积的低8位存入40H,高8位暂存于41H。再 用被乘数的高8位与乘数相乘,所得积的低8位与41H中暂 存的内容相加,高8位与Cy位相加存入42H作为积的高8位。 如下所示:
例4-2-5:试编制4位十六进制数减法程序:
(21H20H)-(31H30H)→ 41H40H
分析:先低字节作不带进位相减,再作带进位高字节减法。 流程图如下: main
(20H)-(30H) →(40H) (不带借位位)
(21H)-(31H) →(41H) (带借位位) 动态暂停
4.加1指令
表4-2-1 MCS-51加1指令
100的BCD需要用三位二进制存放,其中的1自然丢失。 当XY≥xy时,“XY+100-xy”就是XY-xy;当XY<xy时, “XY+100-xy”是“XY-xy”的补码。 为了能用减法指令求出“100-xy”的BCD码,可用 “9AH”表示“100-xy”算式中十进制数“100”(因为“9AH”
该指令影响标志位:如果除数(即寄存器B)不为0,执 行该指令后,溢出标志OV、进位标志Cy总为0;如果除 数为0,执行后,结果将不确定,且OV为1,Cy仍为0。 AC保持不变;奇偶标志P位随累加器A中“1”的个数变 化而变化。
例4-2-6:试编制乘法程序,完成如下计算:
(21H20H)×(30H)→ (42H41H40H)
例如,设A=39H,R0=20H,(20H)=32H,Cy=1,执行 指令 SUBB A,@R0后,A=06H。
例4-2-4:设(A)=49H,CY=1, 执行: SUBB A, #54H 0100 1001 (49H) 0101 0100 (54H) -) 1 1111 0100 (借位1) 结果:Cy=1,AC=0,P=1,OV=0,A=F4H(真值-12, 正确)
例4-2-3:试编制4位十六进制数加法程序,假定和数超过 双字节(21H20H)+(31H30H)→ 42H41H40H 分析:先低字节作不带进位求和,再作带进位高字节求和。 流程图(略),程序如下: MAIN: MOV ADD MOV MOV ADDC MOV MOV ADDC A, A, A, A, 20H 30H 21H 31H ;带低字节进位加法 ;准备处理最高位
相关主题