【问题标题】:Assembler subtract 16bit numbers汇编程序减去 16 位数字
【发布时间】:2017-04-03 21:34:32
【问题描述】:

当我在 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???

【问题讨论】:

  • C 怎么样?您不必修复它或类似的东西,借用只会用于更高的位
  • 您的问题“C 呢?”只对自己有意义。 c呢?天气怎么样? 1. 显示您的代码。 2. 显示输入和输出。 3. 显示预期的输出。
  • 好的,你有我的部分代码与 cmets。问题“C 怎么样”意味着我应该如何处理寄存器 C 中的数字。我应该减去某事,我应该添加某事吗?我知道如何减去二进制数,但这里差别不大。
  • 这里其实并没有什么不同。高字节的存在与低字节的计算无关,借位只会向上传播。

标签: assembly intel-8080


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多