4050 00080000
| RD
W celu przełączenia zadań używamy instrukcji skoku długiego (pozasegmentowego). Należy zaznaczyć, że w trybie wirtualnym skoki tzw. krótkie wykonywane są identycznie jak dla trybu rzeczywistego - za kodem operacyjnym podawane jest tylko przesunięcie (skoki warunkowe są wyłącznie krótkie). Jedyną różnicą jest tylko rozmiar przesunięcia dla obu formatów krótkich skoków: w trybie rzeczywistym są to liczby 8 i 16-bitowe, a dla trybu wirtualnego 8 i 32-bitowe. (w kodzie uzupełnień do dwóch, przesunięcie może być dodatnie lub ujemne względem bieżącej wartości w liczniku programu).
W trybie wirtualnym skok długi (wyłącznie bezwarunkowy) zawiera wprawdzie nowe wartości dla IP i CS (podobnie jak dla trybu rzeczywistego), lecz inna jest interpretacja zawartości rejestru CS. Zawiera on teraz selektor, który wskazuje w tym przypadku deskryptor systemowy segmentu stanu zadania (tu TSSlj. Podaje on gdzie w pamięci znajduje się obszar skąd pp załaduje (w ustalonym porządku) swoje rejestry przechodząc do realizacji nowego zadania (obszary z wartościami początkowymi rejestrów up dla zadń trybu wirtualnego zostały załadowane w trybie rzeczywistym).
Należy zwrócić uwagę, że za kodem operacyjnym skoku długiego (EA) znajdują się tytko 2 bajty offsetu (przesunięcia), a nie cztery (EIP ma 32-bity), bo nie nastąpiło jeszcze przełączenie na zadanie trybu wirtualnego. Ponieważ selektor zawarty na dwóch następnych bajtach (00 08) wskazuje na deskryptor systemowy TSS (zadania pierwszego) przesunięcie jest przez pp pomijane. Zostanie ono odczytane (EIP) wprost z odpowiedniej lokacji obszaru TSS i.
Deskryptor TSS zawiera adres bazowy i wielkość. Nie odnoszą się one oczywiście do segmentu kodu, stosu czy danych, lecz wskazują obszar skąd pp załaduje (selektorami) swoje rejestry segmentowe (kodu, stosu i danych), a do rejestrów EBP i ESP wprowadzi przesunięcia (bez znaku). Określą one z jakiego miejsca segmentu kodu pp rozpocznie pracę po przełączeniu zadań i od którego miejsca w segmencie stosu będzie on rozbudowywany.
Przed zadanymi operacjami przełączenia zadań pp musi odczytać deskryptory zadania zawieszanego (wskazywany przez selektor w rejestrze TR) i wznawianego (wskazywany przez selektor w rozkazie długiego skoku) aby znać położenie obu segmentów stanu zadania. Deskryptory TSS umieszcza się w globalnej tablicy deskryptorów, a numer w selektorze wskazuje na właściwe 8-bajtowe pole w GDT (początkowy adres w tablicy zawarty jest w GDTR). Wszystkie operacje na deskryptorach blokują możliwość zwolnienia magistrali (aktywna linia LOCK).
LOCK RD 00000 C94 0000E900
LOCK RD C90 93000100
Odczytywany deskryptor zadania bieżcego (TSS0) wskazuje:
- adres bazowy 9300
-wielkość 100
-atrybuty E9: 1 11 0 1001 S=1 -deskryptor systemowy
P DPL S dostępny TSS