内联汇编问题

Posted

技术标签:

【中文标题】内联汇编问题【英文标题】:Inline assembler question 【发布时间】:2011-01-19 10:56:40 【问题描述】:

使用内联汇编器,我可以指定一个添加操作 两输入一结果如下:

int a = 5;
int b = 5;
int res;

asm volatile (
" add %1, %2, %0          \n\t"
: "=r" (res)            
: "r" (a), "r" (b)       
: "%g0"                                                   
); 

在 32 位架构上,这会生成一个指令字,看起来像 这个:0x91050101

现在我想知道,而不是明确指定添加的汇编代码, 我想立即指定指令字并将其放入可执行文件中。这里应该是这样的

asm volatile (%x91, %x05, %x01, %x01);

任何人都知道我可以在哪里找到更多信息如何做到这一点以及语法必须如何做到这一点(以上只是一个疯狂的猜测)。

非常感谢!

【问题讨论】:

【参考方案1】:
asm volatile (
" .byte 0x91, 0x5, 0x1, 0x1          \n"
);

应该这样做。

您可以在 http://sourceware.org/binutils/docs/as/ 找到文档

【讨论】:

【参考方案2】:

微软支持 _emit 伪指令

http://msdn.microsoft.com/en-us/library/1b80826t.aspx

我不确定 g++ 支持什么

【讨论】:

以上是关于内联汇编问题的主要内容,如果未能解决你的问题,请参考以下文章

内联汇编语言

GCC 扩展内联汇编简介

优化系列汇编优化技术:x86架构内联汇编及demo

VC++的内联汇编

GCC内联汇编常见陷阱

用于复数乘法的汇编代码/AVX 指令。 (GCC 内联汇编)