1

「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) が出力されます。

誰かがこの動作を説明できますか?

4

1 に答える 1