-1

下面是我希望我的 NASM 程序中的相关代码。一旦调用了 int 080h,调试器就会显示 eax 的 -9。我的 test.txt 中的文本是 321314145。我已经盯着这个看了好几个小时了,我在这里遇到了死胡同。为什么会这样?

%define BUFLEN 128
%define READLEN 3
%define SYSCALL_READ  3

    SECTION .bss                    ; uninitialized data section
buf:    resb READLEN                     ; buffer for read
rlen:   resb 4
newstr: resb BUFLEN

; read file name from arg

    ;
    pop     ebx         ;not using

    pop     ebx         ;not using

    pop     ebx         ;pop filename

; open file
;
    mov     eax, SYSCALL_OPEN
    mov     ecx, STDIN
    int     080h

    mov     eax, SYSCALL_READ ; read function
    mov     ebx, eax      ; Arg: file descriptor
    mov     ecx, buf      ; Arg: address of buffer
    mov     edx, READLEN      ; Arg: buffer length
    int     080h
4

1 回答 1

0
mov     eax, SYSCALL_READ ; read function
mov     ebx, eax      ; Arg: file descriptor

你开玩笑的对吧?

-9是“错误的文件号”(每个 errno.h)。确保您的 sys_open 成功,然后放入eax....ebx更改之前eax

于 2013-02-25T23:06:54.387 回答