【问题标题】:Assembler wrong code汇编错误代码
【发布时间】:2013-11-13 02:45:55
【问题描述】:

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

【问题讨论】:

    标签: assembly z80


    【解决方案1】:

    考虑到如果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:
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 或者,按照旧标准 z80 cmets 堆:使用 xor a 将 a。它缩短了一个字节,因此速度稍快,这两者对于 z80 系统都很重要。但它也有点迟钝,所以有人反对它。这与设置的问题无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 2014-12-02
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多