c语言asm汇编内嵌语法.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

.3GCCInlineASM

GCC支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCCInline

ASM一一GCC内联汇编。这是一个特别有用的功能,有利于我将一些C/C++语法无法

表达的指令干脆潜入C/C++代码中,另外也允许我干脆写C/C++代码中运用汇编编写

简洁高效的代码。

1.基本内联汇编

GCC中基本的内联汇编特别易懂,我先来看两个简洁的例子:

_asm_(movl%esp%eax);//看起来很熟识吧!

z

或者是

一asm—(

movl$l%eax//SYS_exit

xor%ebx%ebx

int$0x80

);

_asm_(

n

movl$l%eax\r\t\

z

xor%ebx%ebx\r\t\

z

int$0x80\

);

基本内联汇编的格式是

_asm____volatile—(InstructionList);

_asm—

asm—是GCC关键字asm的宏定义:

#defineasmasm

_asm_或asm用来声明一个内联汇编表达式,所以任何一个内联汇编表达式都是以它

开头的,是必不行少的。

2、InstructionList

InstructionList是汇编指令序列。它可以是空的,比如:_asm____volatile—(•);或

_asm_都是完全合法的内联汇编表达式,只不过这两条语句没有什么意义。但并

非全部InstructionList为空的内联汇编表达式都是没有意义的,比如:—asm—

(:::memory);就特别有意义,它向GCC声明:”我对内存作了改动〃,GCC在编译

的时候,会将此因素考虑进去。

我看一看下面这个例子:

$catexamplel.c

intmain(int_argcchar*_argv[])

z

int*_p=(int*)—argc;

(*_p)=9999;

//_asm_::memory);

if((*_p)==9999)

return5;

return(*—p);

)

在这段代码中,那条内联汇编是被注释掉的。在这条内联汇编之前,内存指针_p所指向

的内存被赋值为9999随即在内联汇编之后,一条If语句推断_p所指向的内存与9999

是否相等。很明显,它是相等的。GCC在优化编译的时候能够很聪慧的发觉这一点。我

运用下面的吩咐行对其进行编译:

$gcc-0-Sexamplel.c

选项-0表示优化编译,我还可以指定优化等级,比如-02表示优化等级为2;选项5表

示将C/C++源文件编译为汇编文件,文件名和C/C++文件一样,只不过扩展名由.c变

我来查看一下被放在examplel.s中的编译结果,我这里仅仅列出了运用gcc2.96

在redhat7.3上编译后的相关函数部分汇编代码。为了保持清晰性,无关的其它代码未被

列出。

$catexamplel.s

main:

pushl%ebp

movl%esp%ebp

z

movl8(%ebp)%eax#int*—p=(int*)—argc

z

movl$9999(%eax)#(*—p)=9999

movl$5%eax#

文档评论(0)

zhuifengshaonian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档