- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
这两天参加了一个编写操作系统的项目,因为要做很多底层的东西,而且这个操作系统是嵌入式的,所以开始学习ARM汇编,发现ARM汇编和一般PC平台上的汇编有很多不同,但主要还是关键字和伪码上的,其编程思想还是相同的。现将一些学习感悟部分列出来,希望能给有问题的人一点帮助。??? 1、ARM汇编的格式:??? 在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写;有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错。常量定义需要顶格书写,不然,编译器同样会报错。??? 2、字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号。??? 3、在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同样的,当src变量代表一个数组时,需要将r0寄存器指向src则需要这样赋值:LDR r0,=src???? 当格式是LDR r0,[r2],则第二个参数表示寄存器,我的理解是[]符号表示取内容,r2本身表示一个寄存器地址,取内容候将其存取r0这个寄存器中。??? 4、在语句:?????? CMP r0,#num?????? BHS stop?????? 书上意思是:如果r0寄存器中的值比num大的话,程序就跳转到stop标记的行。但是,实际测试的时候,我发现如果r0和num相等也能跳转到stop标记的行,也就是说只要r0小于num才不会跳转。??? ???? 下面就两个具体的例子谈谈ARM汇编(这是我昨天好不容易看懂的,呵呵)。???? 第一个是使用跳转表解决分支转移问题的例程,源代码如下(保存的时候请将文件后缀名改为s):?? ????? AREA JumpTest,CODE,READONLY????? CODE32?num? EQU? 4
?ENTRY?start????? MOV? r0, #4????? MOV? r1, #3????? MOV? r2, #2????? MOV? r3, #0?????? CMP? r0,? #num????? BHS? stop?????? ADR? r4, JumpTable?????? CMP? r0, #2????? MOVEQ? r3, #0????? LDREQ? pc, [r4,r3,LSL #2]?????? CMP? r0, #3????? MOVEQ? r3, #1????? LDREQ? pc, [r4,r3,LSL #2]?????? CMP? r0, #4????? MOVEQ? r3, #2????? LDREQ? pc, [r4,r3,LSL #2]?????? CMP? r0, #1????? MOVEQ? r3, #3????? LDREQ? pc, [r4,r3,LSL #2]?DEFAULT????? MOVEQ? r0, #0?SWITCHEND
stop????? MOV? r0, #0x18????? LDR? r1, =0x20026????? SWI? 0x123456?JumpTable????? DCD? CASE1????? DCD? CASE2????? DCD? CASE3????? DCD? CASE4????? DCD? DEFAULT?CASE1????? ADD? r0, r1, r2????? B? SWITCHEND?CASE2????? SUB? r0, r1, r2????? B? SWITCHEND?CASE3????? ORR? r0, r1, r2????? B? SWITCHEND?CASE4????? AND? r0, r1, r2????? B? SWITCHEND?END ??? 程序其实很简单,可见我有多愚笨!还是简要介绍一下这段代码吧。首先用AREA伪代码加上CODE,表明下面引出的将是一个代码段(于此相对的还有数据段DATA),ENTRY 和END成对出现,说明他们之间的代码是程序的主体。start段给寄存器初始化。ADR? r4, JumpTable一句是将相当于数组的JumpTable的地址付给r4这个寄存器。
??? stop一段是用来是程序退出的,第一个语句“MOV r0,#0x18”将r0赋值为0x18,这个立即数对应于宏angel_SWIreason_ReportException。表示r1中存放的执行状态。语句“LDR r1,=0x20026”将r1的值设置成ADP_Stop
您可能关注的文档
- word使用技巧——汇总.doc
- 【矿山课件】第二章 凿岩机械.ppt
- 2012兰州项目前期市场调研定位报告73p.ppt
- 2011高考新材料作文的审题立意(含训练参答).doc
- K195+129279涵洞施工组织设计.doc
- 2012扶绥年货购物节.ppt
- PP-R给排水管材管件采购合同.doc
- 《收发电子邮件》说课稿—获奖说课稿.doc
- 120m技术规格书 船舶.doc
- Lavida朗逸上市经销商市场推广指导手册.ppt
- 美国大选前瞻:特朗普交易再度升温-241030-华福证券-13页.pdf
- 金融工程定期:资产配置月报(2024年11月)-241031-开源证券-21页.pdf
- 煤炭行业基金持仓分析:Q3持仓量环比下降,低配幅度扩大-241028-德邦证券-10页.pdf
- “学海拾珠”系列之二百一十:基于转移熵约束的投资组合优化-241030-华安证券-25页.pdf
- 流动性跟踪:资金不紧,存单横盘-241026-华西证券-20页.pdf
- 美国大选追踪系列研究八:美国大选提前投票怎么看?-241026-浙商证券-10页.pdf
- 麦肯锡-为人工智能时代重新布线(英)-2024.10-8页.pdf
- 历次牛市十倍股名单-241031-华创证券-12页.pdf
- 宁波银行(002142)2024年三季报点评:柳暗花明-241028-国投证券-11页.pdf
- 广西壮族自治区柳州高级中学20222023学年高三上学期1月考试理科综合试题.pdf
文档评论(0)