使用 dec 创建延迟的问题
Issue With Using dec to Create a Delay
我已经开始尝试使用 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
循环执行的次数取决于加载到 bc 中的值。您没有指定您使用的值。
如果你加载的值是偶数,dec bc
、dec bc
、dec bc
会导致jr nz
、simpleDelay
不退出循环第一次和 bc
的值环绕。这会导致循环执行的次数超出您的预期。
我已经开始尝试使用 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
循环执行的次数取决于加载到 bc 中的值。您没有指定您使用的值。
如果你加载的值是偶数,dec bc
、dec bc
、dec bc
会导致jr nz
、simpleDelay
不退出循环第一次和 bc
的值环绕。这会导致循环执行的次数超出您的预期。