Difference between SHL and SAL in 80x86

2019-01-25 03:06发布

问题:

I have learned how to work with 80x86 assembler, so in bit-wise shift operation, I faced a problem with SAL and SHL usage. I means the difference between lines of code as follow :

MOV X, 0AAH
SAL X, 4

MOV X, 0AAH
SHL X, 4

When we should use SHL and when use SAL? What is the difference of them?

回答1:

According to this, they are the same:

The shift arithmetic left (SAL) and shift logical left (SHL) instructions perform the same operation; they shift the bits in the destination operand to the left (toward more significant bit locations). For each shift count, the most significant bit of the destination operand is shifted into the CF flag, and the least significant bit is cleared (see Figure 7-7 in the Intel®64 and IA-32 Architectures Software Developer'sManual, Volume 1).

Both were probably included just for completeness since there is a distinction for right-shifts.



回答2:

There's no difference apart from Intel and AMD wanting to deprecate the duplicate SAL.



回答3:

shl and sal are the same.They have same machine code.
shr and sar are NOT the same.They have almost same machine code.(but not)
Check this.



回答4:

they work the same, since an arithmetic shift is the same as a bitwise shift when it's to the left (increasing). sar, on the other hand, will be different from shr if the sign bit is set.



回答5:

They are the same if you use the left direction.



回答6:

actually both are same ..! but SAL Used when numeric multiplication is intended EXAMPLE SAL:

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

BOTH ARE MOSTLY WORK SAME AND HAVE SAME MACHINE CODE



回答7:

Please take a look at this:

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

While SHL/SHR do an unsigned rotation, SAL/SAR do a signed rotation.