0

该程序取自Programming the Z80一书,该程序旨在进行 x 字节 BCD 减法,x 可以是任何整数,这是通过计算两个操作数的字节并通过循环依次执行减法指令,但是在这里,我们将假设这两个数字具有相同的字节数,我们将其称为COUNT. 这些号码的地址是N1N2以及后面的地址。我的问题在代码的注释中。

BCDPAK  LD B, COUNT
        LD DE, N2
        LD HL, N1
        AND A   ;Clear carry
MINUS   LD A, (DE)
        SBC A, (HL) 
        DAA ;Decimal adjust the result
        LD (HL), A  ;Store the result in HL
        INC DE 
        INC HL ;Doesn't that overwrite the result?
        DJNZ MINUS ;Decrement B, loop until B = 0
4

1 回答 1

0

结果存放在 HL 所指向的地址,然后 HL(即指针)递增指向减数和结果的下一个字节。

请注意,结果会覆盖减数而不是被减数,大多数汇编指令通常会发生这种情况。例如SBC A, (HL),将从 A 中减去 (HL) 并将结果保留在 A。但是,此例程将从 DE 指向的数字中减去 HL 指向的数字,并将结果保留在 HL 最初指向的内存位置而不是 DE

于 2016-08-28T20:52:48.083 回答