2015-03-28 9 views
5

Czytałem, że krótkie skoki mają być używane, gdy skok względny jest mniejszy niż 124 w adresie, a skoki w dal powinny być używane w inny sposób.Różnica między długim i krótkim skokiem (x86)

Jaka jest różnica w zakresie operacji wykonywanych w procesorze/wydajności pomiędzy dwoma typami skoków na x86?

+0

Jakiego zestawu instrukcji mówisz? –

+1

Zestaw instrukcji x86 – nadavge

+0

Nie można znaleźć żadnej dokumentacji dotyczącej poszczególnych instrukcji tego * wyjątkowo * dobrze udokumentowanego procesora? – usr2564301

Odpowiedz

6

Istnieją faktycznie trzy typy instrukcji: JMP; krótki, bliski i daleki (długi).

Krótki JMP jest względnym JMP, którego dotyczy. Jest zakodowany jako dwa bajty; rzeczywiste JMP i liczba bajtów +/- w stosunku do bieżącego IP.

Skok w pobliżu pozwala przeskoczyć w bieżącym "segmencie" (używając terminów trybu rzeczywistego) lub w obrębie aktualnie wybranego obszaru pamięci w selektorze CS.

Długi lub Far JMP dodatkowo zawiera selektor (lub segment w trybie rzeczywistym)

Można spojrzeć na czasy dla siebie. Największa różnica związana z czasem wynika z różnej liczby bajtów, które należy odczytać w celu uzyskania wartości JMP.

+0

Co to za selektor i jak ten selektor przychodzi w praktyce? Według mojego zrozumienia w skoku w dal po prostu podam adres: – nadavge

+0

Adres składa się z selektora i przesunięcia. Tak jak w CS: 1234. CS służy do definiowania selektora poza GDT lub LDT w trybie chronionym. Zwykle jest to coś bardzo małego, zwłaszcza w porównaniu z pamięcią segmentową w trybie rzeczywistym, ponieważ po prostu wybiera pozycję poza tabelą, a nie definiuje rzeczywisty adres pamięci. Adres pamięci jest zdefiniowany w GDT/LDT. –

+0

Powinienem dodać, że wygląda tak samo niezależnie od tego, czy jesteś w trybie rzeczywistym, czy chronionym ... to rzeczywiste wartości różnią się pod maską i praca, która jest wykonywana z góry, aby skonfigurować GDT (co nie jest potrzebne w trybie rzeczywistym, ponieważ używasz pamięci segmentowej) –

Powiązane problemy