我在使用 Z80 汇编代码时遇到了一些问题,也许你可以帮帮我。代码如下:
aseg
org 3000h
start: ld A, (tops)
ld B, A
cycle: add A, B
djnz cycle
rst 38h
tops: db 3
end start
该代码应该将前 n 个整数相加,并且数字 n 将从顶部的内存区域中获取。谢谢您的帮助
考虑到如果 at 的字节tops
为 0,循环实际上会运行 256 次,结果会溢出。事实上,结果会溢出任何等于或大于 23 的值。
该计划同时考虑了这两个问题。结果在 16 位 HL 寄存器中。
ld a,(tops)
ld hl,0
ld d,0
or a
jr z,EndSum
ld e,a
Loop: add hl,de
dec e
jr nz,Loop
EndSum:
当你进入cycle
循环时,两者都A
包含B
3。所以你最终得到的结果是 3+3+2+1,即 9。
如果你LD A,0
在进入循环之前添加一个权利,你应该得到 3+2+1 (6),我认为这是预期的结果。