在nasm x86中无法输出到stdout两次

时间:2015-08-31 15:30:44

标签: assembly x86 nasm

我正在学习基本的NASM x86程序集,而且在同一个二进制文件中打印到stdout两次时遇到问题。我的代码是:

section .data
    pokelst:                dw  'Bulbasaur',0xa,'Charmander',0xa,'Squirtle',0
    pokelstLen:             equ $-pokelst
    endl:                   db      '\n'
    smiley:                 db  '\u23a',0xa
    smileyLen:              equ $-smiley

section .text
    global _start
    _start:
            mov ebx,1
            mov ecx,smiley
            mov eax,4
            mov edx,smileyLen
            int 80h
            int 80h
            mov eax,1       ;syscall code 1 is exit
            mov ebx,0       ;ebx contains exit code (canonically, 0 means no errors)
            int 80h         ;int 80h=syscall

输出结果为:

\u23a
 ocket8888@ParanoidLinux  ~      

忽略它没有解析单一代码的事实,在我看来,如果我使用int 80h两次,它应该打印两次。但是,很明显不是。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

阅读RETURN部分或write(2) ...

  

成功时,返回写入的字节数(零   表示没有写任何内容)。出错时,返回-1,并且   errno设置得恰当。

此调用完成后,会将值返回EAX。这意味着,当您尝试再次运行中断时,您将运行不同的中断。