Z80的BCD减法程序

BCD subtraction program for the Z80

本程序摘自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

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

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