我正在学习基本的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
两次,它应该打印两次。但是,很明显不是。
我做错了什么?
答案 0 :(得分:4)
阅读RETURN
部分或write(2)
...
成功时,返回写入的字节数(零 表示没有写任何内容)。出错时,返回-1,并且 errno设置得恰当。
此调用完成后,会将值返回EAX
。这意味着,当您尝试再次运行中断时,您将运行不同的中断。