ARM汇编器与GCC汇编器支持的汇编语言差别.doc

ARM汇编器与GCC汇编器支持的汇编语言差别.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- . z. ARM汇编器与GCC汇编器支持的汇编语言差异 汇编根本语法简介 在 AT&T 汇编格式中,存放器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,存放器名不需要加前缀 内嵌汇编语法如下: __asm__(汇编语句模板: 输出局部: 输入局部: 破坏描述局部) 其中,asm 和 __asm__是完全一样的。共四个局部:汇编语句模板,输出局部,输入局部,破坏描述局部,各局部使用":〞格开,汇编语句模板必不可少,其他三局部可选,如果使用了后面的局部,而前面局部为空,也需要用":〞格开,相应局部内容为空。例如: __asm__ __volatile__("cli": : :"memory") 汇编根本语法简介 在 AT&T 汇编格式中,存放器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,存放器名不需要加前缀。例如: AT&T 格式 Intel 格式 pushl %ea* push ea* 在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如: AT&T 格式 Intel 格式 pushl $1 push 1 AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而在 AT&T 汇编格式中,目标操作数在源操作数的右边。例如: AT&T 格式 Intel 格式 addl $1, %ea* add ea*, 1 在 AT&T 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节〔byte,8 比特〕、字〔word,16 比特〕和长字〔long,32比特〕;而在 Intel 汇编格式中,操作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。例如: AT&T 格式 Intel 格式 movb val, %al mov al, byte ptr val 在 AT&T 汇编格式中,绝对转移和调用指令〔jump/call〕的操作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。 远程转移指令和远程子调用指令的操作码,在 AT&T 汇编格式中为 "ljump" 和 "lcall",而在 Intel 汇编格式中则为 "jmp far" 和 "call far",即: AT&T 格式 Intel 格式 ljump $section, $offset jmp far section:offset lcall $section, $offset call far section:offset 与之相应的远程返回指令则为: AT&T 格式 Intel 格式 lret $stack_adjust ret far stack_adjust 在 AT&T 汇编格式中,内存操作数的寻址方式是 AT&T 格式 Intel 格式 section:disp(base, inde*, scale) section:[base + inde**scale + disp] 由于 Linu* 工作在保护模式下,用的是 32 位线性地址,所以在计算地址时不用考虑段基址和偏移量,而是采用如下的地址计算方法:disp + base + inde* * scale 下面是一些内存操作数的例子: AT&T 格式 Intel 格式 movl -4(%ebp), %ea* mov ea*, [ebp - 4] movl array(, %ea*, 4), %ea* mov ea*, [ea**4 + array] movw array(%eb*, %ea*, 4), %c* mov c*, [eb* + 4*ea* + array] movb $4, %fs:(%ea*) mov fs:ea*, 4 内嵌汇编格式简介 内嵌汇编语法如下: __asm__(汇编语句模板: 输出局部: 输入局部: 破坏描述局部) 其中,asm 和 __asm__是完全一样的。共四个局部:汇编语句模板,输出局部,输入局部,破坏描述局部,各局部使用":〞格开,汇编语句模板必不可少,其他三局部可选,如果使用了后面的局部,而前面局部为空,也需要用":〞格开,相应局部内容为空。例如: __asm__ __volatile__("cli": : :"memory") 1、汇编语句模板 汇编语句模板由汇编语句序列组成,语句之间使用 ";〞、"\\n〞或"\\n\\t〞分开。指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如下:%0,%1,…,%9。指令中使用占位符表示的操作数,总被视为long型〔4个

文档评论(0)

hkfgmny + 关注
实名认证
内容提供者

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

认证主体柏**

1亿VIP精品文档

相关文档

相关课程推荐