我已经学会了如何使用80x86汇编程序,所以在逐位移位操作中,我遇到了SAL和SHL使用的问题。我的意思是代码行之间的区别如下:
MOV X, 0AAH
SAL X, 4
MOV X, 0AAH
SHL X, 4
什么时候应该使用SHL和使用SAL?它们有什么区别?
根据this,它们是相同的:
移位算术左(SAL)和移位逻辑左(SHL)指令执行相同的操作;它们将目标操作数中的位向左移动(朝向更重要的位位置)。对于每个移位计数,目标操作数的最高有效位被移入CF标志,最低有效位被清除(参见英特尔®64和IA-32架构软件开发人员手册中的图7-7,第1卷) )。
两者都可能只是为了完整性而包括在内,因为右移是有区别的。
除了英特尔和AMD希望弃用重复的SAL之外没有区别。
shl和sal是相同的。他们有相同的机器代码。 shr和sar不一样。他们有几乎相同的机器代码。(但不是) 检查this。
它们的工作方式相同,因为算术移位与向左移动(增加)时的按位移位相同。另一方面,如果设置符号位,则sr将与shr不同。
如果使用左方向,它们是相同的。
实际上两者都是一样的..!但是在使用数字乘法时使用SAL示例SAL:
Multiply AX by 8
MOV CL, 3
SAL AX, CL
两者都是同样的,并且有相同的机器代码
请看看这个:
http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate
当SHL / SHR执行无符号旋转时,SAL / SAR执行带符号的旋转。