Ebooks, Audobooks and Classical Music from Liber Liber
a b c d e f g h i j k l m n o p q r s t u v w x y z





Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Intel 8086 - Wikipedia, wolna encyklopedia

Intel 8086

Z Wikipedii

Procesor 8086 firmy Intel
Powiększ
Procesor 8086 firmy Intel

Spis treści


8086 jest układem 16-bitowym wprowadzonym na rynek w 1980 roku. Konstruktorzy firmy Intel wprowadzili wiele nowych rozwiązań w zakresie architektury, które nie były stosowane w mikroprocesorach 8-bitowych. Oprócz rozszerzenia listy rozkazów wymienić można następujące:

  • rozszerzenie możliwości adresowania operandów
  • wprowadzenie segmentacji obszaru pamięci
  • mechanizmy przyśpieszenia pracy
  • mechanizmy dla pracy wieloprocesorowej

[edytuj] Wstęp

W mikroprocesorach 8-bitowych stosowano cztery tryby adresowania: rejestrowy, natychmiastowy, pośredni i bezpośredni. W mikroprocesorach 16-bitowych dodano rejestry indeksowe (2) i bazowe (1), wprowadzając tryby adresowania: indeksowy, bazowy i indeksowo-bazowy. Celem rozdzielenia obszarów przeznaczonych dla programu, danych i stosu wprowadzono mechanizm segmentacji. Mikroprocesor zawiera cztery rejestry segmentowe, w których przechowywane są adresy początków segmentów. Zawartości tych rejestrów wraz z adresem efektywnym, obliczanym przez procesor w zależności od trybu adresowania, stanowią adresy fizyczne pamięci. Taki sposób adresowania ułatwia relokację programów i danych.

W czasie wykonywania rozkazów mikroprocesor musi czekać na odpowiedź pamięci, np. na kod operacyjny rozkazu w cyklu pobierania rozkazu. W tym czasie mikroprocesor może być zajęty obliczaniem adresu efektywnego. Obie czynności angażują różne bloki mikroprocesora i mogą być wykonywane równocześnie. Aby tak było, mikroprocesor podzielono na dwie części, z których jedna jest odpowiedzialna za współpracę z otoczeniem, a druga za wykonywanie rozkazów. Ponadto zaprojektowano tzw. układ kolejki, który umożliwia wpisywanie i pamiętanie sześciu kolejnych bajtów pobieranych z pamięci w czasie, gdy mikroprocesor wykonuje inne czynności.

Mechanizmy wieloprocesorowości wprowadzone w mikroprocesorze 8086 można podzielić na dwie grupy: jedną dotyczącą współpracy z koprocesorem i drugą dotyczącą współpracy z innymi mikroprocesorami.

[edytuj] Topologia, opis i przeznaczenie końcówek

  • Znaczenie sygnałów mikroprocesora
    • MN/~MX - konfigurowanie
      • 1 - powoduje, że mikroprocesor pracuje w trybie minimalnym
      • 0 - w trybie maxymalnym
    • CLK' - sygnał zegarowy (standardowa częstotliwość sygnału wynosi 5MHz)
    • READY - sygnał wprowadzający do cyklu maszynowego takty oczekiwania
    • RESET - sygnał zerujący licznik rozkazów oraz rejestry DS, SS, ES i rejestr znaczników, natomiast rejestr CS jest ustawiany w stan FFFFh
    • ING - sygnał zgłoszenia przerwania
    • NMI - sygnał zgłoszenia przerwania niemaskowalnego
    • ~TEST - sygnał uruchamiający program po rozkazie WAIT, używany do synchronizacji pracy z koprocesorem
    • AD0 - AD15 - 16-bitowa, multipleksowana szyna danych i adresów
    • ~BHE/S7 - służy do zorganizowania współpracy z pamięcią operacyjną zarówno w trybie bajtowym jak i słowem o długości 16 bitów
    • ~RD - strob odczytu
  • Znaczenie sygnałów dla trybu minimalnego
    • ~WR - strob zapisu
    • M/~IO - sygnał dostępu
      • 1 - do pamięci
      • 0 - do urządzeń zewnętrznych
    • ALE - strob adresu na multipleksowanej szynie
    • ~INTA - potwierdzenie przyjęcia przerwania
    • HOLD - sygnał żądania zwolnienia magistrali mikroprocesora (sygnał wejściowy)
    • HLDA - sygnał potwierdzenia zwolnienia magistrali mikroprocesora (sygnał wyjściowy)
    • ~DEN - sygnał sterujący buforami szyny danych, otwierający je tylko na czas przesyłania danych na multipleksowanej szynie
    • DT/~R - sygnał określający kierunek przesyłania danych poprzez bufory
      • 1 - transmisja przebiega w kierunku od mikroprocesora do pamięci, bądź urządzeń zewnętrznych
      • 0 - wskazuje kierunek do mikroprocesora
  • Znaczenie sygnałów dla trybu maksymalnego
  • ~LOCK - 0 wskazuje, że w czasie wykonania następnego rozkazu, przejęcie szyny przez innego użytkownika jest niemożliwe
  • ~S0, ~S1, ~S2 - sygnały te wskazują na jeden z cykli maszynowych mikroprocesora
