2016-01-20 160 views
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。

+3

操作系統中的'int 0x80'的中斷處理程序需要'eax'中的函數代碼,因此這是您應該放置的地方。不知道你是否對'mov eax,1'實際退出感到困惑,它不會,它只是將'1'加載到'eax'中。在用'int 0x80'調用它之後,內核會檢查'eax'的值。 – Jester

+0

'sys_write'函數需要附加信息,這些信息位於'ebx','ecx'和'edx'中。加載'mov ebx,1'與後面的'mov eax,1'無關,後者指定了'sys_exit'函數。 –

+0

謝謝:)我有點了解它!我是Assembly的新成員。當我繼續時,我想我會更好地理解它。但是你的回答給了我我想要的東西 –

回答

相關問題