0

I am writing a simple NASM assembler program. I have about 95% of it figured out. However, I am running into one problem I cannot seem to figure out. Hitting ctrl-d is supposed to display a goodbye message and then terminate the program. Here's a skeleton of what I have

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

According to the ASCII chart, ctrl+d is 0x04. I must be missing something simple. Does anyone have any ideas?

4

2 回答 2

2

您键入的Ctrl-D不会成为输入的一部分。相反,它是向您的终端发送标准输入文件流上的 EOF 条件的信号。您的程序应该响应处于 EOF 状态的标准输入。(例如,在 Posix 上,read(2)系统调用将返回零。)

于 2013-09-26T08:17:20.337 回答
1

您可以尝试“cmp eax, 0”,而不是比较“cmp ecx, 0x04”。因为在 Linux 中点击CTRL+后Dread 系统调用的返回值为 0 字节,而这个“0”将保存在 eax-Register 中。

PS:我不是 100% 确定它是如何工作的,因为我现在也有这个问题。但这样我至少可以在大部分时间退出我的程序。

于 2014-12-28T17:35:03.053 回答