0

私は単純な NASM アセンブラ プログラムを書いています。私はそれの約95%を理解しました。しかし、私は理解できないように見える1つの問題に遭遇しています。ヒットctrl-dさようならのメッセージを表示し、プログラムを終了することになっています。これが私が持っているもののスケルトンです

Section .bss
    Buff resb2
    BuffLen equ $-Buff

loop:
    ; some code
    mov ecx, Buff
    move edx, BuffLen
    ; some code
    cmp ecx, 0x04
    je Exit
    jne loop

ASCII チャートによると、ctrl+dは 0x04 です。私は単純なものが欠けているに違いありません。誰にもアイデアはありますか?

4

2 に答える 2

2

入力したCtrl-Dは入力の一部にはなりません。むしろ、標準入力ファイル ストリームで EOF 条件を送信するように端末に指示する信号です。プログラムは、EOF 状態にある標準入力に応答する必要があります。(たとえば、Posix では、read(2)システム コールはゼロを返します。)

于 2013-09-26T08:17:20.337 に答える
1

「cmp ecx, 0x04」を比較する代わりに、「cmp eax, 0」を試すことができます。CTRL+を押した後D、Linux の read システム コールの戻り値は 0 バイトになり、この「0」が eax-Register に保存されるためです。

PS: 現時点で私も問題を抱えているため、それがどのように機能するかについては 100% 確信が持てません。しかし、この方法で、少なくともほとんどの場合、プログラムを終了できます。

于 2014-12-28T17:35:03.053 に答える