ARM汇编学习笔记

ARM汇编学习笔记

ID:40523393

大小:32.00 KB

页数:5页

时间:2019-08-04

ARM汇编学习笔记_第1页
ARM汇编学习笔记_第2页
ARM汇编学习笔记_第3页
ARM汇编学习笔记_第4页
ARM汇编学习笔记_第5页
资源描述:

《ARM汇编学习笔记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ARM汇编学习笔记[转]  1、ARM汇编的格式:   在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写;有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错。常量定义需要顶格书写,不然,编译器同样会报错。   2、字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号。   3、在使用LDR时,当格式是LDRr0,=0x022248,则第二个参数表示地址,即0x022248,同样的,当src变量代表一个数组时,需要将r0寄存器指向src则

2、需要这样赋值:LDRr0,=src    当格式是LDRr0,[r2],则第二个参数表示寄存器,我的理解是[]符号表示取内容,r2本身表示一个寄存器地址,取内容候将其存取r0这个寄存器中。   4、在语句:(大于等于都会跳转)      CMPr0,#num      BHSstop      书上意思是:如果r0寄存器中的值比num大的话,程序就跳转到stop标记的行。但是,实际测试的时候,我发现如果r0和num相等也能跳转到stop标记的行,也就是说只要r0小于num才不会跳转。       下面就两个具体的例子谈谈ARM汇编(这是我昨天好不容易看懂的,呵呵)。    第

3、一个是使用跳转表解决分支转移问题的例程,源代码如下(保存的时候请将文件后缀名改为s):       AREAJumpTest,CODE,READONLY     CODE32numEQU4ENTRYstart     MOVr0,#4     MOVr1,#3     MOVr2,#2     MOVr3,#0     CMPr0,#num     BHSstop     ADRr4,JumpTable     CMPr0,#2     MOVEQr3,#0     LDREQpc,[r4,r3,LSL#2]     CMPr0,#3     MOVEQr3,#1     L

4、DREQpc,[r4,r3,LSL#2]     CMPr0,#4     MOVEQr3,#2     LDREQpc,[r4,r3,LSL#2]     CMPr0,#1     MOVEQr3,#3     LDREQpc,[r4,r3,LSL#2]DEFAULT     MOVEQr0,#0SWITCHENDstop     MOVr0,#0x18     LDRr1,=0x20026     SWI0x123456JumpTable     DCDCASE1     DCDCASE2     DCDCASE3     DCDCASE4     DCDDEFAULTC

5、ASE1     ADDr0,r1,r2     BSWITCHENDCASE2     SUBr0,r1,r2     BSWITCHENDCASE3     ORRr0,r1,r2     BSWITCHENDCASE4     ANDr0,r1,r2     BSWITCHENDEND   程序其实很简单,可见我有多愚笨!还是简要介绍一下这段代码吧。首先用AREA伪代码加上CODE,表明下面引出的将是一个代码段(于此相对的还有数据段DATA),ENTRY和END成对出现,说明他们之间的代码是程序的主体。start段给寄存器初始化。ADRr4,JumpTable一句是将相

6、当于数组的JumpTable的地址付给r4这个寄存器。   stop一段是用来是程序退出的,第一个语句“MOVr0,#0x18”将r0赋值为0x18,这个立即数对应于宏angel_SWIreason_ReportException。表示r1中存放的执行状态。语句“LDRr1,=0x20026”将r1的值设置成ADP_Stopped_ApplicationExit,该宏表示程序正常退出。然后使用SWI,语句“SWI0x123456”结束程序,将CPU的控制权交回调试器手中。   在JumpTable表中,DCD类型的数组包含四个字,所以,当实现CASE跳转的时候,需要将给出的索

7、引乘上4,才是真正前进的地址数。   再看一个用汇编实现冒泡排序的例程:    AREASort,CODE,READONLYENTRYstart    MOVr4,#0    LDRr6,=src    ADDr6,r6,#lenouter    LDRr1,=srcinner    LDRr2,[r1]    LDRr3,[r1,#4]    CMPr2,r3    STRGTr3,[r1]    STRGTr2,[r1,#4]    ADDr1,r1,#4    CMPr1,r6    BLTinn

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

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

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