Z80 组件将值存储在寄存器中更长时间

Z80 assembly storing a value in a register for longer time

我有以下部分代码:

        ld a, 2
INIT:   ld ix, AFIS
        ld c, a
        cp 2
        jp z INIT2
        call SCAN
INIT2:  ld ix, AFIS2
        call SCAN
INIT3: ld ix, AFIS3
       ld c, a
       cp 2
       jp z INIT4

问题出在来自 INIT3 的代码 ld c, a 上。这就像寄存器 "a" 已被重置并且 cp 2 将被设置为 false。我如何才能将值存储在寄存器中更长时间?

程序 SCAN 可以随心所欲地改变任何东西

如果您无法控制 SCAN,并且 SCAN 没有记录其更改的寄存器列表,那么您将需要确保对您重要的寄存器的安全。

使用堆栈:

        ld a,2
INIT:   
        ld ix,AFIS
        ld c,a
        cp 2
        push af     ; store value of register pair af on stack
        jp z,INIT2

        call SCAN

INIT2:  ld ix,AFIS2
        call SCAN

INIT3:  ld ix,AFIS3
        pop af      ; get value of register pair af from stack - f = flags 
                    ; since comparison was identical, no need to recompare
        jp z,INIT4

使用内存位置作为变量存储:

        ld a,2
INIT:   
        ld (var),a    ; store it
        ld ix,AFIS        
        ld c,a
        cp 2
        jp z,INIT2

        call SCAN

INIT2:  ld ix,AFIS2        
        call SCAN

INIT3:  ld ix,AFIS3

        ld a,(var)    ; get it assuming scan does not need it
        ld c,a
        cp 2
        jp z,INIT4

...

var:    defb 0