~S0 ~S1 ~S2 cykl maszynowy
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
przyjęcie przerwania
odczyt z WE/WY
zapis do WE/WY
zatrzymanie (HALT)
pobranie rozkazu
odczyt z pamięci
zapis do pamięci
bierny (bez przesłań)
  • QS0, QS1 - sygnały wskazujące na stan układu kolejki rozkazów
QS1 QS2 stan kolejki
0
0
1
1
0
1
0
1
bez operacji
pobranie do wykonania pierwszego bajtu rozkazu
kolejka pusta
pobranie kolejnego bajtu
  • ~RQ/~GT - te dwie linie służą do współpracy z dwoma koprocesorami. Po tych dwukierunkowych liniach przesyłane są sygnały żądania przejęcia szyny i zezwolenia na jej przejęcie

Ze względu na 20-bitowe adresowanie szyna adresowa AD0 - AD15 jest uzupełniona o cztery bity podawane na wyprowadzenia A16/S3 - A19/S6. Sygnały S3 - S6 pojawiają się na liniach A16 - A19 wówczas, gdy na szynie AD przesyłane są dane oraz sygnał S7. Sygnały S3 i S4 identyfikują segment, do którego odwołuje się mikroprocesor w bieżącym cyklu dostępu.

S4 S3 segment
0
0
1
1
0
1
0
1
dodatkowy
stosu
programu
danych

Sygnał S5 wskazuje wartość znacznika dostępu do systemu przerwań. Sygnał S6 wskazuje cykl pobrania rozkazu. Sygnał S7 identyfikuje pierwszy cykl dostępu do układu przerwań w czasie przyjmowania przerwania.

[edytuj] Architektura

Mikroprocesor 8086 składa się z dwóch współpracujących zespołów, działających jednocześnie:

  • jednostki wykonawczej EU
  • zespołu łącza z magistralą systemową BIU

[edytuj] Jednostka wykonawcza

Zespół wykonawczy zawiera blok arytmetyczno-logiczny ALU wraz z rejestrem znaczników FR, blok rejestrów ogólnego przeznaczenia i układ stronowania. Blok ALU dołączony jest do magistrali wewnętrznej mikroprocesora. Z magistrali tej pobierane są argumenty operacji, a także wysyłany jest na nią wynik operacji.

[edytuj] Rejestr znaczników

Na magistralę wysyłana może być też zawartość rejestru znaczników. Rejestr ten jest 16-bitowy, przy czym wykorzystywanych jest dziewięć bitów. Ich znaczenie jest następujące:

  • SF (sign flag) - znacznik znaku - równy najbardziej znaczącemu bitowi wyniku
    • 0 - wynik operacji dodatni
    • 1 - wynik operacji ujemny
  • ZF (zero flag) - znacznik zera
    • 0 - wynik operacji różny od zera
    • 1 - wynik operacji równy zeru
  • PF (parity flag) - znacznik parzystości - ustawiany w zależności od liczby jedynek w najniższych 8 bitach wyniku
    • 0 liczba jedynek w wyniku operacji nieparzysta
    • 1 liczba jedynek w wyniku operacji parzysta
  • AF (auxiliary carry flag) - znacznik przeniesienia połówkowego (pomocniczego)
    • 0 - brak przeniesienia pomiędzy trzecim i czwartym bitem bajtu (BCD)
    • 1 - występuje przeniesienie
  • CF (carry flag) - znacznik przeniesienia
    • 0 - wynik operacji arytmetycznej nie powoduje powstania przeniesienia z najbardziej znaczącego bitu
    • 1 - wynik takie przeniesienie powoduje
  • OF (overflow flag) - znacznik nadmiaru
    • 0 - suma modulo 2 przeniesień z najbardziej znaczącej pozycji i pozycji przedostatniej jest równa 0
    • 1 - suma modulo 2 przeniesień z najbardziej znaczącej pozycji i pozycji przedostatniej jest równa 1 (przekroczenie zakresu w kodzie U2)
  • IF (interrupt flag) - znacznik przerwań
    • 0 - brak zezwolenia na przyjmowanie przerwań z wejścia INT
    • 1 - zezwolenie na przyjmowanie przerwań
  • DF (direction flag) - znacznik kierunku, wskazuje, czy zawartości rejestrów SI i DI mają być zwiększane lub zmniejszane o jeden w czasie wykonywania operacji na ciągach
    • 0 - rejestry są zwiększane
    • 1 - rejestry są zmniejszane
  • TF (trap flag) - znacznik pułapki umożliwiającej pracę krokową. Znacznik ten może być ustawiony za pomocą jedynki na odpowiedniej pozycji słowa stanu programu PSW (program status word)
    • 0 - praca krokowa wyłączona
    • 1 - praca krokowa włączona

