Programátorský model mikroprocesora 8086


<= =>


Obvod 8086 je univerzálny šestnásťbitový mikroprocesor. Má šestnásťbitovú ALU, to znamená, že je schopný prevádzať operácie so šestnásťbitovými číslami. S okolím komunikuje po šestnásťbitovej dátovej a dvadsaťbitovej adresovej zbernici.

Segmentácia pamäte

Vzhľadom k tomu, že obvod 8086 je schopný práce s pamäťou veľkosti 1MB a obsahuje len šestnásťbitové registre, je nutná tzv. segmentácia pamäte. Jedná sa o logické delenie pamäte do blokov po 64kB. Tomuto bloku hovoríme segment a jeho začiatok určuje programátor, prípadne je mu pridelený podľa voľného miesta v pamäti. Jediná požiadavka na umiestnenie počiatku segmentu je, aby jeho adresa bola násobkom šestnástich. Umiestnenie jednotlivých slabík v segmentu určuje ofsetová časť adresy (offset). Tá určuje, koľká je slabika od počiatku segmentu. Adresa sa skladá z dvoch častí: segment a offset. Obe tieto časti sú šestnásťbitové. Pretože ale pre adresovanie pamäte je nutných dvadsať bitov, sú za segmentovou adresu vyjadrenou binárne pridané štyri bity s hodnotou nula (preto každý segment začína na násobku šestnástich). K tomuto dvadsaťbitovému číslu je potom pričítané šestnásťbitové číslo určujúce ofsetovú adresu. Takto vzniká dvadsaťbitové číslo znamenajúce skutočné umiestnenie slabiky v pamäti (fyzická adresa).

Výpočet skutočnej adresy binárne:

segment:ssssssssssssssss0000
+offset:0000oooooooooooooooo
        --------------------
adresa: aaaaaaaaaaaaaaaaaaaa

(segment sú jednotlivé bity segmentovej časti adresy doplnené na konci o štyri nuly, offset sú jednotlivé bity ofsetovej časti adresy doplnené na začiatku o štyri nuly, adresa je súčet, teda jednotlivé bity skutočnej adresy)

Výpočet skutočnej adresy hexadicky:

segment:ssss0
+offset:0oooo
        -----
adresa: aaaaa

(segment sú jednotlivé cifry segmentovej časti adresy doplnené na konci o jednu nulu, offset sú jednotlivé cifry ofsetovej časti adresy doplnené na začiatku o jednu nulu, adresa je súčet, teda jednotlivé cifry skutočnej adresy)

Napríklad: Miesto v pamäti s adresou segmentu 0xAB1E a offsetu 0x1111 má skutočnú adresu:

segment:AB1E0
+offset:01111
        -----
adresa: AC2F1

Tento spôsob adresovania umožňuje jednoduchý prenos programu v pamäti a jeho schopnosť pracovať v každej jej časti. Program si pre svoju činnosť vyčlení segment pre dáta, zásobník a strojový kód (inštrukcie). Na tieto bloky ukazujú jednotlivé segmentové registre.

Dôsledky segmentácie:

Pochopení segmentácie pamäte je skôr v znalosti dvojkovej a šestnástkovej číselnej sústavy.

POZOR!!! Nemali by sme zamieňať pojmy segment a selektor. Segment určuje len umiestnenie bloku pamäte. Selektor je použitý u vyšších typov procesorov a jedná sa vlastne o poradové číslo v tabuľke, ktorá nesie informácie o vyčlenených miestach pamäte a ich vlastnostiach.

Z hľadiska programátora sú najdôležitejšie registre. Tie sa delia na

Tieto registre sa nastavujú automaticky, ak prebehla inštrukcia, ktorá ich nastavuje. Register F je doplnený i tromi riadiacimi registrami, ktoré ovplyvňujú beh programu: Tieto tri registre môže nastaviť len programátor vhodnými inštrukciami. Mikroprocesor ich sám nenastavuje. Ak s registrom príznakov pracujeme ako s celkom, je šestnásťbitový a má tvar: X, X, X, X, OF, DF, IF, TF, SF, ZF, X, AF, X, PF, X, CF (bity X nie sú obsadené)

Mikroprocesor musí byť schopný pracovať i so vstupmi - výstupmi. Umiestnenie jednotlivých portov určuje šestnásťbitová adresa umiestnená najčastejšie v registri DX. Pre programátora je dôležitá i tá skutočnosť, že si mikroprocesor vytvára tzv. frontu inštrukcií. Jedná sa o šesť slabík znamenajúcich niekoľko inštrukcií, ktoré budú nasledovať po práve prevádzanej inštrukcii. Táto fronta je priebežne doplňovaná pri operáciách nezaťažujúcich zbernice z pamäte. Pretože sa ale jedná o desať za sebou idúcích slabík v pamäti, je pri inštrukciách skoku v pamäti vyprázdnená. Z tohoto dôvodu je vhodné, aby program obsahoval čo najmenší počet skokov. Preto sa v poslednej dobe kladie dôraz na programovacie jazyky, ktoré podporujú tzv. štruktúrované programovanie bez nepodmienených skokov. Medzi ne (čiastočne) patrí Turbo Pascal a C. Je jasné, že programovací jazyk Basic sa v tomto zmysle k mikroprocesoru nechová moc šetrne a spomaľuje tak beh programu. Mikroprocesor 80286 je štruktúrou i vlastnosťami podobný 8086. Je schopný pracovať v dvoch režimoch. V základnom reálnom takmer presne simuluje obvod 8086. Napriek tomu v tomto režime prináša niektoré rozšírenia pre niektoré inštrukcie. Pokiaľ v nasledujúcom výklade použijem rozšírenie inštrukcií pre 80286, uvediem to poznámkou [286].



<= =>