エラー チェックのために $0 と %eax を比較し、プロンプトが表示されたときに何も入力しないと、エラー メッセージは表示されません。ただし、$1 と %eax を比較して何も入力しないと、エラー メッセージが表示されます。read syscall が %eax に読み取られたバイト数を返すことは承知していますが、入力が与えられていないときに読み取られたバイトが返される理由についてはわかりません。なぜそうなのか。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 でプログラム フローが続行されます。