3
我想創建一個接收1字節參數的函數。但我正在讀的是x86中,我只能將2或4個字節推入堆棧。所以我應該期望一個2字節的參數傳遞給我的函數,然後提取我的1個字節?這是如何將1字節參數傳遞給我的函數:將1個字節的參數傳遞給函數?
push WORD 123
我想創建一個接收1字節參數的函數。但我正在讀的是x86中,我只能將2或4個字節推入堆棧。所以我應該期望一個2字節的參數傳遞給我的函數,然後提取我的1個字節?這是如何將1字節參數傳遞給我的函數:將1個字節的參數傳遞給函數?
push WORD 123
堆棧必須對齊。如果您製作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
將它作爲8位寄存器傳遞,或將16位寄存器推入堆棧(將8位低位或高位作爲所需值) –