[edytuj] Rejestry ogólnego przeznaczenia

Blok rejestrów składa się z czterech par rejestrów 8-bitowych (które są dostępne także jako cztery rejestry 16-bitowe), oraz z czterech rejestrów 16-bitowych. Są to:

  • AX lub AH, AL - rejestr akumulatora
  • BX lub BH, BL - rejestr bazowy
  • CX lub CH, CL - rejestr zliczający
  • DX lub DH, DL - rejestr danych
  • SP - wskaźnik stosu
  • BP - wskaźnik bazy
  • DI - rejestr adresu przeznaczenia
  • SI - rejestr adresu źródłowego

[edytuj] Blok współpracy z magistralą systemową

Blok współpracy z magistralą systemową BIU zawiera blok rejestrów segmentowych i licznik rozkazów IP, sumator służący do obliczenia adresu fizycznego, układ kolejki rozkazów oraz blok sterowania. Wyodrębnienie zespołu BIU było niezbędne w celu przyspieszenia pracy mikroprocesora co jest efektem nałożenia procesów wykonywania i pobierania rozkazów. Jednocześnie pobieranie rozkazów z pamięci operacyjnej i ich wykonywanie jest możliwe dzięki zastosowaniu kolejki rozkazów. Układ ten pozwala na odczytywanie rozkazów z pamięci przez BIU i ich zapamiętywanie oraz na jednoczesne pobieranie zapamiętanych rozkazów przez EU i ich wykonywanie.

Zespół BIU realizuje realizm segmentacji w celu umożliwienia odseparowania przestrzeni adresowych dla programów, dla danych i dla stosu, oraz łatwej ich relokacji (zmiany położenia). W mikroprocesorze 8086 są rozróżnione cztery logiczne obszary pamięci. Każdemu z nich przypisany jest jeden rejestr segmentowy:

  • CS - rejestr adresu segmentu programu
  • DS - rejestr adresu segmentu danych
  • SS - rejestr adresy segmentu stosu
  • ES - rejestr adresu segmentu dodatkowego

Długość każdego segmentu wynosi 64 kB, dlatego adres wewnętrzny w segmencie, nazywany dalej przesunięciem jest 16-bitowy. Rejestry segmentowe mają również długość szesnastu bitów. Wskazują one adres fizyczny początku segmentu w przestrzni adresowej pamięci o pojemności 1MB. Taka przestrzeń adresowa wymaga dwudziestobitowego adresu. Adres początku segmentu powstaje poprzez złożenie szesnastu bitów zawartości rejestru segmentowego i zer na czerech najmniej znaczących pozycjach. Stąd segmenty mogą być rozmieszczone w pamięci w dowolny sposób, ale z kwantem co 16 bajtów począwszy od adresu 00000h i skończywszy na adresie FFFF0h.

Obliczanie adresu fizycznego odbywa się poprzez sumowanie 16-bitowego przesunięcia i 20-bitowego słowa złożonego z zawartości jednego z czterech rejestrów segmentowych oraz zer na czterech najmniej znaczących pozycjach. Źródło przesunięcia jest różne dla różnych segmentów. Dla segmentu kodu programu jest nim licznik rozkazów IP, dla segmentu stosu wskaźnik stosu SP, dla segmentu danych jest to wartość wynikająca z trybu adresowania i obliczana przez zespół EU na podstawie kodu rozkazu i zawartosci odpowiednich rejestrów bloku EU.

[edytuj] Tryby adresowania

Trybem adresowania nazywamy sposób wyznaczania adresu operandu, którego to mianem określamy argumenty i wyniki operacji. W mikroprocesorze 8086 każdy z rejestrów ogólnego przeznaczenia może służyć do przechowywania adresu lub jego składnika. Adres operandu obliczany jest zgodnie z równaniem

