2014-12-30 36 views
3

我想創建一個接收1字節參數的函數。但我正在讀的是x86中,我只能將2或4個字節推入堆棧。所以我應該期望一個2字節的參數傳遞給我的函數,然後提取我的1個字節?這是如何將1字節參數傳遞給我的函數:將1個字節的參數傳遞給函數?

push WORD 123 
+0

將它作爲8位寄存器傳遞,或將16位寄存器推入堆棧(將8位低位或高位作爲所需值) –

回答

2

堆棧必須對齊。如果您製作16位實模式程序,堆棧必須以16位對齊。如果你製作32位保護模式程序,堆棧必須在32位上對齊。

但是,您不需要將正好1個字節傳遞給函數。只需按下16/32位,並在功能中只使用其中最低的8位。例如:

use32 
proc MyFunc, .arg32, .arg16, .arg8 
begin 
     mov eax, [.arg32] 
     mov bx, word [.arg16] 
     mov cl, byte [.arg8] 
     ret 
endp 

Main: 
     push ecx ; CL is arg8 
     push ebx ; BX is arg16 
     push eax ; EAX is arg32 
     call MyFunc 

; Or shortly: 
     stdcall MyFunc, eax, ebx, ecx