LDRH指令用于从内存中将一个16位的半字节数据读取到指令中的目标寄存器中。并将寄存器的高16位清零。如果指令中的内存地址不是半字对齐的,指令会产生不可预知的结果。
指令的编码格式
指令的语法格式
LDR{< cond >}H < Rd >, < post_indexed_addressing_mode >
其中:
< cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行。< Rd >为目标寄存器。< post_indexed_addressing_mode >为指令的寻址方式。
指令操作的伪代码
if ConditionPassed(cond
) then
if address
[0] == 0
data
= Memory
[address
,2]
else
data
= UNPREDICTABLE
Rd
= data
指令的使用
LDRH指令通常的用法有以下两种:
用于从内存中读取16位半字数据到通用寄存器中,然后可在该寄存器中对数据进行一定的操作。当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。
示例
LDRH R0, [R1] ;将内存单元R1中的半字数据读取到R0中,R0中高16位设置成0
LDRH R0, [R1,#2] ;将内存单元R1+2中的半字数据读取到R0中,R0中高16位设置成0
LDRH R0, [R1,R2] ;将内存单元R1+R2中的半字数据读取到R0中,R0中高16位设置成0
LDRH R0, [R1],#2 ;将内存单元R1中的半字数据读取到R0中,R0中高16位设置成0,R1=R1+2