Cortex-A8处理器的寻址方式

寻址方式为根据指令中给出的地址码字段寻找操作数地址的方式,cortex-A8有以下几种寻址方式

1、寄存器寻址

寄存器寻址是通过给出的寄存器编号得到所要的操作数,操作数是给出的寄存器的内容

举例:

MOV R1,R2(将R2的内容放到R1中)

SUB R0,R1,R2(R1的内容减去R2的内容放到R0中)


2、立即寻址

一种特殊的寻址方式,指令中在操作码字段后的地址码部分为操作数本身,这种数为立即数,注意立即数以“#”开头

举例:

SUBS R0,R0,#1(R0的内容减去1[1为立即数]后放到R0中)


3、寄存器移位寻址

·LSL:逻辑左移,寄存器的字的低端空出的位补0

·LSR:逻辑右移,寄存器的字的高端空出的位补0

·ASR:算术右移,操作对象为有符号数,移位时保证符号位不变,即操作正数时高位补0,操作负数时高位补1

·ROR:循环右移,低端移出的数填充到高位处

举例:

MOV R0,R2,LSL #3(R2的内容左移3位后[相当于R2内容乘8]放入R0)


4、寄存器间接寻址

指令中的地址码给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,而操作数则存放在该地址对应的存储单元中,类似于指针

举例:

LDR R1,[R2](将以R2内容为地址里所存放的数据装载到R1中)


5、变址寻址

变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,包括基址加偏移和基址加索引两种寻址。

举例:

①基址加偏移:LDR R2,[R3,#-2]:将R3的内容减2作为操作数的地址,将该地址对应的数据装载到R2

②基址加索引:LDR R0,[R3,R2]:将R3的内容加R2的内容作为地址,将地址对应的数据装载到R0中


6、多寄存器寻址

一次可以传送多个寄存器的值,允许一条指令传送16个寄存器(R0~R15)的任何子集

举例:

LDMIA R1!,{R2-R7,R12}:将R1所指的地址的数据读出到R2-R7、R12,R1的自动更新


7、堆栈寻址

堆栈是按特定的顺序进行存取的存储区,顺序为先进后出。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储器区域。堆栈指针所指定的存储单元就是堆栈的栈顶

(1)堆栈分为两种:向上生长型的(地址向高地址方向生长,递增堆栈)和向下生长型的(地址向地地址方向生长,递减堆栈)

(2)满堆栈和空堆栈

满堆栈:堆栈指针指向最后压入堆栈的有效数据项

空堆栈:堆栈指针指向下一个数据要放入的空位置

根据满堆栈和空堆栈,堆栈又可分为四种:

①满递增:堆栈为向上生长,堆栈指针指向最后压入堆栈的有效数据项,指令如LDMFA、STMFA

②满递减:堆栈为向下生长,堆栈指针指向最后压入堆栈的有效数据项,指令如LDMFD、STMFD

③空递增:堆栈为向上生长,堆栈指针指向下一个数据要放入的空位置,指令如LDMEA、STMEA

④空递减:堆栈为向下生长,堆栈指针指向下一个数据要放入的空位置,指令如LDMED、STMED

举例:

STMFD SP!,{R1-R7,LR}(将R1-R7、LR压入堆栈,满递减堆栈)


8、相对寻址

是变址寻址的变通,由程序计数器(PC)提供基址,指令中的地址码字段作为偏移量,两者相加后得到操作数的有效地址。偏移量指出的是操作数与当前指令之间的相对位置。子程序调用指令即是相对寻址指令

举例:

BL ROUTE1(调用ROUTE1子程序)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值