ARM指令集之Load/Store指令寻址方式(二)

本文详细介绍了ARM指令集中Load/Store指令的六种寻址方式,包括立即数偏移量、寄存器偏移量、立即数事先更新、寄存器事先更新、立即数事后更新及寄存器事后更新寻址。涵盖了半字、有符号字节、双字等多种数据类型的Load/Store操作。
摘要由CSDN通过智能技术生成

这篇笔记记录了第二类Load/Store指令的寻址方式,这类指令是指1)操作数为半字(包括有符号和无符号)的Load/Store指令;2)有符号字节数据的Load/Store指令;3)双字的Load/Store指令。

上述指令的语法格式如下:

LDR|STR{<cond>}H|SH|SB|D  <Rd>, <address_mode>

这些指令有如下寻址方式:

语法说明
1[<Rn>, #+/-<offset_8>]立即数偏移量寻址
2[<Rn>, +/-<Rm>]寄存器偏移量寻址
3[<Rn>, #+/-<offset_8>]!立即数事先更新寻址
4[<Rn>, #+/-<Rm>]!寄存器事先更新寻址
5[<Rn>], #+/-<offset_8>立即数事后更新寻址
6[<Rn>], +/-寄存器事后更新寻址

立即数偏移量寻址

[<Rn>, #+/-<offset_8>]

# 8位立即数是按照高4位和低4位分开编码的
offset_8 = (immedH << 4) | immedL
if U == 1 then
	address = Rn + offset_8
else
	address = Rn - offset_8

寄存器偏移量寻址

[<Rn>, +/-<Rm>] 

if U == 1 then
	address = Rn + Rm
else
	address = Rn - Rm

立即数事先更新寻址

[<Rn>, #+/-<offset_8>]!

offset_8 = (immedH << 4) | immedL
if U == 1 then
   address = Rn + offset_8
else
   address = Rn - offset_8
if CondPassed then
   Rn = address

寄存器事先更新寻址

[<Rn>, #+/-<Rm>]!

if U == 1 then
	address = Rn + Rm
else
	address = Rn - Rm
if CondPassed then
	Rn = address

立即数事后更新寻址

[<Rn>], #+/-<offset_8>

address = Rn
offset_8 = (immedH << 4) | immedL
if CondPassed then
	if U == 1 then
		Rn = Rn + offset_8
	else
		Rn = Rn - offset_8

寄存器事后更新寻址

[<Rn>], +/-<Rm>

address = Rn
if CondPassed then
	if U == 1 then
		Rn = Rn + Rm
	else
		Rn = Rn - Rm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值