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 のメモリ ゾーンから取得することになっています。助けてくれてありがとう
tops
at のバイトが 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) が得られるはずです。これは予想される結果であると思います。