我想學習Linux上的基本asm,我找不到很好的參考。 NASM文檔似乎假設您已經知道masm ...我沒有在cmp
(英特爾指令參考之外)的文檔中找到示例。Linux NASM檢測EOF
我寫了一個程序,它從標準輸入讀取一個字節並將其寫入標準輸出。下面是我嘗試在stdin上檢測EOF並在EOF達到時退出的修改。問題是它永遠不會退出。我只是一直打印從標準輸入讀取的最後一個字符。問題是在我的EOF檢測(cmp ecx, EOF
)和/或我跳轉到_exit
標籤(je _exit
)我想。
我在做什麼錯?
%define EOF -1
section .bss
char: resb 1
section .text
global _start
_exit:
mov eax, 1 ; exit
mov ebx, 0 ; exit status
int 80h
_start:
mov eax, 3 ; sys_read
mov ebx, 0 ; stdin
mov ecx, char ; buffer
cmp ecx, EOF ; EOF?
je _exit
mov edx, 1 ; read byte count
int 80h
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
mov ecx, char ; buffer
mov edx, 1 ; write byte count
int 80h
jmp _start
對於理智的緣故,我驗證EOF是-1,這個C:
#include <stdio.h>
int main() { printf("%d\n", EOF); }
我對NASM並不熟悉,但'char'是指向單個字符的指針嗎?看起來你可能會比較字符的指針地址和EOF值。如果是這種情況,則需要取消引用指針然後進行比較。 'read'和'write'系統調用將指針指向緩衝區作爲參數,而不是單個字符。另外,我會將'char'重命名爲非基本C類名稱。 – 2012-02-23 16:53:25