装配加载和存储16位(半字)

时间:2016-05-07 18:50:04

标签: assembly arm

如果我尝试将此C代码转换为汇编代码:

int16_t x, y;
x = y;

然后相应的汇编代码为:

LDRSH R0, y;
STRH R0, x;

如果我在LDRSH R0, y;中没有LDRH R0, y;而写SLDRH,这有关系吗?由于在int16_t x, y x和y都是有符号整数(16位)正确吗?

在将y加载到寄存器R0中时,您会使用LDRSHLDRH吗?

1 个答案:

答案 0 :(得分:2)

LDRHLDRSH之间的唯一区别是关于目标的位31..16所做的事情:目标的每个位将与加载数据的位15具有相同的值。

这通常非常有用,因为如果16位数是负数,那么32位数也将是负数。

在您提供的非常简单的示例中,它不会更改任何内容,因为您只存储它,但如果您正在执行操作(添加,乘法等),它会产生影响,因为ARM处理器将使用32位或内部64位寄存器。