NASM没有读ctrl-d字符

问题描述 投票:0回答:2

我正在编写一个简单的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。我一定很遗憾。有没有人有任何想法?

assembly nasm
2个回答
2
投票

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.