我正在编写一个简单的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。我一定很遗憾。有没有人有任何想法?
答案 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%肯定,因为我现在也有问题。但是这样我至少可以在大部分时间退出程序。