ARM寻址方式.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为什么要规定8位位图? ARM指令格式 为什么要规定8位位图? 表格中的shifter_operand所占的位数:12位。要用一个12位的编码来表示任意的32位数是绝对不可能的(12位数有212种可能,而32位数有232种). 但是又要用12位的编码来表示32位数 怎么办? ??? 为什么要规定8位位图? 在表示数的数量上做限制。 通过编码来实现用12位的编码来表示32位数。??? 在12位的shifter_operand中:8位存数据,4位存放移位的次数。??? 8位存数据--该常数必须对应8位位图。???? 4位存移位的次数--移偶数位。 4位只有16种可能值,而32位数可以循环移位32次(32种可能),那就只好限制:只能移偶数位(两位两位的移,好像一个16位数在移位,16种移位可能)。 举例 AND R1,R2,#0xff 0xff为8位二进制数,处理器就将其直接放进8位“基本”数中,而4位“移位”数则为0. AND R1,R2,#0x104 0x104已经超过了8位二进制数,如何表示? 0x104的二进制: 0000 0000 0000 0000 0000 0001 0000 0100, 是0000 0000 0000 0000 0000 0000 0100 0001通过循环右移30位得到的。 因此改造后的结果是8位“基本”数中存放0100 0001,而“移位”数为15。 怎么判别是否合法? 第一,看这个数转换成二进制后1的个数是否不超过8个 如果不超过8个,再看这n个1(n)是否能同时放到8个二进制位中 如果可以放进去,再看这八个二进制位是否可以循环右移偶数位得到起初被判断的那个数值,如果可以,则此数值即为符合8位位图原理,否则不合法。 合法立即数 0x3F8是合法的,把它写成二进制形式为:0011111111000b,使用0xFE)循环向左移动2位可以得到0x3F8 练习 #0xff000000 0x101 0x102 0xC0000003 0xff1 0x6000000E 举例: LDMIA R0!,{R3-R9} ;将R0指向的内存地址上的多字 ;数据读出到R3~R9中(R0自动加4) STMIA R1!,{R3-R9} ;将寄存器R3~R9的值保存到 ;R1指向的存储单元中(R1自动加4) 举例2: 满递减堆栈: STMFD SP!,{R0-R7,LR} ;现场保存, ;将R1~R7、LR入栈。 LDMFD SP!,{R0-R7,PC} ;恢复现场, ;异常处理返回 ;数据出栈, ;放入R1~R7、LR寄存器。 相对寻址 相对寻址也可以看成是一种特殊的基址寻址,特殊性是它把程序计数器PC中的当前值最为基地址,语句中的地址标号作为偏移量,将两者相加之后得到操作数的地址。 例如以下语句: BL NEXT ;相对寻址,跳转到NEXT处执行 …… NEXT …… 4.前索引寻址:是将基址与偏移量相加作为传送数据的地址,传送数据后将数据的地址传送给基址寄存器。 LDR Rd,[Rn,#0x04]! 注:在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。使用后缀“!”,则结果写回到Rn中。 5.后索引寻址:是将基址作为传送数据的地址,传送数据后自动将基址的内容与偏移量相加传送给基址寄存器。 LDR Rd,[Rn],#-0x02 注: Rn的值用做传送数据的存储地址。在数据传送后,将偏移量与Rn相加,结果写回到Rn中。 使用该类寻址方式的指令的语法格式如下: LDR|STR{cond}H|SH|SB|D Rd,addressing_mode 2.杂类Load/Store指令的寻址方式 注:1.B:字节,H:半字,D:双字。 2.S:加载有符号数。 寄存器后索引寻址 [Rn],±Rm 6 立即数后索引寻址 [Rn],#± offset_12 5 寄存器前索引寻址 [Rn,±Rm]! 4 立即数前索引寻址 [Rn,#± offset_12]! 3 寄存器偏移寻址 [Rn,±Rm] 2 立即数偏移寻址 [Rn,#±offset_12] 1 模 式 格 式 又称为多寄存器寻址方

文档评论(0)

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

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

1亿VIP精品文档

相关文档