2011-12-04 15 views
17

Nauczyłem się, jak pracować z asemblerem 80x86, więc w bitowej operacji zmianowej napotkałem problem z użyciem SAL i SHL. Mam na myśli różnicę między liniami kodu w następujący sposób:Różnica między SHL i SAL w 80x86

MOV X, 0AAH 
SAL X, 4 

MOV X, 0AAH 
SHL X, 4 

Kiedy należy używać SHL i kiedy używać SAL? Jaka jest różnica?

Odpowiedz

24

Według this są takie same:

arytmetyczna przesunięcie w lewo (DAB) i przesunięcie bitowe w lewo (SHL) instrukcje wykonywania tej samej operacji; przesuwają bity w argumencie docelowym w lewo (w kierunku bardziej znaczących lokalizacji bitowych ). Dla każdej liczby zmian najważniejszy bit argumentu docelowego jest przesuwany do flagi CF, a najmniej znaczący bit o wartości jest czyszczony (patrz Rysunek 7-7 w podręczniku Intel®64 i IA-32 Architectures Software Developer's Manual , Tom 1).

Obaj prawdopodobnie włączone tylko dla kompletności ponieważ jest wyróżnienie dla prawo-zmianowym.

+0

dzięki za wyjaśnienie tej koncepcji. Przez cały czas miałem błędną koncepcję, że SAL przesuwa bity o jedną pozycję w lewo, ale zamiast usuwać lsb, utrzymuje niezmieniony bit lsb. – Abrar

+0

SAL i SHL mają ten sam opcode, to tylko mnemoniczny synonim typu 'jne' vs.' jnz'. Więc nie ma możliwości, aby procesor mógł nawet wiedzieć, który z nich napisałeś; muszą zachowywać się tak samo. –

4

Nie ma żadnej różnicy oprócz Intel i AMD, które chcą zdezaktualizować duplikat SAL.

1

działają tak samo, ponieważ przesunięcie arytmetyczne jest takie samo jak przesunięcie bitowe, gdy jest po lewej stronie (zwiększenie). sar, z drugiej strony, będzie różnił się od shr, jeśli bit znaku jest ustawiony.

1

Są takie same, jeśli używasz lewego kierunku.

-1

właściwie oba są takie same ..! ale SAL Używane przy mnożenie numeryczna jest przeznaczony PRZYKŁAD SAL:

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

oba są pracują głównie same i mają ten sam kod maszyna

2

SHL i Sal są same.They mają ten sam kod maszynowy .
SHR i SAR NIE same.They mieć prawie sam kod maszynowy. (Ale nie)
Sprawdź this.