Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有点不知道这两个操作有什么不同。所以我读到算术移位与逻辑移位基本相同,唯一的区别是它以某种方式保持最高位或有符号位。
因此,当我在 101110 上执行 LSL #2 并假设此二进制文件是无符号二进制文件时,结果将是:111000 并且进位位将在 CPSR 中设置,对吗?
当我对同一个号码执行 ASL #2 时,结果会是什么?它如何保持有符号位?上述二进制文件中的 ASR #2 怎么样?结果会是 101011 吗?
不幸的是,我只找到了关于算术移位的非常粗略的描述。提前致谢!
我很难理解 LSR 和 ASR 之间的真正区别,但希望这张图片能帮助你理解它们。在 LSR( Logical Shift Right) 中,MSB( Most Significant Bit) 被 0 替换,其中在 ASR( Arithematic Shift Right) 中,MSB 与移位前的早期 MSB 相同。(左移类似)ASR 在计算双补码表示中的有符号值时很有用。
Logical Shift Right
Most Significant Bit
Arithematic Shift Right
您的示例没有多大意义,因为您的数字只有 6 位,所以第 31 位始终是0.
0
ASL是 的同义词,您可以在ARM 官方文档或此ARM 参考站点LSL中查看移位操作行为。
ASL
LSL