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 は tops のメモリ ゾーンから取得することになっています。助けてくれてありがとう

4

2 に答える 2

2

topsat のバイトが 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,03 + 2 + 1 (6) が得られるはずです。これは予想される結果であると思います。

于 2013-11-13T06:13:55.660 に答える