dev*_*ium 6 c c++ assembly inline-assembly visual-c++
假设我们有以下c ++代码:
int var1;
__asm {
mov var1, 2;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想知道的是,如果我不想在__asm指令之外定义var1,我需要做些什么才能把它放在里面.它甚至可能吗?
谢谢
ced*_*rou 13
要做到这一点,你需要用_declspec(裸)创建一个"裸"方法,并自己编写通常由编译器创建的prolog和epilog.
一个序言的目的是:
一个epilog必须:
这是一个标准的序言
push ebp ; Save ebp
mov ebp, esp ; Set stack frame pointer
sub esp, localbytes ; Allocate space for locals
push <registers> ; Save registers
Run Code Online (Sandbox Code Playgroud)
和标准的epilog:
pop <registers> ; Restore registers
mov esp, ebp ; Restore stack pointer
pop ebp ; Restore ebp
ret ; Return from function
Run Code Online (Sandbox Code Playgroud)
然后,您的局部变量将从下开始(ebp - 4)并向下移动(ebp - 4 - localbytes).功能参数将从(ebp + 8)和向上开始.