嵌入式系统开发和实际应用教程第三讲.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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:带扩展的循环右移。将寄存器的内容循环右移

文档评论(0)

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

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

1亿VIP精品文档

相关文档