EA = BR + IR + d

gdzie:

  • EA - adres efektywny
  • BR - rejestr bazowy
  • IR - rejestr indeksowy
  • d - przemieszczenie

Adres efektywny EA jest adresem logicznym "widzianym" przez program. Na podstawie EA układy segmentacji obliczają adres rzeczywisty w pamięci operacyjnej. Rejestrem bazowym może być rejestr BP lub BX, a rejestrem indeksowym może być rejestr SI lub DI. Przemieszczenie jest zawarte w rozkazie i może mieć długość ośmiu lub szesnastu bitów.

Mikroprocesor 8086 realizuje następujące tryby adresowania:

  • natychmiastowe
  • rejestrowe
  • bezpośrednie
  • pośrednie
  • bazowe
  • indeksowe
  • indeksowo-bazowe

[edytuj] Adresowanie natychmiastowe

W adresowaniu natychmiastowym argument pobierany jest bezpośrednio z rozkazu. W tym trybie wskazywany jest wyłącznie operand źródłowy. Np. MOV AX, 20 – w rejestrze AX zostanie zapisana liczba 20.

[edytuj] Adresowanie rejestrowe

W adresowaniu rejestrowym operandy znajdują się w rejestrach wewnętrznych mikroprocesora. Jeżeli operand znajduje się w pamięci, to zespół wykonawczy EY oblicza jego 16-bitowy adres (przesunięcie) wewnątrz segmentu. Zespół BIU oblicza adres rzeczywisty na podstawie otrzymanego przesunięcia (adresu efektywnego EA) i zawartości wybranego rejestru segmentowego. Np. MOV AX, BX – w rejestrze AX zostanie zapisana zawartość rejestru BX.

[edytuj] Adresowanie bezpośrednie

W adresowaniu bezpośrednim adres operandu znajduje się bezpośrednio w rozkazie. Np. MOV AX, [40] – w rejestrze AX zostanie zapisana zawartość komórki pamięci o adresie 40.

[edytuj] Adresowanie pośrednie

W trybie adresowania pośredniego odwołujemy się do jednego z rejestrów roboczych procesora (np. BX) lub do komórki pamięci (np.19). W rejestrze (BX) zapisany jest numer komórki pamięci, do której trzeba sięgnąć aby odczytać tam zawarty adres i przenieść do drugiego rejestru (AX). Dla adresowania pośredniego z pamięci odczytujemy numer komórki pamięci z dwóch komórek (komórki 19 i komórki 20) w taki sposób, że zawartość tej pierwszej (19) stanowi ważniejszą część tego numeru , zaś zawartość drugiej komórki (20) mniej ważną część tego numeru. Dalej postępujemy podobnie jak przy adresowaniu pośrednim z rejestru – przenosimy zawartość do rejestru AX. Np. MOV AX, [CX] – w rejestrze AX zostanie zapisana zawartość komórki pamięci o adresie, który znajduje się w rejestrze CX.

[edytuj] Adresowanie bazowe

W adresowaniu bazowym rozkaz wskazuje na jeden z rejestrów bazowych BX lub BP i może zawierać 8-; lub 16-bitową wartość stanowiącą lokalne przemieszczenie. Adresem efektywnym jest suma zawartości rejestru bazowego i przemieszczenia. Np. MOV AX, [BP].

[edytuj] Adresowanie indeksowe

W adresowaniu indeksowym adres efektywny jest sumą zawartości rejestru indeksowego SI lub DI i lokalnego przemieszczenia. Np. MOV AX, [SI].

[edytuj] Adresowanie bazowo-indeksowe

W adresowaniu bazowo-indeksowym, adres efektywny jest sumą zawartości jednego z rejestrów bazowych, jednego z rejestrów indeksowych i lokalnego przemieszczenia. Np. MOV AX, [SI+BP].

[edytuj] Rozkazy operujące na ciągach słów

Rozkazy operujące na ciągach słów posługują się rejestrami indeksowymi. Rejestry SI i DI zawierają adresy efektywne pierwszego słowa odpowiednio w ciągu źródłowym i wynikowym. Po każdej transmisji wartości rejestrów indeksowych są automatycznie inkrementowane lub dekrementowane w zależności od ustawienia bitu DF w rejestrze znaczników.

[edytuj] Rozkazy operujące na rejestrach WE/WY

Rozkazy operujące na rejestrach WE/WY zawierają adres WE/WY (adres natychmiastowy) lub posługują się zawartością rejestru DX (adresowanie pośrednie).

