Rozdział 1.5.3.1
Rozkazy przesłania
- Zwykłe
- MOV - (Move) Przesłanie rejestr->rejestr, rejestr->pamięć lub
pamięć->rejestr, nie ustawia znaczników, zajmuje 1 takt (wyjątkowo przesłania do/z rejestrów sterujących CR0, CR2,
CR3, CR4 i rejestrów uruchomieniowych DR0-DR7 zajmują kilkanaście taktów).
- MOVSX/MOVZX - przesłanie danej do rejestru o większej długości z zachowaniem znaku /
z rozszerzeniem zerami, zajmuje 3 takty.
- XCHG - (Exchange) Wzajemna wymiana zawartości dwóch operandów: rejestr-rejestr lub
rejestr-pamięć, nie ustawia znaczników, zajmuje 2 lub 3 takty.
- CMPXCHNG - porównanie słów/dwusłów, jeśli równe to kopiuje argument źródłowy do docelowego,
jeśli różne to kopiuje argument docelowy do źródłowego ustawia ZF, zajmuje 6 taktów.
- CMPXCHNG8B - porównanie słów poczwórnych, jeśli równe to kopiuje argument źródłowy do
docelowego, jeśli różne to kopiuje argument docelowy do źródłowego ustawia ZF, zajmuje 6 taktów.
- SETA,SETAE,SETB,SETBE,SETC,SETE,SETG,SETGE,SETL,SETLE,SETNA,SETNAE,SETNB,SETNBE,SETNC,SETNE,
SETNG,SETNGE,SETNL,SETNLE,SETNO,SETNP,SETNS,SETNZ,SETO,SETP,SETPE,SETPO,SETS,SETZ - ustawianie bajta w
argumencie docelowym na 1 jeżeli spełniony jest warunek zależny od wartości znaczników, zajmuje 1 do 2 taktów
- Stosowe
- PUSH - dekrementacja wskaźnika stosu ESP o liczbę bajtów do odłożenia, odłożenie
argumentu na wierzchołek stosu, nie ustawia znaczników, zajmuje 1 takt.
- POP - przesłanie z wierzchołka stosu do argumentu rozkazu, inkrementacja wskaźnika
stosu ESP o liczbę zdjętych bajtów, zajmuje 1 takt w przypadku trybu rejestrowego, a 3 takty gdy argument w pamięci
lub rejestrze segmentowym.
- PUSHA - odpowiednia dekrementacja SP i odłożenie na stos zawartości 8 rejestrów
ogólnego przeznaczenia: AX, CX, DX, BX, SP (wartość przed dekrementacją), BP, SI, DI, nie ustawia znaczników, zajmuje
5 taktów.
- PUSHF/PUSHFI - odłożenie na stos zawartości rejestru FLAGS/EFLAGS, nie ustawia
znaczników, zajmuje kilka taktów.
- POPA - zdjęcie stosu zawartości 8 rejestrów (odłożonych przez PUSHA), zapisanie
w odpowiednich rejestrach i inkrementacja SP, nie ustawia znaczników, zajmuje 5 taktów.
- POPAD - zdjęcie stosu zawartości 8 rejestrów (odłożonych przez PUSHAD),
zapisanie w odpowiednich rejestrach i inkrementacja ESP, nie ustawia znaczników, zajmuje 5 taktów.
- POPF/POPFD - zdjęcie stosu słowa/dwusłowa i zapisanie go w rejestrze FLAGS/EFLAGS,
inkrementacja ESP, ustawia prawie wszystkie znaczniki, zajmuje kilka taktów.
- ENTER - rezerwacja na stosie ramki dla zmiennych lokalnych (używane przez kompilatory
np. C, Pascala), zajmuje 11 i więcej taktów zależnie od rozmiaru ramki.
- LEAVE - zwolnienie ramki na stosie, zajmuje 3 takty.
- Specjalne
- SAHF - zapamiętanie zawartości rejestru AH w rejestrze FLAGS, ustawia flagi SF,
ZF, AF, CF, zajmuje 2 takty.
- LDS,LES,LFS,LGS,LSS - ładowanie adresów dalekich 48 bitowych (segment:przemieszczenie)
z pamięci do odpowiednich rejestrów DS,ES,FS,GS,SS, nie ustawiają znaczników, zajmują 4 takty.
- LEA - określa przemieszczenie adresu argumentu źródłowego i zapisuje w argumencie
docelowym, zajmuje 1 takt.
- ARPL - zmiana pola RPL selektora.
- LGDT/LIDT - ładowanie rejestru globalnej tablicy deskryptorów / tablicy deskryptorów
przerwań, zajmuje 6 taktów .
- LLDT/SLDT - ładowanie / zapisanie w pamięci rejestru lokalnej tablicy deskryptorów,
zajmuje 9 taktów / 2 takty.
- SGDT/SIDT - przesłanie zawartości rejestru globalnej tablicy deskryptorów /
tablicy deskryptorów przerwań IDTR (6 bajtów) do pamięci pod adres podany w argumencie.
- LMSW - załadowanie słowa stanu maszyny w rejestrze CR0, zajmuje 8 taktów.
- LSL - ładuje rozmiar podanego segementu do rejestru, ustawia ZF, zajmuje 8 taktów.
- LTR - ładuje argument źródłowy do rejestru zadania, zajmuje 10 taktów.
- STR - zapisanie w pamięci rejestru zadania TR.
- CPUID - identyfikacja jednostki centralnej (CPU), opis zapisany w EAX, zajmuje 14 taktów.
- RDMSR/WRMSR - odczyt / zapis 64 bitowego rejestru MSR (ang. Model Specific Register)
do / z EDX|EAX, rozkaz służy do monitoringu i zajmuje od 20 do 24 / 30 do 45 taktów.
- RDTSC - odczyt z 64 bitowego licznika etykiety czasowej (ang. Time Stamp Counter)
inkrementowanego po każdym takcie zegara do EDX|EAX.
Powrót do rozdziału 1
Powrót do strony głównej