2、带进位加法指令(4条) ADDC A #data8 AtA+#data 8 +CY ADDC A, addr& ;A+A+(addr8)+CY ADDC A, @Ri ;A+A+(Ri)+CY ADDC A Rn A←A+Rn+CY 除了相加时把进位位也加上外,其他与一般加法指 令完全相同。 10101010 ◇例,设累加器A内容为0AAH, 01010101 R0内容为55H,C内容为1, l1111111 ◇执行指令 ADDC A RO 100000000 运行结果:A=000003,AC=1,CY=1,OV=0 204237 3:01:41
3:01:41 执行指令: ADDC A, R0 运行结果: A=0000 0000B, AC=1,CY=1,OV=0 2、带进位加法指令 (4条) ADDC A, #data8 ;A←A+#data 8 +CY ADDC A, addr8 ;A←A+(addr8) +CY ADDC A, @Ri ;A←A+(Ri) +CY ADDC A, Rn ;A←A+Rn +CY 除了相加时把进位位也加上外,其他与一般加法指 令完全相同。 9 20:42:37 例, 设累加器A内容为0AAH, R0内容为55H, C内容为1, 1010 1010 + 0101 0101 1111 1111 + 1 10000 0000
2、带进位加法指令(4条)低字节高字背( 【例4-4】设双字节加法中,被加数放20H、2IH单元,加 数放30H、31H单元,和存放在40H、41H单元,若高字 节相加有进位则转OVER处执行。试编程实现之。 解:程序代码如下: (21H)(20H) ADDM:MOVA,20H;取低字节被加数+(31H③30H ADDA,30H;低位字节相加41H)(40H MOV40H,A;结果送40H单元 MOVA,2IH;取高字节被加数 ADDC A,3H;加高字节和低位来的进位 MOV41H,A;结果送41H单元 JC OVER;若有进位,则转OⅤER处执行 OVER
3:01:41 2、带进位加法指令(4条) 【例4-4】设双字节加法中,被加数放20H、21H单元,加 数放30H、31H单元,和存放在40H、41H单元,若高字 节相加有进位则转OVER处执行。试编程实现之。 解:程序代码如下: 10 20:42:37 ADDM: MOV A, 20H ;取低字节被加数 ADD A, 30H ;低位字节相加 MOV 40H, A ;结果送40H单元 MOV A, 21H ;取高字节被加数 ADDC A, 31H ;加高字节和低位来的进位 MOV 41H, A ;结果送41H单元 JC OVER ;若有进位,则转OVER处执行 …… OVER: …… 低字节 高字节 (21H) (20H) +(31H) (30H) (41H) (40H)
3、带借位减指令(4条) sUBB A+data8 AtA-#data8-CY SUBB A, addr At-A-(addr8)-CY 00000011 SUBB A, Ri ;A<A-(ri-CY -10000000 SUBB A,Rn;A←-A-Rn-CY 10000011 在加法中,CY=1表示有进位,CY=0表示无进位; 在减法中,CY=1则表示有借位,CY=0表示无借位。 ◇OV=1表示带符号数相减时,从一个正数中减去一个负 数得出了一个负数(如3H80H或从一个负数中减去一 个正数时得出一个正数的错误情况(如80H-2H)。 ◇和加法类似,该标志也是由运算时,差的第6、7位两者借 位状态经异或操作而得。结果超出了符号数的表示范围 ◇因减法只有带借位减一条指令,所以在首次进行单字节 相减时,须先清借位位CY,以免相减后结果出错。 204237 3:01:41
3:01:41 3、带借位减指令(4条) 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 在加法中,CY=1表示有进位,CY=0表示无进位; 在减法中,CY=1则表示有借位,CY=0表示无借位。 11 20:42:37 OV=1表示带符号数相减时, 从一个正数中减去一个负 数得出了一个负数(如3H-80H)或从一个负数中减去一 个正数时得出一个正数的错误情况(如80H-2H) 。 和加法类似, 该标志也是由运算时,差的第6、7位两者借 位状态经异或操作而得。 因减法只有带借位减一条指令, 所以在首次进行单字节 相减时, 须先清借位位CY, 以免相减后结果出错。 结果超出了符号数的表示范围 0000 0011 - 1000 0000 1000 0011
3、带借位减指令(4条) ◇例如,设累加器A的内容为D9H,R0的内容为87H, 求两者相减结果。 若是带符号数 DH11011001 27H CLR C 87H-10000111 79H SUBB A RO 01010010 52H 执行结果:A=52H,CY=0,OV=0 若运算两数为无符号数,则其溢出与否和OⅤ状态无 关,而靠CY是否为1予以判别,OV仅表明带符号数运 算时是否溢出。 204237 3:01:41
3:01:41 3、带借位减指令(4条) 例如,设累加器A的内容为D9H,R0的内容为87H, 求两者相减结果。 CLR C SUBB A, R0 执行结果:A=52H,CY=0,OV=0 若运算两数为无符号数,则其溢出与否和OV状态无 关,而靠CY是否为1予以判别,OV仅表明带符号数运 算时是否溢出。 12 20:42:37 1101 1001 – 1000 0111 0101 0010 若是带符号数 -27H -79H 52H D9H - 87H
3、带借位减指令条)低字节高字节 【例45】两字节数相减,设被减数放在20H、21H单元, 减数放在30H、31H单元,差放在40H、41H单元。若 高字节相减有借位则转OVER处执行,试编程实现之。 解:程序代码如下 SUBM:CLRC;低字节减之前借位CY清0 MOVA,20H;被减数送A (21H)(20H) SUBB A,30H;低位字节相减 31(30H) MOV40H,A;结果送40单元(41H)(40H MOVA,21H;被减数高字节送A SUBB A,3IH;高字节相减 MOV41H,A;结果送41H单元 JC OVER;若有借位,则转OER处执行 OVER: 。00●0 204237 3:01:41
3:01:41 3、带借位减指令(4条) 【例4-5】 两字节数相减, 设被减数放在20H、21H单元, 减数放在30H、31H单元, 差放在40H、41H单元。若 高字节相减有借位则转OVER处执行, 试编程实现之。 解:程序代码如下: 13 20:42:37 SUBM: CLR C ;低字节减之前借位CY清0 MOV A, 20H ;被减数送A SUBB A, 30H ;低位字节相减 MOV 40H, A ;结果送40H单元 MOV A, 21H ;被减数高字节送A SUBB A, 31H ;高字节相减 MOV 41H, A ;结果送41H单元 JC OVER ;若有借位, 则转OVER处执行 …… OVER: …… 低字节 高字节 (21H) (20H) - (31H) (30H) (41H) (40H)