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

Zobacz też

Bibliografia