在我的C++/C项目中,我想将堆栈指针设置为基址指针... 直觉告诉我应该使用类似这样的代码:
asm volatile(
"movl %%ebp %%esp"
);
然而,当我执行此操作时,我收到了以下错误消息:
Error: bad register name `%%ebp %%esp'
我使用gcc/g++版本4.9.1编译器。
我不知道是否需要设置特定的g++或gcc标志...应该有一种方法来操作esp
和ebp
寄存器,但我不知道正确的操作方式。
有人知道如何在c++中操作这两个寄存器吗?也许我应该用十六进制OP代码来做?
%%ebp
和%%esp
之间缺少一个逗号。 - JFMRmovl %%ebp, %%esp
。但是,除非你创建了一个“裸函数”,否则不要这样做,因为你的代码将与编译器自动完成的堆栈帧设置冲突。 - Daniel Kamil Kozar