SHL和SAL之间的差异在80x86

问题描述 投票:24回答:7

我已经学会了如何使用80x86汇编程序,所以在逐位移位操作中,我遇到了SAL和SHL使用的问题。我的意思是代码行之间的区别如下:

MOV X, 0AAH
SAL X, 4

MOV X, 0AAH
SHL X, 4

什么时候应该使用SHL和使用SAL?它们有什么区别?

assembly x86-16 bit-shift
7个回答
30
投票

根据this,它们是相同的:

移位算术左(SAL)和移位逻辑左(SHL)指令执行相同的操作;它们将目标操作数中的位向左移动(朝向更重要的位位置)。对于每个移位计数,目标操作数的最高有效位被移入CF标志,最低有效位被清除(参见英特尔®64和IA-32架构软件开发人员手册中的图7-7,第1卷) )。

两者都可能只是为了完整性而包括在内,因为右移是有区别的。


4
投票

除了英特尔和AMD希望弃用重复的SAL之外没有区别。


4
投票

shl和sal是相同的。他们有相同的机器代码。 shr和sar不一样。他们有几乎相同的机器代码。(但不是) 检查this


1
投票

它们的工作方式相同,因为算术移位与向左移动(增加)时的按位移位相同。另一方面,如果设置符号位,则sr将与shr不同。


1
投票

如果使用左方向,它们是相同的。


-1
投票

实际上两者都是一样的..!但是在使用数字乘法时使用SAL示例SAL:

Multiply AX by 8
MOV CL, 3
SAL AX, CL

两者都是同样的,并且有相同的机器代码


-2
投票

请看看这个:

http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate

当SHL / SHR执行无符号旋转时,SAL / SAR执行带符号的旋转。

© www.soinside.com 2019 - 2024. All rights reserved.