嵌入式系统课件ARM微控制器基础与实战6.ppt

嵌入式系统课件ARM微控制器基础与实战6.ppt

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

2.3 ARM基本寻址方式 寻址方式是根据指令中给出的地址码字段来寻找真实操作数地址的方式。 ARM处理器支持的基本寻址方式有: 1.寄存器寻址 2.立即寻址 3.寄存器移位寻址 4.寄存器间接寻址 5.变址寻址 6.多寄存器寻址 7.堆栈寻址 8.块拷贝寻址 9.相对寻址 2.立即寻址 数据就包含在指令中,只要取出指令也就取出了可以立即使用的操作数。这样的数称为立即数。 例如指令: ADD R3,R3,#1 ;R3←R3 + 1 AND R8,R7,#0xff ;R8←R7[7 : 0] 以“#”为前缀表示一个立即数,十六进制值在“#”后加“0x”或“”表示。 第1条指令完成寄存器R3的内容加1,结果放回R3中。 第2条指令完成R7的32位值与0FFH相“与”,结果为将R7的低8位送到R8中,高24位清0。 3.寄存器移位寻址 第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。这种寻址方式是ARM指令集特有的。例如指令: ADD R3,R2,Rl,LSL#3 ;R3←R2+8×Rl 寄存器R1的内容逻辑左移3位( × 8),再与寄存器R2内容相加,结果放入R3中。 可以采取的移位操作如下: LSL 逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。 LSR 逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。 ASR 算术右移(Arithmetic Shift Right)。算术移位的对象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。 ROR 循环右移(Rotate Right)。从字的最低端移出的位填入字的高端空出的位。 RRX 扩展为1的循环右移(Rotate Right extended by 1 place)。操作数右移1位,空位用原C标志值填充。 4.寄存器间接寻址 指令中的地址码给出某一通用寄存器的编号。在被指定的寄存器中存放操作数的有效地址,而操作数则存放在存储单元中,即寄存器为地址指针。例如指令: LDR R0,[R1] ;R0←[Rl] STR R0,[R1] ;R0→[R1] 寄存器间接寻址使用一个寄存器(基址寄存器)的值作为存储器的地址。 第1条指令将寄存器R1指向的地址单元的内容加载到寄存器R0中。 第2条指令将寄存器R0存入寄存器Rl指向的地址单元。 5. 变址寻址 变址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。举例如下: LDR R2,[R3,#0x0C] ;读取R3 + 0x0C地址上的存储单元的内容,放人R2 STR R1,[R0,# - 4]! ;先R0 = R0 - 4,然后把R1的值保存到R0指定的存储单元 LDR R0,[R1],#4 ;读取R1 地址上的存储单元的内容,放人R0,然后把R1=R1 + 4 LDR R1,[R0,R3,LSL#1] ;将R0+R3×2地址上的存储单元的内容读出,存入R1 6. 多寄存器寻址 多寄存器寻址即是一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIA R1,{R2-R7,R12};将R1指向的单元中的数据读出到R2~R7、R12中。 STMIA R0,{R2-R7,R12};将寄存器R2~R7、R12的值保存到R0指向的存储单元中。 说明: 使用多寄存器寻址指令时,寄存器子集的顺序脚标应按由小到大的顺序排列,连续的寄存器可用“-”连接;否则用“,”分隔书写。 符号的含义: 7. 堆栈寻址 堆栈寻址是隐含的,它使用一个专门的间接寻址寄存器(堆栈指针R13)指向一块存储区域(堆栈)。指针所指向的存储单元即是堆栈的栈顶。 按照堆栈指针的变化方向存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈(Ascending Stack)。 向下生长:向低地址方向生长,称为递减堆栈(Descending Stack) 。 按照堆栈操作完成后堆栈指针的位置存储器堆栈也可分为两种: 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈(Full Stack); 堆栈指针指向下一个待压入数据的空位置,称为空堆栈(Empty Stack) 。 满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向含有效数据项的最高地址。指令如LDMFA、STMFA等。 空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等。 满递减:堆栈通过减小

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档