0

当我将 $0 与 %eax 进行错误检查比较,并在提示时不输入任何内容时,不会显示错误消息。但是,当我将 $1 与 %eax 进行比较并且不输入任何输入时,将显示错误消息。我知道 read 系统调用返回读入 %eax 的字节数,尽管我不确定为什么在没有输入时它返回一个字节被读取,手册页也没有给我任何指示为什么会这样。标准输入输入是空终止还是其他?

 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 程序流程继续。

4

1 回答 1

0

您不能使用这些参数调用 sys_read 并期望没有输入。

sys_read 正在阻塞调用。因此,它将阻塞,直到出现一些输入。在您的情况下,IMO,您按 ENTER,在这种情况下,sys_read 返回缓冲区中读取的 1 个字节 - LF,ascii 代码 0Ah 和 eax=1。

PS 这不是我的工作,但最好使用 FASM 或至少 NASM。这样,您将在 ASM 编程中获得更多帮助。GAS 的语法非常糟糕。:)

于 2013-07-23T15:47:14.323 回答