如何使用 Intel 语法内联汇编在 GCC 中设置变量?
为什么这段代码不将 temp
设置为 1?我实际上该如何做到这一点?
int temp;
__asm__(
".intel_syntax;"
"mov %0, eax;"
"mov eax, %1;"
".att_syntax;"
: : "r"(1), "r"(temp) : "eax");
printf("%d\n", temp);
Why doesn't this code set temp
to 1? How do I actually do that?
int temp;
__asm__(
".intel_syntax;"
"mov %0, eax;"
"mov eax, %1;"
".att_syntax;"
: : "r"(1), "r"(temp) : "eax");
printf("%d\n", temp);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您希望 temp 成为输出,而不是输入。尝试:
You want
temp
to be an output, not an input, I think. Try:这段代码实现了您想要实现的目标。我希望这对您有帮助:
This code does what you are trying to achieve. I hope this helps you:
您必须将参数传递给 GCC 汇编器。
你有这样的 C 代码:
不要忘记为 asm() 关键字中的每个变量添加前缀下划线 (_),否则它不会识别它。
关键字 asm() 对每个十六进制整数使用前缀“0x”,而不是后缀“h”。
You have to pass an argument to GCC assembler.
And you have C code like this:
Don't forget to add prefix underscore (_) for every variables in asm() keyword, or it won't recognize it.
And keyword asm() use prefix '0x' for every hexadecimal integer, not suffix 'h'.