我想创建一个接收 1 字节参数的函数。但我读到在 x86 中我只能将 2 或 4 个字节压入堆栈。那么我是否应该期望将 2 个字节的参数传递给我的函数,然后提取我的 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
关于assembly - 将 1 字节参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27699948/