繁体   English   中英

C ++设置堆栈指针

[英]C++ set stack pointer

在我的C ++ / C项目中,我想将堆栈指针设置为等于基指针 ...直观地,我会使用这样的东西:

asm volatile(
    "movl %%ebp %%esp"
);

但是,当我执行此操作时,我收到此错误消息:

Error: bad register name `%%ebp %%esp'

我使用gcc / g ++版本4.9.1编译器。

我不知道我是否需要设置特定的g ++或gcc标志...应该有一种方法来操作espebp寄存器,但我只是不知道正确的方法来做到这一点。

有谁知道如何在c ++中操纵这两个寄存器? 也许我应该使用hexed OP代码?

您正在使用GNU C Basic Asm语法 (没有输入/输出/ clobber约束),因此%并不特殊,因此不应对其进行转义。

只有在扩展的Asm (有约束)中, %需要被转义,最终在编译器的asm输出中的硬编码寄存器名称前面有一个%根据AT&T语法的要求 )。

您还必须使用逗号分隔操作数:

asm volatile(
    "movl %ebp, %esp"
);

没有输出操作数的asm语句是隐式易失性的,但写一个显式的volatile也没什么坏处。

但请注意,将此语句放在函数中可能会干扰编译器处理堆栈帧的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM