

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章ARM指令系统3.1数据处理指令3.2数据传送指令3.3控制流指令3.4汇编语言程序R0R1R25AR3nR4sR5R65R7DR8cR9R10/R11R12oMBR13(SP)3R14(LP)丿cR15(PC)NMCPSRzUsor模式RAMI/OARM编程模型汇编语言的源语句行的一般格式是: label instruct ion I direct iveI pseudo-ins truet ion; comment注意:即使没有标号,指令、伪指令和命令前面也必须有一个空白, 例如一个空格或制表符。源语句行的所有三部分都是可选的。可以使用空行来使代码 更具可读性大小写规则指令记忆码、命
2、令和符号寄存器名称可以用大写或小写编写, 但不能混合使用大小写。标号:标号是表示地址的符号。在汇编时计算由标号指定的地址。 汇编器计算标号的地址,该地址是相对于所定义标号所在 段的原点的。引用相同段内的一个标号时,可以使用程序 计数器加上或减去一个偏移量。这被称为相对程序的寻址。其它段中的标号地址是在链接时计算的,此时链 接程序已在存储器中为每个段分配了具体的位置。注释: 一行中的第一个分号用于标记注释的开始,但不包括出现 在一个字符串常数内的分号。行的末尾就是注释的结束。一个注释本身就是一个有效的行。汇编程序将忽略所有注 释。常数:常数可以数值、布尔值、字符或字符串 数字可以接受下列形式的数
3、字常数:十进制数,如 123 十六进制数,如,0 x7B布尔值布尔常数 TRUE 和 FALSE 必须书写为TRUE和FALSE。字符字符常数由左、右单引号组成,中间括住单个字符或一个转义字符, 采用标准的 C 转义字符。字符串字符串由左、右双引号括住多个字符或空格而组成。如果在一个字 符串内使用了双引号或美元字符作为文字文本字符,则必须用一对适 当的字符来表示它们。例如,如果需要在字符串内使用单个$,则必 须使用$。在字符串常数内可以使用标准的 C 转义序列。 ARM汇编语言模块的示例AREA ARMex, CODE, READONLY;Name this block of code ARM
4、exENTRY;Mark first instruction to executestartMOVrO, #10;Set up parametersMOVr1,#3ADDrO, rO, r1;rO = rO + r1stopMOVrO, #0 x18;angel_SWIreason_ReportExceptionLDRr1, =0 x20026;ADP_Stopped_ApplicationExitSVC#0 x123456;ARM semihosting (formerly SWI)END;Mark end of file3.1数据处理指令 AR M的数据处理指令使得程序员能够完成等存器中数
5、据的 算术和逻辑操作。其他指令只是传送数据和控制程序的顺序。数据处理指令的典型特征是需要两个操作数,产生单个结 果。所有的操作数是32位,或来自寄存器、或是指令中定义的 立即数。如果有结果,则结果为32位宽并只能在寄存器中。每一个操作数寄存器和结果寄存器都在指令中独立指定, 也即ARM指令使用3地址模式。ADD rO, r1, r2; rO := r1 + r2注意指令中操作数的顺序,rO是结果寄存器,然后是第一操作数(门),最后是第二操作数(r2)。当指令执行后,对系统状态而言唯一的变化是目的寄存器rO的值。CPSR中的标志位(N、Z、C、V)也可有选择地变化。1、算术操作这类指令对两个32
6、位操作数进行二进制算术操作。ADD rO , r1 , r2;rO := r1 + r2ADC rO , r1 , r2;rO := r1 + r2 + CSUB rO , r1 , r2;rO := r1r2SBC rO , r1 , r2;rO := r1r2 + C12、逻辑操作这类指令对输入操作数的对应位进行指定的布尔逻辑操作。 AND rO , r1 , r2;r0 i := r1 i and r2 i ORR rO , r1 , r2;r0 := r1 or r2EOR rO , r1 , r2;r0 := r1 xor r2BIC rO , r1 , r2;r0 := r1 an
7、d not r23、 寄存器传送操作这些指令无第一操作数(省略),只是简单的将第二操作数传送到结果寄存器。MOVrO , r2:rO:= r2MVNrO, r2;r0 := not r24、 比较操作这类指令不产生结果(省略结果寄存器),仅影响CPSR中的相应位(N、Z、C. V)。CMPr1 , r2:r1r2 ccCMNr1 , r2:r1+ r2 T ccTSTr1 , r2:r1and r2 T ccTEQr1 , r2:r1xor r2 T cc5、立即数操作因为立即数是在32位指令中编码,所以不可能将32位都作 为立即数,只能是一个8位数并按两位数为边界进行的调 整。立即数=(0-
8、255)x22nADD r3 , r3 , #1AND r8 , r7 , #& ff6、寄存器移位操作这类指个允许第二个操作数(寄存器)在同第一个操作数(寄存器)运算之前完成移位操作。ADD r3 , r2 , r1 , LSL #3 ;r3 := r2 + r1 x 8这是一条在单个时钟周期内执行的ARM指令,许多处理器 采用独立的移位操作指令。LSL(逻辑左移)、LSR(逻辑右移)ASL(算术左移)、ASR(算术右移)ROR(循环右移)0=n1018|6r9多寄存器传送寻址模式16r9 -100C16100016LDMDA r9!, r0 , rl ,r5 STMIB r9!,
9、rO , rl ,r5 LDMIB r9!, rO , rl ,r5 STMDB r9!, rO , rl ,r5 LDMDB r9!, rO, rl ,r5 例如:把8个字从rO指向的位置拷贝到门指向的位置,即LDMIArO ! , r2 - r9 STM IAr1 , r2 - r9 执行后,rO增加了32。这是由于“!”使其自动变址8个字 节,而rl没有改变。如果r2r9含有有用的数据,则可以先把它们压入堆栈,即STMFDr13!,r2-r9;将寄存器压栈LDMIArO !, r2 - r9STMIAr1, r2 - r9LDMFDr13 ! , r2-r9;从堆栈中恢复后缀“FD”表示
10、满递减堆栈寻址模式。注意,在堆栈操作 中几乎总是要指定自动变址,以便保证堆栈指针具有一致 的行为。多寄存器Load和Store指令为保存和恢复处理器状态以及 在存储器中移动数据块提供了一种有效方式。它节省代码 空间,并且其执行速度提高了4倍。这个重要的优点说明,值得认真考虑数据在存储器中的组 织方式,以便增大使用多寄存器传送指令去访问存储器的 潜力。递增A(入栈时)递减D(入栈时)满空满空增 值先增STMIBSTMFALDMIBLDMED后增STMIASTMEALDMIALDMFD减 值先减LDMDBLDMEASTMDBSTMFD后减LDMDALDMFASTMDASTMED3.3控制流指令控制
11、流指令既不处理数据,也不存釵数据,它只是确定下 一步执行哪一条指令。转移指令条件转移条件执行转移链接子程序返回监控程序调用跳转表转移指令(无条件转移)将程序的执行从一个位置切换到另一个位置最常用的方法 是使用转移(branch )指令,B LABEL LABEL.或LABEL. B LABEL条件转移 有时想让微处理器决定是否进行转移。MOVr0,#0;计数器初始化LOOP ADDrO , rO, #1;循环计数器加一CMPr0,#10;与循环的限制比较BNELOOP;如不相等则返回;否则循环终止转移解释一般应用B无条件总是执行转移BEQ相等BNE不等BPL正BMI负BCC BLO无进位、低于
12、无符号娄攵比较BCS BHS有进位、高于或相等无符号数比较BVC无溢出有符号数比较BVS有溢出有符号数比较BGT大于有符号数比较BGE大于或相等有符号数比较BLT小于有符号数比较BLE小于或相等有符号数比较BHI高于无符号数比较BLS低于或相等无符号数比较列在表中同一行的一对条件(如和)的含义相同,并得到 同样的二进制代码。但两者都是有用的,因在特定的环境 中,每一种条件都可能使汇编语言源代码的编译更加容易。当表中提到有符号数和无符号数的比较时,它并不是要选 择比较指令本身,而只是支持操作数选择的解释。条件执行 ARM指令集有一条不寻常的特征,就是条件执行不仅应用 于转移指令,也应用于所有的A
13、RM指令。CMPr0,#5BEQBYPASS:if (rO != 5 ) ADDr1 , r1 ,r0;r1 := r1+ r0r2SUBr1 , r1 ,r2;BYPASS 替代为CMPr0,#5;if (rO != 5 ) ADDNEr1 , r1 ,r0;r1 := r1+ rOr2SUBNEr1 , r1 ,r2;要激活条件执行,须在3字符的操作码之后增加2字符的条 件码(条件码应在其它任何修正码之前)。:if ( a = b) & ( c= d) e+;CMPrO , r1CMPEQr2 , r3ADDEQr4 , r4 ,#1由于第二个比较指令使用了条件执行,从而实现了if
14、语句 中的逻辑“与”。使用条件执行的示例Euclid(欧几里德)的最大公因子(gcd)算法的两种实现 方法。它说明了如何能使用条件执行来改进代码密度和执 行速度。在C语言中,该算法可以表示如下:int gcd (int a, int b) while (a != b) if (a b)a = a - b;elseb = b - a;return a;采用下列代码,可以只用带条件跳转来实现gcd函数:gcd CMPrO, rlBEQendBLTlessSUBSrO, rO, rl;could be SUB rO, rO, rl for ARMBgcdless SUBSrl, rl, rO;cou
15、ld be SUB r1, r1, rO for ARMBgcdend由于跳转数目的原因, 该代码的长度是七条指令。 每次获 得一个跳转时,处理器必须重填流水线并从新位置继续执 行。其它指令和未执行的跳转各使用一个周期。通过使用ARM指令集的条件执行功能,可以仅用四个指 令实现gcd函数:gcd CMP rO, rlSUBGT rO, rO, rlSUBLE rl, rl, rOBNE gcdEND除了减小了代码大小之外,此代码在大多数情况下执行速 度更快。在这种情况下,用条件执行的所有指令来代替跳 转后,可节省三个周期。当rO = rl时两种代码的执行周期数相等。在其他情况下, 代码的条件执
16、行的执行周期数最少。所有指令为条件跳转R0:aR1 :b12121212121111所有指令为条件执行R0R1 :Instructio nCycles(7)转移链接指令:通常要调用子程序,并且当子程序执行完时能够恢复到原 来的代码位置,这就需要把执行转移之前程序计数器门5的值保存下来。 ARM使用转移链接指令BL来提供这一功能。该指令完全 像转移指令一样执行转移,并将转移后面紧接的一条指令 的地址保存到连接寄存器门4中。BL SUBR;转移到SUBR.;返回到这里,SUBR.;子程序入口 MOV pc , r14;返回注意:由于返回地址保存在门4寄存器里,子程序不应嵌 套,否则,新的返回地址将
17、覆盖原来的返回地址。常规做 法是将门4入栈。BLSUB1;转移到SUB1.;返回到这里SUB1STMFD r13! , r0-r2, r14;保存现场BL SUB2 SUB2.子程序返回指令:为了返回调用程序,必须将转移链接指令保存在n 4中的程序计数器值拷贝到程序寄存器。SUBR ;子程序入口 MOV pc,r14;把和4拷贝到门5来返回对子程序嵌套返回SUB1STMFDr13 !, r0-r2 , r14BLSUB2 LDMFDr13 !, r0-r2 , pcAREAsubrout, CODE, READONLY;Name this block of codeENTRY;Mark fir
18、st instruction to executestartMOVrO, #10;Set up parametersMOVr1,#3BLdoadd;Call subroutinestopMOVr0, #0 x18;angel_SWIreason_ReportExceptionLDRr1, =0 x20026; ADP_Stopped_ApplicationExitSVC#0 x123456;ARM semihosting (formerly SWI)doadd ADDrO, rO, r1;Subroutine codeBXlr;Return from subroutineEND;Mark end of file监控程序调用监控程序提供了委托访
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公路ppp合同范本
- 分红比例合同范本
- 公路规划合同范本
- 协议合同范本写法
- 兼职还款合同范本
- pos机推广合同范本
- 入股店铺协议合同范本
- 义齿加工合同范本模板
- 京东入职合同范本
- 医院整体转让合同范本
- 考前冲刺攻略课件
- 新媒体运营合作合同范本
- 2024年12月2025中央统战部直属事业单位应届高校毕业生公开招聘21人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年湖北省烟草专卖局(公司)招聘笔试真题
- 2025中铁快运股份限公司招聘全日制普通高校毕业生35人易考易错模拟试题(共500题)试卷后附参考答案
- 计算机网络试题及答案
- 2025年中国主题乐园行业发展概况、市场全景分析及投资策略研究报告
- 产后疼痛管理指南
- 2025年安徽马鞍山市两山绿色生态环境建设有限公司招聘笔试参考题库附带答案详解
- 工娱治疗及其护理
- 人效管理措施
评论
0/150
提交评论