0

我在使用 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 将从顶部的内存区域中获取。谢谢您的帮助

4

2 回答 2

2

考虑到如果 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:
于 2013-11-22T22:22:49.527 回答
1

当你进入cycle循环时,两者都A包含B3。所以你最终得到的结果是 3+3+2+1,即 9。

如果你LD A,0在进入循环之前添加一个权利,你应该得到 3+2+1 (6),我认为这是预期的结果。

于 2013-11-13T06:13:55.660 回答