在arm的指令编码表中.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在arm的指令编码表中

第二章 ARM指令编码分类及其寻址方式 ARM指令分类 ARM指令的一般编码格式 ARM指令寻址方式 一.ARM指令分类 跳转指令 数据处理指令 程序状态寄存器(PSR)传输指令 Load/Store指令 协处理指令 异常中断产生 二.ARM指令的一般编码格式 语法格式: opcode{cond}{S}Rd,Rn,shifter_operand 指令格式中符号说明 opcode 操作码;指令助记符,如LDR、STR等。 cond 可选的条件码;执行条件,如EQ、NE等。 S 可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。 Rd 目标寄存器。 Rn 存放第1操作数的寄存器。 operand2 第2个操作数 寄存器方式:操作数即为寄存器的数值 如:MOVS R3,R2 ADD R0,R1,R2 寄存器移位方式:操作数为寄存器的数值做相应的移位而得到。 LSL 逻辑左移 ——空出的最低有效位用0填充 LSR 逻辑右移 ——空出的最高有效位用0填充 ASL 算术左移 ——同LSL ASR 算术右移 ——空出的最高低有效位用“符号位”填充 ROR 循环右移 ——移出的最低有效位依次填入空出的最高有效位 RRX 带扩展的循环右移——将寄存器内容循环右移1位,空位用原来的C标志位填充。 ARM指令集一般编码形式 ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。 每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。 编码表如下: 条件执行 ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。 在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。 条件域表1 条件域表2 三.寻址方式 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址 立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令: ADD R0,R0,#1 /*R0←R0+1*/ ADD R0,R0,#0x3f /*R0←R0+0x3f*/ 在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。 有效立即数问题 在32位指令编码中存放32位立即数的方法是: 在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环右移偶数位而间接得到。其中循环右移的位数由一个4位二进制的两倍表示,如果立即数记作immediate,8位常数记作immed_8,4位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环右移偶数位得到。 因此有效立即数immediate可以表示成: immediate=immed_8循环右移(2×rotate_imm) 有效立即数问题——数据处理指令二进制编码 寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令: 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:循环右移,移出的字的最低有效位依次填入空出的最高有效位。

文档评论(0)

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

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

1亿VIP精品文档

相关文档