3

我有点不知道这两个操作有什么不同。所以我读到算术移位与逻辑移位基本相同,唯一的区别是它以某种方式保持最高位或有符号位。

因此,当我在 101110 上执行 LSL #2 并假设此二进制文件是无符号二进制文件时,结果将是:111000 并且进位位将在 CPSR 中设置,对吗?

当我对同一个号码执行 ASL #2 时,结果会是什么?它如何保持有符号位?上述二进制文件中的 ASR #2 怎么样?结果会是 101011 吗?

不幸的是,我只找到了关于算术移位的非常粗略的描述。提前致谢!

4

2 回答 2

4

我很难理解 LSR 和 ASR 之间的真正区别,但希望这张图片能帮助你理解它们。在 LSR( Logical Shift Right) 中,MSB( Most Significant Bit) 被 0 替换,其中在 ASR( Arithematic Shift Right) 中,MSB 与移位前的早期 MSB 相同。(左移类似)ASR 在计算双补码表示中的有符号值时很有用。

在此处输入图像描述

于 2016-11-20T08:28:00.507 回答
0

您的示例没有多大意义,因为您的数字只有 6 位,所以第 31 位始终是0.

ASL是 的同义词,您可以在ARM 官方文档或此ARM 参考站点LSL中查看移位操作行为。

于 2013-01-28T15:48:06.290 回答