我有点发现以这两种操作不同的方式发现了。所以我读到算术移位与Logical基本相同,只有差别,它以某种方式保持最高或有符号位。
所以当我在101110上做LSL#2时假设这个二进制文件是无符号的,结果将是:111000并且进位位将在CPSR中设置,对吗?
当我在相同的数字上执行ASL#2时,结果会是什么以及它如何保留有符号位?在上面的二进制文件中ASR#2怎么样?结果会是101011吗?
不幸的是,我只发现了关于算术转换的非常粗略的描述。提前谢谢!
答案 0 :(得分:3)
我很难理解LSR和ASR之间的真正区别,但希望这张图片可以帮助您理解相同的内容。
在LSR(Logical Shift Right
)中,MSB(Most Significant Bit
)被替换为0,其中In ASR(Arithematic Shift Right
)MSB与移位前的MSB相同。(左移类似)
ASR在以双补码表示的有符号值的计算中很有用。
答案 1 :(得分:0)
您的示例没有多大意义,因为您的数字仅为6位,因此第31位始终为0
。
ASL
是LSL
的同义词,您可以在official ARM documentation或此ARM reference site中查看轮班操作行为。