0
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
內核源引用:彙編中EAX,1和EBX之間的差異?
系統如何知道它有退出的時候它讀EAX,1而不是EBX,1?由於1意味着Sys_Exit。
操作系統中的'int 0x80'的中斷處理程序需要'eax'中的函數代碼,因此這是您應該放置的地方。不知道你是否對'mov eax,1'實際退出感到困惑,它不會,它只是將'1'加載到'eax'中。在用'int 0x80'調用它之後,內核會檢查'eax'的值。 – Jester
'sys_write'函數需要附加信息,這些信息位於'ebx','ecx'和'edx'中。加載'mov ebx,1'與後面的'mov eax,1'無關,後者指定了'sys_exit'函數。 –
謝謝:)我有點了解它!我是Assembly的新成員。當我繼續時,我想我會更好地理解它。但是你的回答給了我我想要的東西 –