- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三讲 ARM指令集 指令长度 指令集可以是以下任一种 32 bits 长 (ARM状态) 16 bits 长 (Thumb 状态) ARM7TDMI 支持3种数据类型 字节 (8-bit) 半字 (16-bit) 字 (32-bit) 字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐 一、 ARM指令集概述 ARM指令集是32位的,ARM汇编程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。本节从以下三个方面介绍: 指令分类及指令格式 指令集编码 条件执行 指令分类及指令格式 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉} ARM指令集编码 ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。 每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。 编码表如下: 指令集编码表 条件执行 ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。 在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。 (P100页) 条件域表1 条件域表2 二、 ARM寻址方式 ARM指令系统支持如下几种常见的寻址方式: 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令: ADD R0,R0,#1 /*R0←R0+1*/ AND R0,R0,#0x3f /*R0←R0 AND 0x3f*/ 在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。 注:有效立即数问题 在32位指令编码中存放32位立即数的方法是: 在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环右移偶数位而间接得到。其中循环右移的位数由一个4位二进制的两倍表示,如果立即数记作immediate,8位常数记作immed_8,4位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环右移偶数位得到。 因此有效立即数immediate可以表示成: immediate=immed_8循环右移(2×rotate_imm) 例: MOV R0, #0x0000F200 MOV R0, #0MOV R0, #0MOV R0, #0MOV R0, #0xF000000F 寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/ 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。 寄存器寻址 第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,{shift},其中Rm称为第二操作数寄存器,shift用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数(##shift)或寄存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令: ADD R3,R2,R1,LSR #2 ;R3—R2 + R1÷4 寄存器寻址 第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。 LSR:逻辑右移,空出的最高有效位用0填充。 ASL:算术左移,由于左移空出的有效位用0填充,因此 它与LSL同义。 ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。 ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。 RRX:带扩展的循环右移。将寄存器的内容循环右移
您可能关注的文档
最近下载
- 《背影》课内阅读训练.doc VIP
- Amason艾茉森电子乐器VP-73GH说明书.pdf
- 《机械臂结构》课件.ppt VIP
- 护理学本科毕业论文范文范文本科护理护理学毕业论文范文.doc
- 11CD008-4 固定资产投资项目节能评估文件编制要点及示例(电气)(OCR).pdf VIP
- 单片机课程设计报告 简易电子琴 .pdf VIP
- 网课章节答案《科学启蒙》超星尔雅答案2023.pdf VIP
- 吉他六线谱空白模版A4 六线 2mm 8行 通用版2打印模板.pdf VIP
- 安全生产规章制度和操作规程完整版.pdf VIP
- 国家开放大学《管理英语4》边学边练Unit 1-4(答案全).docx VIP
原创力文档


文档评论(0)