[edytuj] Budowa rozkazu

Rozkazy mikroprocesora 8086 można podzielić na następujące grupy:

  • arytmetyczno-logiczne
  • przesłań
  • skoków, obsługi pętli, wywołań i powrotów z podprogramu
  • dotyczące rejestrów segmentowych
  • wykonujące operacje na ciągach słów
  • wejścia/wyjścia
  • inne

Rozkazy mikroprocesora 8086 są wielobajtowe. Ich liczba (bajtów) zależy od rodzaju rozkazu i może wynosić od jednego do sześciu.

7 6 5 4 3 2 1 0
kod operacji D W
MOD REG R/M

Pierwszy bajt zawiera sześciobitowy kod operacji oraz dwa bity. Bit D określa kierunek transmisji (0 - wynik operacji jest przesyłany z rejestru do pamięci, 1 - z pamięci do rejestru). W zależności od wartości tego bitu w rozkazie rozróżniane są operandy źródłowe i operandy przeznaczenia. Bit W określa długość operandu danego rozkazu (0 - operacje bajtowe, 1 - operacje na słowie 16-bitowym).

Jeżeli rozkaz jest wielobajtowy, to drugi bajt rozkazu określa sposób adresowania argumentów. Zawiera on trzy grupy bitów

  • dwubitowa grupa MOD określa tryb adresowania
  • trzybitowa grupa REG określa numer rejestru, w którym znajduje się operand
  • trzybitowa grupa R/M określa sposób wyznaczenia miejsca operandu

Jeżeli operandy znajdują się w rejestrach mikroprocesora (MOD = 11), to pola REG i R/M stanowią ich numery

REG W = 0 W = 1
000
001
010
011
100
101
110
111
AL
CL
DL
BL
AH
CH
DH
BH
AX
CX
DX
BX
SP
BP
SI
DI

Jeżeli jeden z operandów znajduje się w pamięci, to pola MOD i R/M określają jego adres

R/M MOD = 00 MOD = 01 MOD = 10
000
001
010
011
100
101
110
111
BX+SI
BX+DI
BP+SI
BP+DI
SI
DI
BP
BX
BX+SI+p8
BX+DI+p8
BP+SI+p8
BP+DI+p8
SI+p8
DI+p8
BP+p8
BX+p8
BX+SI+p16
BX+DI+p16
BP+SI+p16
BP+DI+p16
SI+p16
DI+p16
BP+p16
BX+p16

Znaczenie bitów R/M zależy od wartości bitów w polu MOD. Jeżeli MOD != 11, to grupa R/M określa rejestry adresujące. Jeżeli natomiast MOD == 11, to R/M określa rejestr (jak REG) drugiego operandu. Jeżeli rozkaz tego wymaga, to po drugim bajcie rozkazu może występować jeden, lub dwa bajty przemieszczenia. Jeden bajt przemieszczenia występuje w sytuacji, gdy MOD == 01, natomiast przemieszczenie dwubajtowe występuje, gdy MOD == 10.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MOD REG R/M kod operacji D W
przemieszczenie
dana

Rysunek przedstawia format rozkazu sześciobajtowego, gdzie dwa ostatnie bajty to argument natychmiastowy dla tego rozkazu.

Obok omówionego formatu występują także rozkazy jednobajtowe, czego przykładem może być rozkaz wymiany zawartości akumulatora z zawartością wybranego rejestru. W kodzie tego rozkazu pięć bitów stanowi kod operacji, a pozostałe trzy bity wskazują numer rejestru którego ten rozkaz dotyczy.

[edytuj] Współpraca mikroprocesora z pamięcią

Rysunek przedstawia zasadę współpracy mikroprocesora z dwoma blokami pamięci o pojemności 512kB każdy, przy czym jeden z nich zawiera bajty parzyste i dołączony jest do szyby D0 - D7, a drugi zawiera bajty nieparzyste (D8 - D15). Bity A0 i ~BHE określają sposób wykorzystania pamięci. Jeżeli A0 == 1 i ~BHE == 0, to korzysta się z bloku A pamięci, który współpracuje z bardziej znaczącym bajtem szyny danych. Jeżeli A0 == 0 i ~BHE == 1, to korzysta się z bloku B pamięci, który współpracuje z mniej znaczącym bajtem szyny danych. Jeżeli natomiast A0 == 0 i ~BHE == 0, to mikroprocesor współpracuje z obydwoma blokami pamięci, przesyłając po szynie słowo szesnastobitowe.

[edytuj] Linki zewnętrzne

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com