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
我有以下部分代码:
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