IA-32 - IA-32
IA-32 (skrót od „ Intel Architecture, 32-bit ”, czasami nazywany również i386 ) to 32-bitowa wersja architektury zestawu instrukcji x86 , zaprojektowana przez firmę Intel i po raz pierwszy zaimplementowana w mikroprocesorze 80386 w 1985 roku. pierwsze wcielenie x86 obsługujące przetwarzanie 32-bitowe; w rezultacie termin „IA-32” może być używany jako metonim w odniesieniu do wszystkich wersji x86 obsługujących przetwarzanie 32-bitowe.
W ramach różnych dyrektyw języka programowania IA-32 jest nadal czasami określany jako architektura „i386”. W niektórych innych kontekstach, niektóre iteracje IA-32 ISA są czasami oznaczane i486, i586 i i686, odnosząc się do nadzbiorów instrukcji oferowanych odpowiednio przez mikroarchitektury 80486 , P5 i P6 . Aktualizacje te oferowały liczne dodatki obok podstawowego zestawu IA-32, tj. możliwości zmiennoprzecinkowe i rozszerzenia MMX .
Intel był historycznie największym producentem procesorów IA-32, a drugim największym dostawcą była firma AMD . W latach 90. VIA , Transmeta i inni producenci chipów również produkowali procesory kompatybilne z IA-32 (np. WinChip ). W erze nowożytnej Intel nadal produkuje procesory IA-32 na platformie mikrokontrolera Intel Quark ; jednak od 2000 roku większość producentów (w tym Intel) przeszła prawie wyłącznie do implementacji procesorów opartych na 64-bitowym wariancie x86, x86-64 . x86-64, zgodnie ze specyfikacją, oferuje starsze tryby pracy, które działają na IA-32 ISA, zapewniając kompatybilność wsteczną. Nawet biorąc pod uwagę współczesne rozpowszechnienie x86-64, od 2018 r. wersje w trybie chronionym IA-32 wielu nowoczesnych systemów operacyjnych są nadal utrzymywane, np. Microsoft Windows i dystrybucja Debian Linux . Pomimo nazwy IA-32 (i powodującej pewne zamieszanie), 64-bitowa ewolucja x86, która wywodzi się z AMD, nie byłaby znana jako „IA-64”, a nazwa ta należałaby do architektury Intel Itanium .
Cechy architektoniczne
Podstawową cechą definiującą IA-32 jest dostępność 32-bitowych rejestrów procesora ogólnego przeznaczenia (na przykład EAX i EBX), 32-bitowych operacji arytmetycznych i logicznych na liczbach całkowitych , 32-bitowych przesunięć w segmencie w trybie chronionym oraz tłumaczenie adresów segmentowanych na 32-bitowe adresy liniowe. Projektanci skorzystali również z możliwości wprowadzenia innych ulepszeń. Niektóre z najważniejszych zmian zostały opisane poniżej.
- 32-bitowa obsługa liczb całkowitych
- Wszystkie rejestry ogólnego przeznaczenia (GPR) są rozszerzone z 16 bitów do 32 bitów, a wszystkie operacje arytmetyczne i logiczne, operacje pamięć-rejestr, rejestr-pamięć itp. mogą działać bezpośrednio na 32-bitowych liczbach całkowitych. Wypycha i wyskakuje na stosie domyślnie do 4-bajtowych kroków, a niesegmentowane wskaźniki mają 4 bajty szerokości.
- Bardziej ogólne tryby adresowania
- Dowolny GPR może być użyty jako rejestr podstawowy, a dowolny GPR inny niż ESP może być użyty jako rejestr indeksowy w odwołaniu do pamięci. Wartość rejestru indeksowego można pomnożyć przez 1, 2, 4 lub 8 przed dodaniem do wartości rejestru bazowego i przesunięcia.
- Dodatkowe rejestry segmentowe
- Dostępne są dwa dodatkowe rejestry segmentowe, FS i GS.
- Większa wirtualna przestrzeń adresowa
- Architektura IA-32 definiuje 48-bitowy format adresu segmentowego z 16-bitowym numerem segmentu i 32-bitowym przesunięciem w obrębie segmentu. Adresy segmentowane są mapowane na 32-bitowe adresy liniowe.
- Żądaj stronicowania
- 32-bitowe adresy liniowe są adresami wirtualnymi, a nie fizycznymi; są tłumaczone na adresy fizyczne poprzez tablicę stron . W 80386, 80486 i oryginalnych procesorach Pentium adres fizyczny był 32 bity; w procesorach Pentium Pro i nowszych, rozszerzenie adresu fizycznego zezwalało na 36-bitowe adresy fizyczne, chociaż liniowy rozmiar adresu nadal wynosił 32 bity.
Tryby pracy
Tryb pracy | Wymagany system operacyjny | Rodzaj uruchamianego kodu | Domyślny rozmiar adresu | Domyślny rozmiar operandu | Typowa szerokość GPR |
---|---|---|---|---|---|
Tryb obronny | 32-bitowy system operacyjny lub program ładujący | 32-bitowy kod w trybie chronionym | 32 bity | 32 bity | 32 bity |
16-bitowy system operacyjny w trybie chronionym lub program ładujący lub 32-bitowy program ładujący | 16-bitowy kod w trybie chronionym | 16 bitów | 16 bitów | 16 lub 32 bity | |
Tryb wirtualny 8086 | 16- lub 32-bitowy system operacyjny w trybie chronionym | 16-bitowy kod w trybie rzeczywistym | 16 bitów | 16 bitów | 16 lub 32 bity |
Tryb rzeczywisty | 16-bitowy system operacyjny trybu rzeczywistego lub program ładujący lub 32-bitowy program ładujący | 16-bitowy kod w trybie rzeczywistym | 16 bitów | 16 bitów | 16 lub 32 bity |
Tryb nierzeczywisty | 16-bitowy system operacyjny trybu rzeczywistego lub program ładujący lub 32-bitowy program ładujący | 16-bitowy kod w trybie rzeczywistym | 32 bity | 16 bitów | 16 lub 32 bity |