【发布时间】:2021-03-28 11:45:35
【问题描述】:
我的任务是根据 AT&T 语法将某个代码从 C++ 转换为 ASM,所以我从简单的示例开始,遇到了第一个问题。
我开始练习的代码
void func() {
int num = 1;
std::cout << "before: " << num << std::endl;
num = num << 3;
std::cout << "after: " << num << std::endl;
}
给出一个结果:
before: 1
after: 8
我的翻译 变量 num 是第一个局部变量,所以它应该在地址 -4(%ebp)
void func() {
int num = 1;
std::cout << "before: " << num << std::endl;
asm (
"mov -4(%ebp), %eax \n"
"sall $3, %eax \n"
"mov %eax, -4(%ebp) \n"
);
std::cout << "after: " << num << std::endl;
}
给出一个结果:
before: 1
after: 1
为什么这段代码对 num var 没有影响?
【问题讨论】:
-
我已回滚您的编辑。您不应将第二个问题编辑为现有问题,尤其是在第一个问题已经有(正确)答案的情况下。如果您有新问题,请打开一个新问题。
标签: c++ assembly gcc inline-assembly