刘帅嵌入式系统-LDRSH有符号的半字数据读取指令

刘帅嵌入式系统-LDRSH有符号的半字数据读取指令_第1张图片

LDRSH指令用于从内存中将一个16位的半字数据读取到指令中的目标寄存器中。并将寄存器的高12位设置成该半字数据的符号位的值(即将该16位半字数据进行符号位扩展,生成32位字数据)。

如果指令中的内存地址不是半字对齐的,指令会产生不可预期的结果。

指令的编码格式

在这里插入图片描述

指令的语法格式

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

其中:

  • < cond >为指令执行的条件码。当< cond >忽略时,指令为无条件执行。
  • < Rd >为目标寄存器。
  • < post_indexed_addressing_mode >为指令的寻址方式。

指令操作的伪代码

if ConditionPassed(cond) then
	if address[0] == 0
        data = Memory[address,1]
    else /* address[0] == 1 */
    	data = UNPREDICTABLE
		Rd = SignExtend(data)

指令的使用

LDRSH指令通常的用法有以下两种:

  • 用于从内存中读取16位有符号半字数据到通用寄存器中,然后可在该寄存器中对数据进行一定的操作。
  • 当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能。

示例

LDRSH R0, [R1, #3]		;将内存单元R1+3中的有符号的半字数据读取到R0中,R0中高16位设置成该字节数据的符号位
LDRSH R7, [R6, #2]!		;将内存单元R6+2中的有符号的半字数据读取到R7中,R0中高16位设置成该半字数据的符号位,R6 = R6 + 2

你可能感兴趣的:(ASM,ARM)