如果我尝试将此C代码转换为汇编代码:
int16_t x, y;
x = y;
然后相应的汇编代码为:
LDRSH R0, y;
STRH R0, x;
如果我在LDRSH R0, y;
中没有LDRH R0, y;
而写S
或LDRH
,这有关系吗?由于在int16_t x, y
x和y都是有符号整数(16位)正确吗?
在将y加载到寄存器R0中时,您会使用LDRSH
或LDRH
吗?
答案 0 :(得分:2)
LDRH
和LDRSH
之间的唯一区别是关于目标的位31..16所做的事情:目标的每个位将与加载数据的位15具有相同的值。
这通常非常有用,因为如果16位数是负数,那么32位数也将是负数。
在您提供的非常简单的示例中,它不会更改任何内容,因为您只存储它,但如果您正在执行操作(添加,乘法等),它会产生影响,因为ARM处理器将使用32位或内部64位寄存器。