NASM没有读ctrl-d字符

时间:2013-09-26 03:03:23

标签: assembly nasm

我正在编写一个简单的NASM汇编程序。我有大约95%的想法。但是,我遇到了一个我似乎无法弄清楚的问题。点击 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。我一定很遗憾。有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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