arm汇编器与gcc汇编器支持的汇编语言差别

arm汇编器与gcc汇编器支持的汇编语言差别

ID:9828656

大小:162.00 KB

页数:9页

时间:2018-05-11

arm汇编器与gcc汇编器支持的汇编语言差别_第1页
arm汇编器与gcc汇编器支持的汇编语言差别_第2页
arm汇编器与gcc汇编器支持的汇编语言差别_第3页
arm汇编器与gcc汇编器支持的汇编语言差别_第4页
arm汇编器与gcc汇编器支持的汇编语言差别_第5页
资源描述:

《arm汇编器与gcc汇编器支持的汇编语言差别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ARM汇编器与GCC汇编器支持的汇编语言差别汇编基本语法简介在AT&T汇编格式中,寄存器名要加上'%'作为前缀;而在Intel汇编格式中,寄存器名不需要加前缀内嵌汇编语法如下:__asm__(汇编语句模板:输出部分:输入部分:破坏描述部分)其中,asm 和 __asm__是完全一样的。共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。例如:__asm____volatile__("cli":::"memory")汇编基本语法简介在A

2、T&T汇编格式中,寄存器名要加上'%'作为前缀;而在Intel汇编格式中,寄存器名不需要加前缀。例如:AT&T格式Intel格式pushl%eaxpusheax在AT&T汇编格式中,用'$'前缀表示一个立即操作数;而在Intel汇编格式中,立即数的表示不用带任何前缀。例如:AT&T格式Intel格式pushl$1push1AT&T和Intel格式中的源操作数和目标操作数的位置正好相反。在Intel汇编格式中,目标操作数在源操作数的左边;而在AT&T汇编格式中,目标操作数在源操作数的右边。例如:AT&T格式Intel格式addl$1,%eaxaddeax,1在AT&T汇编格式中

3、,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节(byte,8比特)、字(word,16比特)和长字(long,32比特);而在Intel汇编格式中,操作数的字长是用"byteptr"和"wordptr"等前缀来表示的。例如:AT&T格式Intel格式movbval,%almoval,byteptrval在AT&T汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上'*'作为前缀,而在Intel格式中则不需要。远程转移指令和远程子调用指令的操作码,在AT&T汇编格式中为"ljump"和"lcall",而在Intel汇编格

4、式中则为"jmpfar"和"callfar",即:AT&T格式Intel格式ljump$section,$offsetjmpfarsection:offsetlcall$section,$offsetcallfarsection:offset与之相应的远程返回指令则为:AT&T格式Intel格式lret$stack_adjustretfarstack_adjust在AT&T汇编格式中,内存操作数的寻址方式是AT&T格式Intel格式section:disp(base,index,scale)section:[base+index*scale+disp]由于Linux工作在保护

5、模式下,用的是32位线性地址,所以在计算地址时不用考虑段基址和偏移量,而是采用如下的地址计算方法:disp+base+index*scale下面是一些内存操作数的例子:AT&T格式Intel格式movl-4(%ebp),%eaxmoveax,[ebp-4]movlarray(,%eax,4),%eaxmoveax,[eax*4+array]movwarray(%ebx,%eax,4),%cxmovcx,[ebx+4*eax+array]movb$4,%fs:(%eax)movfs:eax,4内嵌汇编格式简介内嵌汇编语法如下:__asm__(汇编语句模板:输出部分:输入部分:破

6、坏描述部分)其中,asm 和 __asm__是完全一样的。共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。例如:__asm____volatile__("cli":::"memory") 1、汇编语句模板   汇编语句模板由汇编语句序列组成,语句之间使用“;”、“”或“\t”分开。指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如下:%0,%1,…,%9。指令中使用占位符表示的操作数,总被视为

7、long型(4个字节),但对其施加的操作根据指令可以是字或者字节,当把操作数当作字或者字节使用时,默认为低字或者低字节。对字节操作可以显式的指明是低字节还是次字节。方法是在%和序号之间插入一个字母,“b”代表低字节,“h”代表高字节,例如:%h1。 2、输出部分   输出部分描述输出操作数,不同的操作数描述符之间用逗号格开,每个操作数描述符由限定字符串和C语言变量组成。每个输出操作数的限定字符串必须包含“=”表示他是一个输出操作数。例:__asm____volatile__("pushfl;popl%0

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

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

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