汇编器减去16位数

时间:2016-11-20 12:37:34

标签: assembly intel-8080

当我在i8080处理器的汇编程序中减去两个16位数字时,我遇到了问题。

示例:0f70 - 00f0,第一个数字将在寄存器B和C中,第二个在D和E中。

二进制:

B = 0000 1111 C = 0111 0000

D = 0000 0000 E = 1111 0000

所以当我减去C-E时,它需要“借”。好的,我会减少B但是C呢?我知道在这种情况下C将是1000 0000但其他情况?

代码:

    ORG 800H   
RST 5  
MOV B,D  
MOV C,E   //after this in B and C I have 16bit minuend
RST 5     //after this in D and E I have 16bit subtrahend
MOV A,C     //Move C to Accumulator 
SUB E       //subtract E
JC SUBTRACTINGB //if it don't need borrow jump
DCR B       //else decrement B
MVI C,?    // and what should be in C???

1 个答案:

答案 0 :(得分:1)

不需要更改C。没有借入最低字节,最低字节借用对其自身值没有影响,它只意味着应从下一个字节中减去1个。

您可以使用SBB

自动执行条件递减
; subtract low byte
mov a,c
sub e
mov c,a
; subtract high byte with borrow
mov a,b
sbb d
mov b,a