Linux NASM обнаруживает EOF

Я пытаюсь изучить основы asm на Linux, и я не могу найти очень хорошая ссылка. Документы NASM, кажется, предполагают, что вы уже знаете masm ... Я не нашел примеров в документации cmp (кроме справочника инструкций Intel).

Я написал программу, которая считывает один байт из стандартного ввода и записывает его в стандартный вывод. Ниже приведена моя модификация, чтобы попытаться обнаружить 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); }
6
задан tMC 23 February 2012 в 16:46
поделиться