2013-07-23 78 views
0

當我比較$ 0和%eax進行錯誤檢查,並在出現提示時不輸入任何輸入時,不會顯示錯誤消息。但是,當我將$ 1與%eax進行比較並輸入任何輸入時,都會顯示錯誤消息。我知道一個讀系統調用會返回讀入%eax的字節數量,雖然我不確定爲什麼它返回的字節在沒有給出輸入時被讀取,但手冊頁也沒有給我任何指示爲什麼是這種情況。 stdin輸入是否以null結尾或者是其他內容?x86彙編(Linux)stdin讀系統調用時返回1,沒有數據輸入

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

你可以顯示你的代碼? – lurker

+0

修改爲包含代碼 – crhodes

回答

0

你不能用這些參數調用sys_read,並期望沒有輸入。

sys_read正在阻止呼叫。所以,它會阻塞,直到出現一些輸入。在你的情況下,IMO,你按ENTER鍵,在這種情況下,sys_read返回讀取緩衝區中的1個字節 - LF,ascii碼0Ah和eax = 1。

P.S.這不是我的工作,但更好地使用FASM或至少NASM。這樣,您將在ASM編程中獲得更多幫助。氣體的語法非常糟糕。 :)