我有点难以找出这两个操作的不同之处。所以我读到算术移位基本上与逻辑移位相同,唯一的区别是它以某种方式保留了最高位或有符号位。
因此,当我对 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 在使用二补码表示形式的有符号值进行计算时很有用。