在system_read中断,汇编方面按Enter键时到底发生了什么?

Kor*_*gay 12 linux assembly system-calls

我有这个代码:

section .bss
    buff    resb 1
readfromkeyboard:
    mov     eax,3       ;specify system read
    mov     ebx,0       ;specify standard in -> keyboard
    mov     ecx,buff    ;where to store what is read
    mov     edx,1       ;read 1 byte
    int     0x80        ;tell linux to do everything above

    mov     eax,4       ;sys_write
    mov     ebx,1       ;Standard output
    mov     ecx,buff    ;what to print          
    mov     edx,1       ;how long to print
    int     0x80        ;tell linux to do everything above
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

当我开始该过程时,光标将开始在终端中闪烁,我可以自由输入字符.此时我可以自由输入任意数量的字符,除非我点击"ENTER",将读取1个字节并将其打印在终端中.

我的问题是,当我输入字符并且点击时,内部发生了什么Enter.所以我在键盘上点击'a',然后说'c',此时数据存储在哪里?它们是否已经在我的代码中由'buff'处理的内存空间中?为什么Linux在我点击时会读取Enter

glg*_*lgl 5

输入到应用程序还有很长的路要走:

  • 硬件
  • 驱动层
  • 控制台层
  • 阅读功能

在某处发生了对线的处理,我认为它是在控制台层.在那里,您可以输入在行中处理的数据.

如果一个应用程序出现并读取,它会获得所需数量的字符,其余字符将保留用于下一次读取调用.

如果没有剩余,它将等到下一行完成 - 或者如果用户按下^D,这意味着终止当前read()呼叫.如果之前没有输入数据,则read()返回0,表示EOF.在所有其他情况下,read()返回到目前为止读取的字节数.