ARM指令集之Load/Store访存指令(二)

本文详细介绍了ARM指令集中Load/Store指令的使用,包括LDRH、STRH、LDRSB和LDRSH。重点讲解了它们的寻址方式和对齐要求,如半字对齐,并解释了LDRSB和LDRSH如何根据符号位填充生成32位数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这篇笔记记录了第二类Load/Store指令,即操作数为16位半字和有符号字节数据的Load/Store指令。

助记符说明
LDRH半字数据读取指令
STRH半字数据写入指令
LDRSB有符号字节数据读取指令
LDRSH有符号半字数据读取指令

寻址方式

这类指令拥有一致的寻址方式,具体介绍见这里

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

LDRH(半字数据读取指令)

LDR{<cond>}H <Rd>, <address_mode>

if CondPassed(cond) then
	if address[0] == 0 then
		data = Mem[address, 2]
	else
		data = 未知
	Rd = data

可见,该指令要求地址必须是半字对齐的。

STRH(半字数据写入指令)

STR{<cond>}H <Rd>, <address_mode>

if CondPassed(cond) then
	if address[0] == 0 then
		data = Rd[15:0]
	else
		data = 未知
	Mem[address, 2] = data

同样,该指令要求地址必须是半字对齐的。

LDRSB(有符号字节数据读取指令)

LDRSB从内存中读取一个字节数据保存在目标寄存器的低8位,然后按照符号位填充目标寄存器的高24位,如此生成最后的32位数。

LDR{cond}SB <Rd>, <address_mode>

if CondPassed(cond) then
	data = Mem[address, 1]
	Rd = SignExtend(data)

LDRSH(有符号半字数据读取指令)

LDRSH从内存中读取一个半字数据保存在目标寄存器的低16位,然后按照符号位填充目标寄存器的高16位,如此生成最后的32位数。

LDR{<cond>}SH <Rd>, <address_mode>

if CondPassed(cond) then
	if address[0] == 0 then
		data = Mem[address, 2]
	else
		data = 未知
	Rd = SignExtend(data)

同样,该指令要求地址必须是半字对齐的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值