gpt4 book ai didi

c++ - 在 C++ 内联汇编中定义一个变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:53 28 4
gpt4 key购买 nike

假设我们有以下 C++ 代码:

int var1;

__asm {
mov var1, 2;
}

现在,我想知道的是,如果我不想在 __asm 指令之外定义 var1,我必须做些什么才能将它放入其中。有可能吗?

谢谢

最佳答案

为此,您需要使用 _declspec(naked) 创建一个“裸”方法,并自行编写通常由编译器创建的序言和结尾。

序言的目的是:

  • 设置 EBP 和 ESP
  • 为局部变量保留堆栈空间
  • 将需要修改的寄存器保存在函数体中

结语必须:

  • 恢复保存的寄存器值
  • 清理局部变量的保留空间

这是一个标准的序言

push        ebp                ; Save ebp
mov ebp, esp ; Set stack frame pointer
sub esp, localbytes ; Allocate space for locals
push <registers> ; Save registers

和一个标准的结语:

pop         <registers>   ; Restore registers
mov esp, ebp ; Restore stack pointer
pop ebp ; Restore ebp
ret ; Return from function

然后您的局部变量将从 (ebp - 4) 开始,向下到 (ebp - 4 - localbytes)。函数参数将从 (ebp + 8) 开始向上移动。

关于c++ - 在 C++ 内联汇编中定义一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396265/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com