1
彙編語言是相當簡單,但我關於如何使用寄存器例如困惑:是否有使用匯編語言規則登記
section .data
msg db "Hello, world!",0xa
len equ $ - msg
section .text
global _start
_start:
;write our string to stdout
mov edx,len
mov ecx,msg
mov eax,4
int 0x80
;and exit
mov ebx,0
mov eax,1
int 0x80
其工作正常,但是當我的代碼更改爲:
section .data
msg db "Hello, world!",0xa
len equ $ - msg
section .text
global _start
_start:
;write our string to stdout
mov ebx,len
mov edx,msg
mov eax,4
int 0x80
;and exit
mov ebx,0
mov eax,1
int 0x80
它會編譯但它不會顯示'Hello, World'
。我所做的只是更改了len
和msg
的註冊表。有什麼寄存器必須包含一個約定嗎?
所以寄存器的設置必須以EAX,EBX,ECX,EDX,ESI ,edi,ebp。如果我使用ebp來保存系統調用的數量,那麼註冊的順序是ebp,edi,esi,edx,ecx,ebx,eax是否有意義? – 2012-03-03 06:18:53
@the_transltr:'eax'用於保存系統調用號碼,'ebx'用於第一個參數,'ecx'用於第二個參數,'edx'用於第三個參數,等等。這就是系統調用期望的參數通過。沒有「訂單」,就是這樣。 – AusCBloke 2012-03-03 07:35:42
鏈接已死亡。 – 2015-01-11 09:41:16