0

我已经开始尝试使用 Z80 程序集进行 Gameboy 编程,但我发现了一些奇怪的东西。

我发现了一段用于创建延迟的代码:

simpleDelay:
dec bc
ld  a,b
or  c
jr  nz, simpleDelay
ret

在玩这个的时候,我发现写 dec bc 两次可以缩短延迟,但是写 3 次会使延迟比使用一次或两次更长。为什么有偶数个dec语句会缩短延迟?

编辑:这是调用延迟的代码片段:

ld  hl,Title2
ld  de, _SCRN0+3+(SCRN_VY_B*5) ;
ld  bc, Title2End-Title2
call    mem_CopyVRAM
call simpleDelay
4

1 回答 1

4

循环执行的次数取决于加载到 bc 中的值。您没有指定您使用的值。

如果您加载的值是偶数,dec bc, dec bc,dec bc将导致jr nz,simpleDelay第一次不退出循环,并且值bcto 环绕。这会导致循环执行的次数超出您的预期。

于 2016-08-21T02:27:34.743 回答