ARM汇编指令对比记忆(整理)..doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM汇编指令对比记忆(整理).

参考资料: 1. Richard Blum,Professional Assembly Language 2. GNU ARM 汇编快速入门,/u/31996/showart.php?id=326146 3. ARM GNU 汇编伪指令简介,/jb8164/archive/2008/01/22/41661.aspx 4. GNU汇编使用经验,/u1/37614/showart_390095.html 5. GNU的编译器和开发工具,/blog-htm-do-showone-uid-34335-itemid-81387-type-blog.html 6. 用GNU工具开发基于ARM的嵌入式系统,/liren0@126/blog/static/32897598200821211144696/ 7. objcopy命令介绍,/junhua198310/archive/2007/06/27/1669545.aspx 从网上找到一些关于ARM伪指令的资料,现整理如下: 一. Linux汇编行结构 任何汇编行都是如下结构: [:] [} @ comment [:] [} @ 注释 Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。 【例1】定义一个add的函数,返回两个参数的和。 .section .text, “x” .global add @ give the symbol add external linkage add: ADD r0, r0, r1 @ add input arguments MOV pc, lr @ return from subroutine @ end of program 1. LDR LDR R0, =0X3FF5000 ;伪指令,把0X3FF5000这个地址送给R0? LDR R0, 0XFF?????? ; 把立即数0xff送给R0 LDR R0, =FF?????? ; 相当于0X? BIC R0, R0, #%1011 ;.#表示立即数,%表示二进制 LDR R1, =0x3ff5000??? ;伪指令 R1=0X3FF5000 LDR R1, 0x3ff5000???? ;存储器访问指令 R1= [0x3ff5000] 2. adr与ldr比较 adr r0, InitSystem? ; ldr r1, =InitSystem ; 伪指令adr r0,InitSystem 编译时汇编成:sub r0,PC,#offset to InitSystem LDR r1,=InitSystem ,这种方式读取的地址值在连接时已经被固定了,这种代码 不是位置无关的。遇到LDR伪指令时,汇编编译器将该地址值保存到一个缓冲区(l iteral pool)中,然后将该LDR 伪指令处理成一条基于PC到该数据缓冲区单元的LD R 指令,从而将该地址值读取到寄存器总,这时,要求该数据缓冲区到PC的距离小 于4KB。如果该目标地址值为一个外部地址值或者不在本数据段内,则汇编译器在目 标文件中插入一个地址重定位伪操作,当连接器进行连接时生成该地址值。 LDR r1,=InitSystem 汇编成:LDR R1,[PC,#offset to Litpool1] ------------------------------------------------------ adr用来加载地址,例如adr r0,var1? ldr用来加载地址处的内容,例如ldr r0,var1? 上面的这种语法只能从.text段中加载 但ldr r0,=var1可从任意段中加载地址 ldr有伪指令和非伪指令,伪指令后面的立即数前加=? ADR在编译时会被替换成一条add或者sub指令,如果替换不了则报错。相对PC寻址? ADRL会被替换成两条指令,替换不了报错误。相对PC或者积存器寻址? 这两条指令依据立即数的对齐方式不同,允许的立即数范围也不同。? LDR则是产生文字池的方式加载常量,基于PC的相对寻址,专用加载32bit立即数.? 通过反汇编可以很容易看出LDR和ADR区别:? 假设入口点地址为0x8000? AREA LDRlabel, CODE, READONLY? ENTRY ; Mark first instruction to execute? start? BL func1 ; Branch to first subroutine? stop? MOV r0, #0x18 ; angel_SWIreason_ReportException? LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit? LDR r1,=0xff? SWI

文档评论(0)

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

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

1亿VIP精品文档

相关文档