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
我需要在 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