当我将$ 0与%eax进行比较以进行错误检查时,并在出现提示时输入no input,则不会显示错误消息。但是,当我将$ 1与%eax进行比较并输入无输入时,将显示错误消息。我知道read syscall返回读入%eax的字节数,虽然我不确定为什么它在没有给出输入时返回一个字节被读取,man手册页也没有给我任何指示为什么会这样。 stdin输入是否以null结尾或者是其他什么?
movl $3, %eax
movl $0, %ebx
movl $BUFFER, %ecx
movl $BUFFER_SIZE, %edx
int $0x80
cmpl $0, %eax
jle input_error
如果cmpl $ 0更改为cmpl $ 1,并且没有给出输入,则跳转到input_error,当没有给出输入时,cmpl $ 0程序流程继续进行。
答案 0 :(得分:0)
您不能使用这些参数调用sys_read,并且期望没有输入。
sys_read正在阻止呼叫。因此,它会阻塞,直到出现一些输入。在您的情况下,IMO,您按ENTER键,在这种情况下,sys_read返回缓冲区中的1字节读取 - LF,ascii代码0Ah和eax = 1.
P.S。这不是我的工作,但更好地使用FASM或至少使用NASM。这样,您将在ASM编程中获得更多帮助。 GAS的语法非常糟糕。 :)