当前位置:网站首页>ARM指令集之Load/Store指令寻址方式(二)

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

2022-06-12 11:37:00 fanxiaoyu321

这篇笔记记录了第二类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
原网站

版权声明
本文为[fanxiaoyu321]所创,转载请带上原文链接,感谢
https://blog.csdn.net/fanxiaoyu321/article/details/111243308