See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
IA-32 - Wikipedia, wolna encyklopedia

IA-32

Z Wikipedii

IA-32 (Intel Architecture 32 bit) — 32-bitowy model programowy mikroprocesora opracowany przez firmę Intel. Nazywany czasem 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 procesorem Intel 80386 i do dnia dzisiejszego jest najpopularniejszym modelem architektury stosowanym w komputerach, choć rozpoczął się już proces wypierania go przez model 64-bitowy EM64T (tzw. x86-64) i inne architektury 64-bitowe.

Spis treści

[edytuj] 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.

  • Tryb rzeczywisty – tryb zgodny z najstarszymi procesorami rodziny x86 z Intel 8086 włącznie. W trybie tym występuje segmentacja pamięci, rozmiar segmentu jest stały i wynosi 64 KB. Przestrzeń adresowa ograniczona jest do 1 MB, do adresowania wykorzystuje się rejestry segmentowe oraz offset. W trybie tym współczesne procesory pracują jedynie od chwili uruchomienia do przekazania kontroli systemowi operacyjnemu.
  • Tryb chroniony - tryb inicjalizowany i w znacznej mierze kontrolowany przez system operacyjny. Pamięć może być zorganizowana w segmenty dowolnej wielkości, fizyczna przestrzeń adresowa ograniczona jest z reguły do 64 GB, liniowa przestrzeń adresowa do 4 GB. Rodzaj adresowania zależy od systemu operacyjnego - może być stosowany tzw. model płaski (bez segmentacji), model z segmentacją analogiczną do trybu rzeczywistego, lub - najczęściej - adresowanie nieliniowe (tzw. logiczne). W adresowaniu nieliniowym adres fizyczny jest zależny od wpisu w systemowej tablicy deskryptorów, na który wskazuje selektor. W trybie chronionym procesor wspiera wielozadaniowość, chroni przed nieupoważnionym dostępem do urządzeń wejścia/wyjścia.
    • Tryb wirtualny V86 - odmiana trybu chronionego, która jest symulacją trybu rzeczywistego. Służy np. do uruchamiania programów MS-DOS.
  • Tryb SMM (System Management Mode) - jest to tryb przeznaczony do zarządzania sprzętem przez systemy operacyjne, niedostępny z poziomu użytkownika.

[edytuj] Rejestry

Podstawowe rejestry w architekturze IA-32
Podstawowe rejestry w architekturze IA-32

[edytuj] Rejestry ogólnego przeznaczenia

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

  • Rejestry danych
    • EAX - rejestr akumulacji
    • EBX - rejestr bazowy
    • ECX - rejestr licznika
    • EDX - rejestr danych
  • Rejestry adresowe
    • ESI - źródło
    • EDI - przeznaczenie
    • EBP - wskaźnik bazowy
    • ESP - wskaźnik stosu

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.

[edytuj] 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:

  • rejestr stanu stosu koprocesora, określający typ zawartości ośmiu rejestrów stosu
  • rejestr stanu koprocesora, m.in. sygnalizujący wyjątki i określający położenie wierzchołka stosu
  • rejestr sterujący koprocesora, pozwala m.in. na ustawianie rodzaju zaokrąglenia, maskowanie wyjątków

[edytuj] 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:

  • CS - rejestr segmentu kodu programu
  • DS - rejestr segmentu danych
  • SS - rejestr segmentu stosu
  • ES, FS, GS - rejestry pomocnicze dla danych

[edytuj] Rejestr flag procesora

Do opisu stanu procesora w architekturze IA-32 wykorzystuje się rejestr stanu procesora EFLAGS. Poniższa tabela przedstawia nazwy i znaczenie poszczególnych bitów w tym rejestrze:

