ARM 汇编:算术移位/逻辑移位

3 assembly arm shift

我有点难以找出这两个操作的不同之处。所以我读到算术移位基本上与逻辑移位相同,唯一的区别是它以某种方式保留了最高位或有符号位。

因此,当我对 101110 执行 LSL #2 时(假设该二进制数是无符号二进制数),结果将是:111000 并且进位位将在 CPSR 中设置,对吧?

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

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

Bla*_*mba 5

我很难理解 LSR 和 ASR 之间的真正区别,但希望这张图片可以帮助您理解相同的内容。在 LSR( Logical Shift Right) 中,MSB( Most Significant Bit) 被 0 替换,而在 ASR( Arithematic Shift Right) 中,MSB 与移位之前的早期 MSB 相同。(与左移类似)ASR 在使用二补码表示形式的有符号值进行计算时很有用。

在此输入图像描述

  • 从我老师给我的一些书和 ppt 中,如果你有兴趣知道的话,我可以给你她的电话号码,但她已经 65 岁了。“我已经提到过如果有可能的话”@PeterCordes (3认同)