assembly - 将 1 字节参数传递给函数?

标签 assembly x86 stack fasm

我想创建一个接收 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/

相关文章:

assembly - 我应该为 Intel 8086 DOS 程序集使用什么代码框架?

assembly - 我可以在dosbox中运行切换到保护模式的汇编程序吗?

c++ - 向右移动4个整数不同的值SIMD

linux - QT 配置 - QFSFileEngine::currentDirectory 无法统计 (".")

c - 推送函数C语言中堆栈中的段错误

java - 不兼容的类型 : java. lang.Object 无法转换为 T

visual-c++ - 为什么 MSVC 使用 SSE2 指令处理这种琐碎的事情?

c - GCC 编译器执行 asm volatile ("nop"/::) 指令需要多长时间?

assembly - LC3 汇编 - 如何切换二进制数中的最低位?

c - 为什么我无法在 C 中为我的结构创建新节点? (使用 Netbeans)