Rejestr flag w architekturze Intel x86
nr bitu skrót lub wartość opis kategoria*
0 CF flaga przeniesienia (carry) S
1 1 zarezerwowany  
2 PF flaga parzystości (parity) S
3 0 zarezerwowany  
4 AF flaga wyrównania (adjust) S
5 0 zarezerwowany  
6 ZF flaga zera (zero) S
7 SF flaga znaku (sign) S
8 TP flaga umożliwiająca krokowe wykonanie (trap) X
9 IF flaga zezwolenia na przerwania (interrupt enable) X
10 DF flaga kierunku (direction) C
11 OF flaga przepełnienia (overflow) S
12, 13 IOPL poziom uprawnień we/wy (I/O privilege level, od 286) X
14 NT nested task flag (od 286) X
15 0 zarezerwowany  
16 RF flaga wznowienia (resume, od 386) X
17 VM flaga trybu Virtual 8086 (od 386) X
18 AC alignment check (od 486SX) X
19 VIF Virtual interrupt flag (od Pentium) X
20 VIP Virtual interrupt pending (od Pentium) X
21 ID Identification (od Pentium) X
22 0 zarezerwowany  
23 0 zarezerwowany  
24 0 zarezerwowany  
25 0 zarezerwowany  
26 0 zarezerwowany  
27 0 zarezerwowany  
28 0 zarezerwowany  
29 0 zarezerwowany  
30 0 zarezerwowany  
31 0 zarezerwowany  

S: Znacznik stanu
C: Znacznik kontrolny
X: Znacznik systemowy

[edytuj] Inne rejestry

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

[edytuj] Wykonywanie programów

[edytuj] 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 przesyłania danych
  • instrukcje kontroli przepływu (porównania, skoki, pętle)
  • instrukcje arytmetyczne (stałoprzecinkowe, wykonywane przez jednostkę arytmetyczno-logiczną, oraz zmiennoprzecinkowe, wykonywane przez koprocesor)
  • instrukcje operacji logicznych
  • operacje bitowe
  • inne instrukcje

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.

[edytuj] 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 zerojedynkowych. 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:

  • Prefiksy instrukcji (opcjonalne) - do czterech bajtów dodatkowych informacji o instrukcji:
  • prefiks LOCK (zapewniający wyłączność dostępu do pamięci wspólnej dla danej instrukcji),
  • prefiksy powtarzania (REP, REPE, REPZ...) wykorzystywane w operacjach na blokach danych,
  • prefiksy chwilowej zmiany segmentu,
  • prefiks podpowiedzi rozgałęzienia (branch hint), pozwalający procesorowi na wybór bardziej prawdopodobnej ścieżki wykonania w przetwarzaniu potokowym,
  • prefiksy zmiany rozmiaru operandu i zmiany rozmiaru adresu.
  • Kod operacji (opcode) długości 1-3 bajtów, zawierający często dodatkowe informacje:
  • bit wskazujący, w którym operandzie zapisać wynik,
  • bit oznaczający rozmiar operandów.
Dodatkowe 3 bity kodu operacji znajdować się mogą także zamiast pola reg w bajcie ModR/M.
  • Bajt ModR/M (tylko w przypadku instrukcji posiadających argumenty w pamięci lub rejestrach) - służy do określenia położenia argumentów. Składa się z trzech części:
  • pole mod (2 bity) - określa czy operacja odwołuje się do pamięci, oraz jaką długość ma ewentualne pole przesunięcia;
  • pole reg (3 bity) - kod rejestru lub modyfikacji adresowej pierwszego argumentu, czasem występuje w roli dodatkowych bitów kodu operacji;
  • pole R/M (3 bity) - kod rejestru lub modyfikacji adresowej drugiego argumentu.
  • Bajt SIB (tylko w przypadku operacji o złożonym sposobie odwoływania się do pamięci, np. za pomocą podwójnej modyfikacji adresowej) - służy do określenia dodatkowych parametrów modyfikacji adresowych, m.in. współczynnik skali pozwalający na wygodne operowanie na tablicach.
  • Pole przesunięcia (opcjonalne) - podaje odległość danych w stosunku do początku segmentu, może mieć długość 1, 2 lub 4 bajtów.
  • Dane stałe (immediate, opcjonalne) - podana bezpośrednio wartość liczbowa argumentu o długości 1, 2 lub 4 bajtów.

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.

[edytuj] Cykl rozkazowy

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

  • pobranie rozkazu z pamięci,
  • dekodowanie kodu rozkazowego,
  • obliczenie adresu efektywnego argumentu z uwzględnieniem modyfikacji adresowych, jeśli polecenie odwołuje się do pamięci,
  • obliczenie adresu fizycznego argumentu (rzeczywistego położenia danej w pamięci fizycznej)
  • pobranie argumentu z pamięci
  • wykonanie rozkazu (np. obliczenie właściwego wyniku)
  • zapisanie wyniku
  • wyznaczenie położenia następnego rozkazu (odpowiednia modyfikacja rejestru EIP).

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.

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -