gcc内联汇编基础.doc

gcc内联汇编基础.doc

ID:51888778

大小:83.00 KB

页数:13页

时间:2020-03-18

gcc内联汇编基础.doc_第1页
gcc内联汇编基础.doc_第2页
gcc内联汇编基础.doc_第3页
gcc内联汇编基础.doc_第4页
gcc内联汇编基础.doc_第5页
资源描述:

《gcc内联汇编基础.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、GCC内联汇编基础來源:中国自学编程网发布日期:2008-09-08这篇文章阐述内联汇编的使用方法。显然,阅读这篇文章您需要具备X86汇编语言和C语言的基础知识。Contents1.简介32.概要33.GCC汇编格式。31)源操作数和目的操作数的方向32)寄存器命名43)立即数44)操作数大小45)内存操作数44.基本形式的内联汇编45.扩展形式的内联汇编55.1汇编模板65.2操作数65.3ClobberList75.4Volatile...?86.深入constraintso81.常用constraints82.constraint修改标记107.常用技巧10&结束语1

2、39.参考文献131.简介[主耍是版权/反馈/勘误/感谢等信息。没有翻译。-译者注,本文中方括号中的都是译者注]2.概要我们现在学习GCC内联汇编,那么内联汇编到底是什么?[我们首先先来看看内联函数有什么好处]我们可以让编译器将函数代码插入到调用者代码中,指出函数在代码中具体什么位置被执行。这种函数就是内联函数。内联函数似乎很像一个宏?的确,他们之间有很多相似之处。那么内联函数到底有什么好处呢?内联函数降低了函数调用的开销°[不仅仅节省堆栈]如果某些函数调用的实参相同,那么返回值一定是相同的,这就可能给编译器留下了简化的空间。因为返回值相同了就不必把内联函数的代码插入到调用

3、者的代码中[直接用这个返回值替换就好了]。这样对以减少代码量,视不同的情况而定。声明一个函数是内联函数,使用关键字inlineo现在我们回到内联汇编上来。内联汇编就是一些汇编语句写成的内联函数。它方便,快速,对系统编程非常有用。我们主要目标是研究GCC内联函数的基础格式和使用方法。声明一个内联汇编函数,我们使用关键字asmo内联汇编的重要性首先体现在它的操作C语言变量和输出值到C语言变量的能力。由于这些特性,内联汇编常被用作汇编指令和调用它的C程序之间的接口。1.GCC汇编格式。GCC(GNUCompilerforLinux)使用AT&TUNIX汇编语法.这里我们将用AT&

4、T汇编格式來写代码。如果你不熟悉AT&T汇编语法也没有关系,下面将有介绍。AT&T和Imel汇编语法有很多的不同之处。我将给出主要的不同点。1.源操作数和目的操作数的方向AT&T和Intel汇编语法相反。Intel语法中第一个操作数作为目的操作数,第二个操作数作为源操作数。相反,在AT&T语法中,第一个操作数是源操作数,第二个是目的操作数,例如:Intel语法:"OP-codedstsrcMAT&T语法:nOp-codesrcdstM2.寄存器命名[在AT&T语法中]寄存器名字加上%前缀,例如,如果要使用enx,写作:%eax.3.立即数AT&T语法中,立即数以丫符号作为前

5、缀。静态C变量前也要加上丫前缀。在Intel语法中,16进制的常数加上h后缀,但是在AT&T中,常量前要加上Ox蔦对于一个16进制常数(在AT&T中),首先以$开头接着是Ox,最后是常数。1.操作数大小在AT&T语法中,操作数占内存大小决定于汇编命令操作符的最后一个字符的内容。操作符以b,W和T为后缀指明内存访问长度是byte(8-bit),word(16-bit)B是long(32-bit).而Intel语法在操作数前加上byteptr'wordpf和'dwordp『的内存操作数(这个操作数不是汇编命令操作符)來达到相同目的.因此,Intel"nioval,bytept

6、rfoo"用AT&T语法就是:,'niovbfoo,%al"2.内存操作数在Intel的语法中,基址寄存器用T和丁扩起来,但是在AT&T中改用(和丁。此外,在Intel语法中一个间接内存寻址:section:[base+index*scale4-dispj,在AT&T中则为:section:disp(base,index,scale)总是需要记住的一点就是,当一个常数被用作disp或者scale时,就不用加$前缀。现在我们已经提到了AT&T和Intel语法的一些主要不同点。我只是提到了一小部分。全部内容可以参考GNU汇编文档。为了更好理解这些不同,请看下面的例子:Intel

7、CodeAT&TCodemoveaxJmovl$1、%eaxmovebx,Ofthmovl$OxOff,%ebx,int80hint$0x80movebx^eaxmovl%eax,%ebxmoveaxjecx]movl(%ecx),%eaxmoveaxJecx+3]movl3(ecx),eaxmoveax,[ebx+20h]movl0x20(%ebx),%eaxaddeax,[ebx4-ecx*2h]addl(%ebx,%ecx,%0x2),%eaxleaeax,[ebx+ecx]leal(%ebx,%ecx),%

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。