Nop*_*ope 2 assembly gcc inline-assembly
所以我发现GCC可以进行内联汇编,我想知道两件事:
能够内联装配有什么好处?
是否可以使用GCC作为汇编编译器/汇编器来学习汇编?
我发现了一些文章,但它们都是老旧的,2000年和2001年,不太确定它们的相关性.
谢谢
Tom*_*Tom 12
内联汇编的好处是有汇编代码,内联(等待等待,不要杀了我).通过这样做,您不必担心调用约定,并且您可以更好地控制最终目标文件(这意味着您可以决定每个变量的位置 - 哪个寄存器或存储的内存),因为该代码赢了不进行优化(假设您使用volatile关键字).
关于你的第二个问题,是的,这是可能的.您可以做的是编写简单的C程序,然后使用它们将它们转换为汇编程序
gcc -S source.c
Run Code Online (Sandbox Code Playgroud)
有了这个,以及架构手册(MIPS,英特尔等)以及GCC手册,您可以走很长的路.
网上有一些资料.
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/
内联汇编的缺点是通常你的代码不能在不同的编译器之间移植.
希望能帮助到你.
内联汇编对于就地优化以及对任何库或操作系统未公开的CPU功能的访问非常有用.
例如,某些应用程序需要严格跟踪时序.在x86系统上,RDTSC汇编命令可用于读取内部CPU计时器.
使用GCC或任何带内联汇编的C/C++编译器对于小代码片段很有用,但许多环境没有良好的调试支持 - 在开发内联汇编提供特定功能的项目时更为重要.此外,如果使用内联汇编,可移植性将成为一个反复出现的问题.最好在合适的环境(GNU汇编程序,MASM)中创建特定项目,并根据需要导入项目.
内联汇编通常用于访问编译器未公开的硬件功能(例如,未提供内在函数的向量SIMD指令),和/或用于手动优化编译器生成次优代码的性能关键代码段.
当然没有什么可以阻止你使用内联汇编程序来测试用汇编语言编写的例程; 但是,如果您打算编写大部分代码,最好使用真正的汇编程序,以避免因无关紧要而陷入困境.您可能会发现GNU汇编程序与工具链的其余部分一起安装;)