IA-32 (Intel Architecture 32 bit) – 32-bitowy model programowy mikroprocesora opracowany przez firmę Intel. Nazywany również x86-32, jako że opiera się na 32-bitowym rozwinięciu modelu programowego rodziny x86. Architektura IA-32 zaliczana jest z reguły do kategorii CISC, choć technologie wprowadzane stopniowo w nowszych wersjach procesorów IA-32 spełniają także wiele cech procesorów RISC.

Model IA-32 został wprowadzony w 1985 roku, wraz z procesorem Intel 80386 i jest najpopularniejszym modelem architektury stosowanym w komputerach ogólnego przeznaczenia (tzn. komputerach osobistych, serwerach). Stopniowo jest wypierany przez model 64-bitowy AMD64, Intel 64 (EM64T), czyli tzw. x86-64.

Tryby pracy

Procesory IA-32 posiadają trzy podstawowe tryby pracy, określające m.in. sposób zarządzania pamięcią i uprawnienia użytkownika.

Rejestry

Podstawowe rejestry w architekturze IA-32

Rejestry ogólnego przeznaczenia

W procesorach opartych na modelu IA-32 dostępne jest osiem 32-bitowych rejestrów ogólnego przeznaczenia:

Z rejestrów ogólnego przeznaczenia można korzystać także jako rejestrów 16-bitowych (wykorzystywane jest wtedy młodsze 16 bitów rejestru 32-bitowego). Rejestry takie oznacza się z pominięciem litery E na początku symbolu. Dodatkowo, w przypadku rejestrów danych (EAX-EDX) można się odwoływać do ich 8-bitowych części – najmłodsze 8 bitów rejestru AX oznaczane jest przez AL, kolejne 8 przez AH. Odpowiednio najmłodsze bity rejestru BX oznacza się przez BL itd.

Rejestry koprocesora

Koprocesor arytmetyczny w procesorach IA-32 zrealizowany jest w architekturze stosowej, tzn. dane tworzą stos. Położenie danych w koprocesorze określa się przez „odległość” od wierzchołka stosu, a nie konkretny symbol rejestru. Stos koprocesora tworzy 8 rejestrów 80-bitowych. Wierzchołek stosu oznacza się symbolem ST lub ST(0), kolejne rejestry w głąb stosu odpowiednio ST(1), ST(2), aż do ST(7). Rejestry stosu koprocesora mogą przechowywać liczby w formacie zmiennoprzecinkowym zgodnym z normą IEEE 754, o rozmiarze 32, 64 lub 80 bitów.

Ponadto w koprocesorze znajdują się 16-bitowe rejestry dodatkowe:

Rejestry segmentowe

W procesorach IA-32 zdefiniowano sześć 16-bitowych rejestrów segmentowych, służących albo do bezpośredniego określania adresu fizycznego w trybach stosujących segmentację pamięci, bądź jako selektory w trybie chronionym procesora. Rejestry te to:

Rejestry specjalnego przeznaczenia

W procesorach IA-32 występuje również szereg innych rejestrów. Są to m.in.:

Wykonywanie programów

Zestaw instrukcji

Procesory IA-32 posiadają rozbudowany zestaw instrukcji, liczący kilkaset instrukcji. Liczba instrukcji rosła wraz z wprowadzaniem kolejnych technologii rozwijających model IA-32, jak MMX, SSE, 3DNow! itd. Cechą zestawu instrukcji IA-32, charakterystyczną dla architektur CISC jest fakt, że wiele ze złożonych instrukcji można zastąpić instrukcjami prostszymi, np. pętlę zrealizować można dokonując porównań i skoków warunkowych lub za pomocą specjalizowanej instrukcji pętli LOOP.

Instrukcje podzielić można na grupy:

Instrukcje identyfikowane są przez procesor na podstawie binarnego kodu maszynowego. Dla wygody programistów opisano je jednak mnemonikami, ułatwiającymi programowanie na poziomie asemblera.

Kodowanie instrukcji

Kodowaniem instrukcji zajmuje się kompilator lub asembler podczas kompilacji programu. Wynikowy kod maszynowy musi być zgodny z zasadami kodowania instrukcji IA-32. Rozkazy koduje się w postaci ciągów zero-jedynkowych. W architekturze IA-32 rozkazy są zmiennej długości, od 1 do nawet kilkunastu bajtów, w zależności od rodzaju rozkazu i typu argumentów.

Kod instrukcji zawiera identyfikator rozkazu oraz – jeśli posiada argumenty – położenie ich w pamięci lub ich wartości. W modelu IA-32, w celu ograniczenia długości rozkazu, w przypadku większości rozkazów przyjęto, że docelowe miejsce zapisu wyniku określone jest przez pierwszy z operandów oraz że tylko jeden z argumentów danej instrukcji może odwoływać się do pamięci.

Schemat kodu każdego rozkazu można podzielić na następujące części:

Dodatkowe 3 bity kodu operacji znajdować się mogą także zamiast pola reg w bajcie ModR/M.

Kod prostych instrukcji bez argumentów zajmuje z reguły 1 bajt, a np. skomplikowane operacje przesyłania danych do pamięci mogą zajmować 9 bajtów.

Cykl rozkazowy

Procesor wykonuje instrukcje programu po kolei, zgodnie z ustalonym schematem, zwanym cyklem rozkazowym. Na cykl rozkazowy składa się kolejno:

Współczesne procesory IA-32 stosują przetwarzanie potokowe, czyli technologię polegającą na jednoczesnym wykonywaniu kolejnych etapów cyklu dla sąsiednich rozkazów przez różne bloki funkcjonalne.

Producenci procesorów

W ciągu ponad 25 lat istnienia i rozwoju architektury IA-32, powstało bardzo dużo procesorów opartych i implementujących ją. Wśród największych producentów takich procesorów warto wymienić: Intel, AMD, VIA, Cyrix, Centaur Technology, Transmeta, IBM, NexGen, NEC, UMC, SiS, ALi, nVidia. Część z tych firm produkowała lub projektowała procesory z architekturą IA-32 tylko przez pewien okres, część również przestała istnieć lub została wykupiona przez innych producentów.

Zobacz też

Linki zewnętrzne