z80 程序集嵌套循环

z80 Assembly nested loops

我需要在 z80 硬件上用 Assembly 编写三个嵌套循环。 第一个循环(最内部的循环)应该迭代 70 次,另外两个循环 100 次。

这是我想出的代码,但似乎不能正常工作;它迭代直到产生中断(我认为是堆栈溢出错误)。

loop1:
ld a, 46h
   loop2:
   ld b, 64h
      loop3:
      ld c, 64h
      dec c
      jnz c, (loop3)
   dec b
   jnz b, (loop2)
dec a
jnz a, (loop1)
halt

C++ 中的类似代码是

for(int b = 100; c>0; c--)
   for(int c = 100; b>0; b--)
      for(int a = 70; a>0; a--)
       ...

这是初始化循环的方式:

ld a, 46
loop1:
   ld b, 64
   loop2:
      ld c, 64
      loop3:
      dec c
      jnz c, loop3
   dec b
   jnz b, loop2
dec a
jnz a, loop1
halt

考虑使用 djnz 命令进行循环:

   ld b,46
loop1:
   push bc
   ld b,64
loop2:
   push bc
   ...
   pop bc
   djnz loop2
   pop bc
   djnz loop1