「x86アセンブリの芸術」という本からアセンブリ言語を勉強していますが、答えがわからない質問があります。
プログラムは次のようになります。
この演習では、メモリ内の値を調べて操作するプログラムの実行を開始します。次に、メモリ画面に切り替えて、メモリ内の値を変更します (つまり、プログラムの実行中にメモリに直接アクセスします)。
プログラムはメモリ位置 1000h を 0 に設定することから始まり、2 つの条件のいずれかが満たされるまでループします - ユーザーが FFF0 スイッチをトグルするか、ユーザーがメモリ位置 1000h の値を変更します。FFF0 スイッチを切り替えると、プログラムが終了します。
メモリ位置 1000h の値を変更すると、n ワードを加算するプログラムのセクションに制御が移ります。ここで、n はメモリ位置 1000h の新しい値です。」
これらの値を合計した後、「put」を使用して合計を出力します
私はこのコードを持っています:
d: mov cx,0
mov [1000],cx
a: mov cx,[1000]
cmp cx,0
jne c
mov ax,[fff0]
cmp ax,0
je a
halt
c: mov bx,1002
mov ax,0
b: add ax,[bx]
add bx,2
sub cx,1
cmp cx,0
jne b
put
jmp d
問題は、値 12h を 1000h に置くと、プログラムが 2 つの値、合計、および数値 1 を出力することです。
プログラムをステップ実行すると、1 つの値 (合計) が出力されますが、実行すると 2 つの値 (合計と数値 1) が出力されます。
誰かがこの動作を説明できますか?