Programowanie w języku Assembler

Instrukcje procesorów rodziny 80x86 (L)

LAHFLoad Register AH From Flags
UżycieLAHF
Modyfikowane flagiBrak
Kopiuje bity 0-7 z rejestru znaczników do AH. Kopiowane flagi to AF, CF, PF, SF i ZF. Pozostałe bity są nieokreślone. AH := SF ZF xx AF xx PF xx CF
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Brak42231

LARLoad Access Rights (286+ protected)
UżycieLAR dest,src
Modyfikowane flagiZF
Ważniejszy bajt docelowego rejestru jest nadpisywany wartością bajtu praw dostępu, a mniej ważny bajt jest zerowany w zależności od zaznaczenia w src. ZF = 1 jeżeli operacja powiedzie się.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg16,reg16-1415113
reg32,reg32--15113
reg16,mem16-1616113-7
reg32,mem32--16113-7

LDSLoad Pointer Using DS
UżycieLDS dest,src
Modyfikowane flagiBrak
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego dest oraz rejestru segmentowego DS. Przesunięcie umieszczane jest w dest, a segment w DS. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg16,mem3216+EA7762-4
reg,mem (PM)--22125-7

LEALoad Effective Address
UżycieLEA dest,src
Modyfikowane flagiBrak
Przesyła przesunięcie z pod adresu src do rejestru docelowego
- instrukcja MOV może czasem szybciej działać, jeżeli używana jest na procesorach 8088 zamiast LEA.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Reg,mem2+EA3212-4

LEAVERestore Stack for Procedure Exit (80188+)
UżycieLEAVE
Modyfikowane flagiBrak
Zwalnia pamięć zarezerwowaną na stosie dla zmiennych lokalnych utwrzoną przez ostatnią instrukcję ENTER i przywraca wskaźniki SP i BP do ich stanu sprzed inicjalizacji stosu.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Brak-5451

LESLoad Pointer Using ES
UżycieLES dest,src
Modyfikowane flagiBrak
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego dest oraz rejestru segmentowego ES. Przesunięcie umieszczane jest w dest, a segment w ES. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Reg,mem16+EA7762-4 (W88=24+EA)
Reg,mem (PM)--22125-7

LFSLoad Pointer Using FS (386+)
UżycieLFS dest,src
Modyfikowane flagiBrak
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego dest oraz rejestru segmentowego FS. Przesunięcie umieszczane jest w dest, a segment w FS. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Reg,mem--765-7
Reg,mem (PM)--22125-7

LGDTLoad Global Descriptor Table (286+ privileged)
UżycieLGDT src
Modyfikowane flagiBrak
Ładuje wartość src do rejestru Global Descriptor Table (GDT).
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Mem64-1111115

LIDTLoad Interrupt Descriptor Table (286+ privileged)
UżycieLIDT src
Modyfikowane flagiBrak
Ładuje wartość z src do rejestru Interrupt Descriptor Table(IDT).
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Mem64-1211115

LGSLoad Pointer Using GS (386+)
UżycieLGS dest,src
Modyfikowane flagiBrak
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego dest oraz rejestru segmentowego GS. Przesunięcie umieszczane jest w dest, a segment w GS. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Reg,mem--765-7
Reg,mem (PM)--22125-7

LLDTLoad Local Descriptor Table (286+ privileged)
UżycieLLDT src
Modyfikowane flagiBrak
Ładuje wartość z src do Local Descriptor Table Register (LDTR).
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bytes
Reg16-1720113
Mem16-1924115

LMSWLoad Machine Status Word (286+ privileged)
UżycieLMSW src
Modyfikowane flagiBrak
Ładuje Machine Status Word (MSW) z src.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Reg16-310133
Mem16-613135

LOCKLock Bus
UżycieLOCK: (386+ prefix)
Modyfikowane flagiBrak
Ta instrukcja jest prefiksem, który powoduje, że CPU wstawia na szynę sygnał lock w trakcie wykonywania następnej instrukcji. Używane, aby zapobiec dwóm procesorom edycji tych samych danych. Procesory 286 zawsze wstawiają lock podczas operacji XCHG na pamięci. To powinno być używane wyłącznie przy blokowaniu szyny przy instrukcjach XCHG, MOV, IN i OUT.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Brak20011

LODSLoad String (Byte, Word or Double)
UżycieLODS src LODS LODS LODSD (386+)
Modyfikowane flagiBrak
Przesyła elementy łańcuchów spod adresu DS:SI (nawet jeżeli operand jest podany) do akumulatora (EAX, AX, AL). SI jest zwiększane zależnie od rozmiaru operandu lub użytej instrukcji. Jeżeli DF = 1, SI jest zmniejszane. Jeżeli DF = 0, SI jest zwiększane. Używaj z prefiksem REP.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
Src12/165551

LOOPDecrement CX and Loop if CX Not Zero
UżycieLOOP label
Modyfikowane flagiBrak
Zmniejsza CX o 1 i skacze do label jeżeli CX jest różne od zera. label musi zawierać się w przedziale <-128;127> bajtów względem instrukcji następującej po loop.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
label: jump188+m11+m62
no jump54?2 

LOOPE/LOOPZLoop While Equal / Loop While Zero
UżycieLOOPE label LOOPZ label
Modyfikowane flagiBrak
Zmniejsza CX o 1 (bez modyfikacji znaczników) i skacze do label jeżeli CX <> 0 i ZF = 1. label musi być z zakresu <-128;127> bajtów.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
label: jump188+m11+m92
no jump54?6 

LOOPNZ/LOOPNELoop While Not Zero / Loop While Not Equal
UżycieLOOPNZ label LOOPNE label
Modyfikowane flagiBrak
Zmniejsza CX o 1 (bez modyfikacji znaczników) i skacze do label jeżeli CX <> 0 i ZF = 0. label musi być z zakresu <-128;127> bajtów.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
label: jump198+m11+m92
no jump54?6 

LSLLoad Segment Limit (286+ protected)
UżycieLSL dest,src
Modyfikowane flagiZF
Laduje segment limit zaznaczenia do rejestru dest, jeżeli zaznaczenie jest poprawne i widoczne w aktualnym poziomie uprawnień. Jeżeli operacja powiedzie się to ZF = 1, w przeciwnym wypadku ZF = 0.
- 386 times are listed "byte granular" / "page granular"
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg16, reg16-1420/25103
reg32, reg32--20/25103
reg16, mem16-1621/26105
reg32, mem32--21/26105

LSSLoad Pointer Using SS (386+)
UżycieLSS dest,src
Modyfikowane flagiBrak
Ładuje 32-bitowy wskaźnik z pamięci do określonego rejestru ogólnego dest oraz rejestru segmentowego SS. Przesunięcie umieszczane jest w dest, a segment w SS. Aby używać tej instrukcji słowo pod mniej znaczącym adresem w pamięci musi zawierać przesunięcie, a pod bardziej znaczącym adresem segment. To ułatwia ładowanie wskaźników typu far ze stosu i tablicy przerwań.
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg,mem--765-7
reg,mem (PM)--22125-7

LTRLoad Task Register (286+ privileged)
UżycieLTR src
Modyfikowane flagiBrak
Ładuje aktualny rejestr task wartością src (wymaga odpowiednich uprawnień)
 Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg16-1723203
mem16-1927295


Autorzy:
Dryobates
LKS
Vogel
Wirek