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


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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值