webentwicklung-frage-antwort-db.com.de

Unterschied zwischen SHL und SAL in 80x86

Ich habe gelernt, mit dem 80x86-Assembler zu arbeiten, so dass ich im bitweisen Schichtbetrieb mit SAL und SHL ein Problem hatte. Ich meine den Unterschied zwischen den Codezeilen wie folgt:

MOV X, 0AAH
SAL X, 4

MOV X, 0AAH
SHL X, 4

Wann sollten wir SHL verwenden und wann verwenden Sie SAL? Was ist der Unterschied von ihnen?

24

Nach this sind sie gleich:

Die Anweisungen für die Verschiebung nach links (SAL) und die logische Verschiebung nach links (SHL) führen dieselbe Operation aus. Sie verschieben die Bits im Zieloperanden nach links (zu höherwertigen Bitpositionen). Für jede Verschiebungszahl wird das höchstwertige Bit des Zieloperanden in das CF-Flag verschoben und das niedrigstwertige Bit gelöscht (siehe Abbildung 7-7 im Handbuch für Softwareentwickler für Intel®64- und IA-32-Architekturen, Band 1) ).

Beide wurden wahrscheinlich nur der Vollständigkeit halber aufgenommen, da eine Unterscheidung für Rechtsverschiebungen gibt .

30
Mysticial

shl und sal sind gleich. Sie haben den gleichen Maschinencode.
shr und sar sind NICHT gleich.Sie haben fast denselben Maschinencode (aber nicht)
.__ Überprüfen Sie this

4
ARISTOS

Es gibt keinen Unterschied, außer dass Intel und AMD den doppelten SAL verwerfen möchten.

4
Alexey Frunze

Sie sind die gleichen, wenn Sie die linke Richtung verwenden.

1
That coworker

sie arbeiten gleich, da eine arithmetische Verschiebung gleich einer bitweisen Verschiebung ist, wenn sie nach links verläuft (zunimmt). sar hingegen unterscheidet sich von shr, wenn das Vorzeichenbit gesetzt ist.

1
jcomeau_ictx

Ich würde auch einen Blick auf die Tabelle in den Intel 64- und IA-32-Architekturen Software-Entwicklerhandbüchern Band 2 werfen "SAL/SAR/SHL/SHR— Shift "enthält eine Tabelle mit:

D0 /4             SHL r/m8, 1
REX + D0 /4       SHL r/m8**, 1
D2 /4             SHL r/m8, CL
REX + D2 /4       SHL r/m8**, CL
C0 /4 ib          SHL r/m8, imm8
REX + C0 /4 ib    SHL r/m8**, imm8
D1 /4             SHL r/m16,1
D3 /4             SHL r/m16, CL
C1 /4 ib          SHL r/m16, imm8
D1 /4             SHL r/m32,1
REX.W + D1 /4     SHL r/m64,1
D3 /4             SHL r/m32, CL
REX.W + D3 /4     SHL r/m64, CL
C1 /4 ib          SHL r/m32, imm8
REX.W + C1 /4 ib  SHL r/m64, imm8

D0 /4             SAL r/m8, 1
REX + D0 /4       SAL r/m8**, 1
D2 /4             SAL r/m8, CL
REX + D2 /4       SAL r/m8**, CL
C0 /4 ib          SAL r/m8, imm8
REX + C0 /4 ib    SAL r/m8**, imm8
D1 /4             SAL r/m16, 1
D3 /4             SAL r/m16, CL
C1 /4 ib          SAL r/m16, imm8
D1 /4             SAL r/m32, 1
REX.W + D1 /4     SAL r/m64, 1
D3 /4             SAL r/m32, CL
REX.W + D3 /4     SAL r/m64, CL
C1 /4 ib          SAL r/m32, imm8
REX.W + C1 /4 ib  SAL r/m64, imm8

Wenn wir beide Teile vergleichen, sehen wir, dass jede Operandenauswahl für SHL und SAL dieselbe Codierung hat, sodass sie identisch sind.

Mysticals Zitat folgt im selben Abschnitt und bestätigt es weiter.