[信息与通信]第6章指令系统.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[信息与通信]第6章指令系统

Arm指令系统 寻址方式 一条汇编语句包含指令和操作数两部分,处理器在执行一条汇编语句时需要按照一定的方式取得操作数,这种处理器在执行指令的过程中寻找操作数的方式就称为寻址方式 立即数寻址 立即数寻址也叫立即寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下语句: MOV R0,#64 ;R0←64 ADD R0,R0,#1 ;R0←R0+1 在立即数寻址中,要求立即数以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”或“”。 在Arm处理器中,立即数必须是对应8位位图格式,即立即数是由一个8bit的常数在16位或32位的寄存器中,循环移动偶数位得到的。合法的立即数必须能够找到得到它的那个常数,否则这个立即数就是非法的。 合法立即数 0x3F8是合法的,把它写成二进制形式为:0011111111000b,使用0xFE)循环向左移动2位可以得到0x3F8 寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。例如以下语句: ADD R0,R1,R2 ;R0←R1+R2 寄存器偏移寻址 寄存器偏移寻址是ARM指令集特有的寻址方式,它是在寄存器寻址得到操作数后再进行偏移操作,得到最终的操作数。例如以下语句: MOV R0,R2,LSL #3 ;R0←R2 * 8,R2 的值左移3位,结果放入R0 MOV R0,R2,LSL R1 ;R2 的值左移R1 位,结果放入R0 移位操作 ASL:算术左移,和逻辑左移LSL相同 寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为地址,再通过这个地址去取得操作数。例如举例如下: LDR R0,[R1] ;R0←[R1],以寄存器R2的值作为操作数的地址,把取得操作数传送到R0中。 寄存器基址变址寻址 寄存器基址变址寻址又称为基址变址寻址,它是在寄存器间接寻址的基础上扩展来的。它将寄存器(该寄存器一般称作基址寄存器)中的值与指令中给出的地址偏移量相加,从而得到一个地址,通过这个地址取得操作数。例如以下语句: LDR R0,[R1,#4] ;R0←[R1+4],将寄存器R1的内容加上4形成操作数的地址,取得的操作数存入寄存器R0中。 多寄存器寻址 多寄存器寻址方式可以一次完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。例如以下语句: LDMIA R0,{R1,R2,R3,R4} ;R1←[R0],R2←[R0+4],R3←[R0+8],R4←[R0+12] 相对寻址 相对寻址也可以看成是一种特殊的基址寻址,特殊性是它把程序计数器PC中的当前值最为基地址,语句中的地址标号作为偏移量,将两者相加之后得到操作数的地址。例如以下语句: BL NEXT ;相对寻址,跳转到NEXT处执行 …… NEXT …… 堆栈寻址 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针(SP:Stack Pointer)的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 递增堆栈:向堆栈写入数据时,堆栈由低地址向高地址生生长 。 递减堆栈:向堆栈写入数据时,堆栈由高地址向低地址生生长 。 堆栈分类 同时,根据堆栈的堆栈指针(SP)指向的位置,又可以把堆栈分为满堆栈(Full Stack)和空堆栈(Empty Stack)两种类型 满堆栈(Full Stack):堆栈指针SP指向最后压入堆栈的数据。满堆栈在向堆栈存放数据时的操作是先移动SP指针,然后存放数据。在向堆栈取数据时,是先取数据,然后移动SP指针。这样的操作保证了SP一直指向有效的数据,由于SP一直指向一个有效的数据地址,满堆栈由此得名。 空堆栈(Empty Stack):堆栈指针SP指向下一个将要放入数据的空位置。空堆栈在向堆栈存放数据时的操作是先存放数据,然后移动SP指针;在向堆栈取数据时,是先移动SP指针,然后取数据;这样的操作保证了SP一直指向一个空地址(没有有效数据的地址)。由于SP一直指向没有有效数据的“空”地址,空堆栈由此得名。 堆栈分类 满递增堆栈(FA):满递增+递增堆栈。堆栈指针指向最后压入的数据,且由低地址向高地址生长。 满递减堆栈(FD):满递增+递减堆栈。堆栈指针指向最后压入的数据,且由高地址向低地址生长。 空递增堆栈(EA):空递增+递增堆栈。堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。 空递减堆栈(ED):空递增+递减堆栈

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档