section .data
hello: db 'Hello World!/n',10 ;’Hello World!’,加换行符
helloLen: equ $-hello ;’Hello World!’字符串长度
section .text
global _start
_start:
move ax,4 ;4:sys_write系统调用号
mov ebx,1 ;1:标准输出文件描述符
mov ecx,hello ;放hello字符串的首地址
mov edx,helloLen ;hello字符串长度
int 80h ;软中断,陷入内核
move ax,1 ;sys_exit系统调用号
mov ebx,0 ;返回值,0表示没有错误.exit(0)
int 80h ;这里有必要解释下,int 80h实际上是执行一个中断,叫做软中断,int 80h执行之后,中断会返回到原来发生中断的那条指令的下一条指令的地址开始取指,可以阅读我的另一篇关于ARM流水线的文章, 所以,mov ax,1这条指令之后的又需要再次产生一个软中断陷入内核来执行exit操作。即需要再调用一次int 80h,你只需要记住,每执行一个系统调用,都需要跟一条int 80h 来陷入内核执行。
离线