Wprowadzenie do architektury IA-32
IA-32, znana również jako Intel Architecture 32-bit, to 32-bitowy model programowy mikroprocesora opracowany przez firmę Intel. Architektura ta, często określana jako x86-32, jest rozwinięciem modelu programowego rodziny x86, którego początki sięgają lat 80. XX wieku. IA-32 została wprowadzona na rynek w 1985 roku wraz z procesorem Intel 80386 i od tego czasu stała się jednym z najpopularniejszych modeli architektury stosowanych w komputerach osobistych oraz serwerach. Choć w ostatnich latach architektura ta ustępuje miejsca modelom 64-bitowym, takim jak AMD64 i Intel 64 (EM64T), nadal pozostaje ważnym elementem historii informatyki.
Tryby pracy procesorów IA-32
Procesory IA-32 obsługują kilka trybów pracy, które definiują sposób zarządzania pamięcią oraz uprawnienia użytkowników. Podstawowe tryby to:
Tryb rzeczywisty
Tryb rzeczywisty jest zgodny z najstarszymi procesorami rodziny x86, począwszy od Intel 8086. W tym trybie pamięć jest podzielona na segmenty o stałej wielkości wynoszącej 64 KB, a przestrzeń adresowa ogranicza się do 1 MB. Adresowanie odbywa się za pomocą rejestrów segmentowych oraz offsetów. Współczesne procesory działają w tym trybie jedynie do momentu uruchomienia systemu operacyjnego.
Tryb chroniony
W trybie chronionym, który jest kontrolowany przez system operacyjny, pamięć może być organizowana w segmenty dowolnej wielkości. Przestrzeń adresowa w tym trybie wynosi zazwyczaj do 64 GB, a liniowa przestrzeń adresowa do 4 GB. System operacyjny może korzystać zarówno z modelu płaskiego, jak i z segmentacji podobnej do tej w trybie rzeczywistym. Tryb ten umożliwia także obsługę wielozadaniowości oraz ochronę przed nieautoryzowanym dostępem do urządzeń wejścia/wyjścia.
Tryb wirtualny V86
Tryb wirtualny V86 jest variantą trybu chronionego, symulującą tryb rzeczywisty. Pozwala na uruchamianie programów napisanych dla MS-DOS w środowisku współczesnych systemów operacyjnych.
Tryb SMM (System Management Mode)
Tryb SMM jest specjalnym trybem przeznaczonym do zarządzania sprzętem przez systemy operacyjne. Jest on niedostępny dla użytkowników i pozwala na realizację funkcji zarządzających sprzętem na poziomie systemowym.
Rejestry procesorów IA-32
Architektura IA-32 zawiera różne typy rejestrów, które pełnią kluczowe funkcje w działaniach procesora. Można je podzielić na kilka kategorii:
Rejestry ogólnego przeznaczenia
W procesorach IA-32 dostępnych jest osiem 32-bitowych rejestrów ogólnego przeznaczenia:
- EAX: rejestr akumulacji
- EBX: rejestr bazowy
- ECX: rejestr licznika
- EDX: rejestr danych
- ESI: indeks źródła
- EDI: indeks przeznaczenia
- EBP: wskaźnik bazowy
- ESP: wskaźnik stosu
Z tych rejestrów można korzystać również jako z rejestrów 16-bitowych oraz 8-bitowych części.
Rejestry koprocesora
Koprocesor arytmetyczny w architekturze IA-32 działa na zasadzie stosu i składa się z ośmiu rejestrów 80-bitowych. Rejestry te są używane do przechowywania liczb zmiennoprzecinkowych, a ich położenie określa się przez odległość od wierzchołka stosu.
Rejestry segmentowe
Sześć 16-bitowych rejestrów segmentowych służy do określania adresu fizycznego w trybach korzystających z segmentacji pamięci oraz jako selektory w trybie chronionym. Obejmują one m.in. rejestry segmentu kodu programu (CS) oraz segmentu danych (DS).
Rejestry specjalnego przeznaczenia
Dodatkowo w architekturze IA-32 występują różne inne rejestry, takie jak EFLAGS (rejestr stanu), EIP (licznik programu) czy rejestry technologii MMX i SSE.
Wykonywanie programów w architekturze IA-32
Zestaw instrukcji procesorów IA-32 obejmuje kilkaset poleceń, które są wykorzystywane przez programistów do tworzenia aplikacji. Instrukcje te można podzielić na kilka grup:
- Instrukcje przesyłania danych
- Instrukcje kontroli przepływu: porównania, skoki, pętle.
- Instrukcje arytmetyczne: zarówno stałoprzecinkowe, jak i zmiennoprzecinkowe.
- Instrukcje operacji logicznych oraz bitowych.
- Inne instrukcje.
Cykle rozkazowe i kodowanie instrukcji
Cykle rozkazowe są podstawowym mechanizmem realizacji instruktora przez procesor. Na cykl rozkazowy składają się etapy pobierania rozkazu z pamięci, dekodowania go oraz obliczania adresu efektywnego argumentu.
Kodowanie instrukcji odbywa się za pomocą kompilatorów lub assemblerów i wymaga zgodności z zasadami kodowania architektury IA-32. Rozkazy są zmiennej długości i składają się z prefiksów instrukcji oraz kodu operacji.
Następcy architektury IA-32 i
Artykuł sporządzony na podstawie: Wikipedia (PL).