Ľudmila Jánošíková

Programovanie v jazyku symbolických adries

pre 32-bitové procesory Intel
Obsah Index
Systémová úroveň vstupu a výstupu

Systémová úroveň vstupu a výstupu znamená riadenie vstupných a výstupných činností na úrovni operačného systému. Základné princípy ovládania prídavných zariadení a inštrukcie, ktoré sa v JSA na tento účel používajú, nezávisia od použitého operačného systému. Konkrétna implementácia princípov, ktorá je v tejto kapitole zvolená na ilustráciu, platí pre operačný systém MS-DOS.

Prenos dát medzi počítačom a prídavným zariadením riadia riadiace signály CTL a FLG (obr. 21).

Obr. 21. Spolupráca počítača a prídavného zariadenia

Signál CTL je ovládaný počítačom. Počítač nastavuje tento signál na aktívnu úroveň, keď požaduje prenos dát. Pri výstupe počítač týmto signálom oznamuje zariadeniu, že na výstupe z počítača sú pripravené údaje a žiada zariadenie, aby tieto dáta prevzalo a spracovalo. Pri vstupe dát predstavuje aktívna úroveň signálu CTL žiadosť o načítanie údajov, ktorú adresuje počítač prídavnému zariadeniu. Od prídavného zariadenia k počítaču smeruje signál FLG, ktorým zariadenie informuje počítač o svojom stave. Z hľadiska reakcie na tieto riadiace signály rozlišujeme prídavné zariadenia

  • synchrónne
  • asynchrónne

Synchrónne výstupné zariadenie neposkytuje počítaču signál FLG. Nemôže teda informovať počítač o tom, či je pripravené prevziať údaje, ktoré mu počítač posiela, ani žiadať o dlhšiu lehotu na spracovanie dát. Počítač poskytuje údaje po obmedzenú dobu a povinnosťou zariadenia je tieto údaje prevziať. Ak ich neprevezme včas, sú z hľadiska styku stratené. Pri synchrónnom vstupe zase počítač neposiela zariadeniu signál CTL. Zariadenie poskytuje údaje opäť len po určitý čas a počítač musí tieto dáta prevziať.

Synchrónny styk medzi počítačom a prídavným zariadením je vhodný v prípadoch, kedy sa prenos vykonáva po minimálnom počte vodičov. Niekedy sa používa na pripojenie prídavných zariadení k jednoúčelovým počítačom, kde je možné programové vybavenie orientovať tak, aby časové nároky synchrónneho styku mohli byť splnené. Niekedy býva činnosť prídavných zariadení kombinovaná. V niektorých fázach styku je činnosť asynchrónna a v ďalších fázach synchrónna.

Bežné prídavné zariadenia, ktoré sa pripájajú k osobným počítačom, sú asynchrónne. Na asynchrónnom styku sa zúčastňujú obidva riadiace signály, CTL aj FLG.

Obr. 22. Časový diagram výstupu na asynchrónne prídavné zariadenie

Na obr. 22 je časový diagram spolupráce počítača a výstupného asynchrónneho zariadenia. Dôležité okamihy prenosu dát sú označené číslami:

  1. Počítač kontroluje stav prídavného zariadenia. Ak je signál FLG v aktívnom stave, znamená to, že zariadenie ešte pracuje na predchádzajúcej operácii styku. V takom prípade je povinnosťou počítača počkať s posielaním dát a opakovane kontrolovať signál FLG, pokiaľ jeho neaktívna úroveň (L) neindikuje, že zariadenie ukončilo predchádzajúcu činnosť.
  2. Počítač nastaví platné údaje na svoj výstup.
  3. Počítač vydáva príkaz na spracovanie údajov nastavením signálu CTL na aktívnu úroveň (H). Prídavné zariadenie začína prenášať údaje.
  4. Nastavením FLG na aktívnu úroveň informuje zariadenie počítač o tom, že prevzalo údaje a začína ich spracovávať.
  5. Počítač zruší signál CTL.
  6. Zariadenie zruší signál FLG. Tým oznamuje počítaču, že skončilo so spracovaním údajov a je schopné prevziať ďalšie údaje.

Obr. 23. Časový diagram vstupu z asynchrónneho prídavného zariadenia

Obr. 23 zobrazuje priebeh dôležitých signálov pri styku počítača so vstupným asynchrónnym prídavným zariadením. Dôležité okamihy styku sú opäť označené číslami:

  1. Počítač kontroluje stav prídavného zariadenia prostredníctvom signálu FLG.
  2. Počítač vydáva príkaz na načítanie ďalšieho údaja. Zariadenie začína pracovať.
  3. Zariadenie nastavuje platný údaj na svoj výstup údajov.
  4. Zariadenie informuje počítač o tom, že údaj je k dispozícii a počítač môže údaj prevziať.
  5. Nastavením signálu CTL na neaktívnu úroveň oznamuje počítač, že prevzal údaj. Zariadenie môže ukončiť svoju činnosť. Pokiaľ nezmení úroveň signálu FLG, nemôže počítač požadovať ďalší vstup.
  6. Nastavením signálu FLG na neaktívnu úroveň informuje prídavné zariadenie počítač o tom, že ukončilo svoju činnosť.

Obr. 22 a 23 zobrazujú typickú organizáciu úplného asynchrónneho styku. Pri pripojovaní rôznych V/V zariadení sa používajú aj jednoduchšie protokoly styku, ktoré vynechávajú niektoré fázy styku na základe vlastností prídavného zariadenia. Na druhej strane spojenie prídavného zariadenia s počítačom možno doplniť o ďalšie signály. Aktívna úroveň jednotlivých signálov (na obrázkoch označená H) sa môže líšiť v závislosti od typu zariadenia a výrobcu. Môže sa stať, že za aktívnu úroveň bude považovaná nižšia hodnota napätia (L) a za neaktívnu vyššie napätie (H).

Periférne zariadenia sú na systémovú zbernicu pripojené cez technické vybavenie, ktoré sa nazýva rozhranie (interface). Úlohou rozhrania periférneho zariadenia je zakódovať elektrické signály vysielané zariadením do tvaru, ktorý reprezentuje vykonaný úkon (napr. posun myši, stlačenie klávesu a pod.) alebo informuje o stave zariadenia. Pri výstupe z počítača musí rozhranie transformovať dáta vysielané procesorom na elektrické signály vhodné pre príslušné zariadenie. Rozhranie má špeciálne registre, pomocou ktorých komunikuje počítač s prídavným zariadením. Aby sa tieto registre odlíšili od registrov procesora, označujú sa pojmom port. Existujú tri druhy portov:

  • dátový port – obsahuje prenášané dáta;
  • riadiaci port – obsahuje príkazy z počítača (signál CTL);
  • stavový port – obsahuje informácie o stave zariadenia (signál FLG).

Každé rozhranie má aspoň dátový port. Jednoduchšie rozhranie môže mať pre riadiace a stavové informácie len jeden port, a naopak, zložitejšie zariadenie môže mať niekoľko riadiacich a stavových portov. Porty majú adresy v rozsahu od 0 do 0FFFFh. Prístup k portom umožňujú inštrukcie in a out.

in AL/AX, adresa portu/DX (input from port)

Inštrukcia in kopíruje hodnotu z adresovaného V/V portu do registra AL alebo AX (podľa typu portu). Ak je adresa portu z intervalu á0,255ñ, môže sa uviesť priamo v inštrukcii, v opačnom prípade ju musíme najprv uložiť do registra DX.

out adresa portu/DX, AL/AX (output to port)

Inštrukcia out kopíruje obsah registra AL alebo AX do adresovaného V/V portu. Ak je adresa portu z intervalu á0,255ñ, môže sa uviesť priamo v inštrukcii, v opačnom prípade ju musíme najprv uložiť do registra DX.

Inštrukcie in a out nemenia príznaky.

Z hľadiska spolupráce procesora a prídavného zariadenia počas styku možno rozlíšiť tri spôsoby riadenia prídavných zariadení:

  • programovaný vstup/výstup
  • vstup/výstup cez prerušenia
  • priamy prístup k pamäti

Programovaný vstup/výstup

Programovaný vstup/výstup si vyžaduje neustálu pozornosť procesora počas styku. Typickým príkladom tohto spôsobu komunikácie je tlačiareň.

Vstup/výstup cez prerušenia

Pri programovanom vstupe/výstupe musí procesor často čakať na to, kým zariadenie bude pripravené na prevzatie dát, alebo kým zariadenie poskytne požadované dáta. Keby komunikácia s klávesnicou bola organizovaná ako programovaný V/V, potom za predpokladu, že prenos znaku z klávesnice do počítača trvá 10 mikrosekúnd a užívateľ dokáže zadať 10 znakov za sekundu, by procesor zaháľal 99,99 % svojho času. Preto je vstup z klávesnice organizovaný cez prerušenie. Kým sa čaká na stlačenie znaku, venuje sa procesor užitočnej práci. V okamihu, keď je znak pripravený na prenos, vyšle interface klávesnice signál, ktorým sa preruší doterajšia činnosť procesora. Procesor chvíľu venuje pozornosť klávesnici – vykoná obslužný program prerušenia, aby sa po jeho skončení opäť vrátil k pôvodnej práci.

Existujú tri druhy prerušení:

  • hardvérové prerušenie – je vyvolané signálom z technického zariadenia. Práve tento typ prerušenia sa používa pri komunikácii s periférnymi zariadeniami, napr. s už spomenutou klávesnicou alebo s diskom.
  • softvérové prerušenie – je vyvolané inštrukciou int v programe. Používa sa najmä na vyvolanie služieb operačného systému.
  • interné prerušenie generované procesorom (výnimka) – vzniká ako dôsledok vykonania nepovolenej operácie, napr. pri delení nulou.

Ako procesor vie, na akej adrese leží obslužný program prerušenia? V reálnom režime sú adresy obslužných programov uložené v tabuľke vektorov prerušení. Adresu obslužného programu (segment a offset) nazývame vektorom prerušenia. Každé prerušenie má svoje číslo, ktoré slúži ako index do tejto tabuľky. Číslo softvérového prerušenia je operandom inštrukcie int. Hardvérovému prerušeniu priraďuje číslo technické zariadenie (radič prerušení), do ktorého prichádza signál vyvolávajúci prerušenie. Výnimkám priraďuje číslo procesor.

Tabuľka vektorov prerušení je umiestnená na začiatku pamäti od adresy 0000:0000. Má 100h položiek. Každá položka pozostáva z dvoch slov, v ktorých je uložený vektor prerušenia (na nižšej adrese offset, na vyššej segment). Inštrukcia

int n

potom spôsobí, že do zásobníka sa uloží register príznakov FLAGS a návratová adresa, vynulujú sa príznaky IF a TF, register IP sa naplní obsahom slova na offsete n*4 v tabuľke vektorov prerušení a register CS obsahom slova na offsete n*4+2.

Inštrukcia

iret

vykonáva návrat z obslužného programu prerušenia, a to tak, že vyberie zo zásobníka návratovú adresu a register príznakov.

Môžeme vytvoriť vlastný obslužný program ktoréhokoľvek prerušenia a nahradiť ním pôvodný obslužný program definovaný operačným systémom. Urobíme to tak, že pôvodný vektor prerušenia v tabuľke vektorov prerušení prepíšeme adresou nového obslužného programu. Ak však nový obslužný program nezostane rezidentný v pamäti po skončení programu, ktorý ho zaviedol do tabuľky vektorov prerušení, musíme pred návratom do operačného systému obnoviť pôvodný vektor prerušenia. Inak by sa mohlo stať, že sa nový obslužný program prepíše iným programom alebo dátami a pri výskyte daného prerušenia sa operačný systém zrúti. Program zostane v pamäti, ak sa ukončí službou DOS-u číslo 31h (Terminate & Stay Resident). Vstupným parametrom tejto služby je register DX, ktorý obsahuje veľkosť kódu, ktorý má zostať v pamäti (v 16-bajtových paragrafoch).

Zmenu v tabuľke vektorov prerušení môžeme urobiť vlastnými silami, alebo pomocou služieb DOS-u číslo 25h a 35h. Služba 25h (Set Interrupt Vector) prepíše zvolený vektor prerušenia novou hodnotou. Vstupnými parametrami sú číslo prerušenia v registri AL a nový vektor prerušenia v registroch DS:DX. Služba 35h (Get Interrupt Vector) vráti vektor zvoleného prerušenia v ES:BX. Vstupným parametrom je číslo prerušenia v registri AL.

V nasledujúcom príklade vytvoríme rezidentný obslužný program prerušenia číslo 0, ktoré vzniká ako výnimka pri delení nulou (alebo keď sa výsledok delenia nezmestí do určeného registra). Obslužný program zostane v pamäti aj po ukončení zavádzacieho programu. Nový obslužný program prerušenia sa bude správať podobne ako pôvodný obslužný program – vypíše správu o delení nulou a vráti riadenie DOS-u. Zmenu vektora prerušenia vykonáme „ručne“ (bez využitia služby 25h).

.MODEL tiny
.CODE
ORG 100h
Zac:    jmp PrvaInstr
Sprava DB 'Joj, neviem delit nulou!',0Dh,0Ah,'$'
Moj:    push cs
        pop ds; treba nastaviť ds, lebo pri vstupe do
              ; prerušenia má hodnotu z prerušeného programu
        mov ah,9
        mov dx, offset Sprava
        int 21h
        mov ah,4Ch
        int 21h
PrvaInstr:   
        cli
        mov ax,0
        mov es,ax
        mov es:word ptr [0],offset Moj
        mov es:[2],cs
        sti
;terminate and stay resident
        mov cl,4
        mov dx,DlzkaProgramu
        shr dx,cl; div 16
        inc dx; pre istotu
        mov ah,31h
        int 21h
DlzkaProgramu = PrvaInstr - Zac + 100h
END Zac

Priamy prístup k pamäti

Výstup z počítača na obrazovku je organizovaný ako priamy prístup k pamäti. To znamená, že údaje, ktoré sa majú zobraziť, sa zapisujú do vyhradenej oblasti pamäti (video pamäti), odkiaľ ich potom riadiaca jednotka obrazovky prečíta a transformuje na signály, ktoré riadia jas bodov obrazovky. Obrazovka môže pracovať v textovom alebo grafickom režime. Adresa video pamäti závisí od zvoleného režimu: v textovom režime má video pamäť adresu 0B800:0000, v grafickom režime 0A000:0000. Princíp priameho prístupu do pamäti vysvetlíme na textovom režime.

V textovom režime je každý znak zapísaný vo video pamäti v dvoch bajtoch: prvý bajt (na nižšej adrese) obsahuje ASCII kód znaku, druhý bajt atribúty znaku. Atribúty znaku sú:

  • farba znaku (bity 0 – 3)
  • farba pozadia (bity 4 – 6)
  • blikanie (bit 7)

Predpokladajme, že sme zvolili textový režim s 25 riadkami a 80 znakmi na jednom riadku. Riadky sú číslované zhora nadol, stĺpce zľava doprava, najnižší index je 0. Ak chceme zapísať znak do stĺpca x na riadku y, musíme jeho ASCII kód uložiť na offset 2(80y+x) a jeho atribúty na offset 2(80y+x)+1. Nasledujúca programová sekvencia vymaže obrazovku tak, že do video pamäti zapíše toľko medzier, koľko je na obrazovke znakov a atribúty nastaví tak, aby sa farba textu zhodovala s farbou podkladu:

mov ax,0B800h
mov es,ax
mov di,0
mov cx,2000; počet znakov na obrazovke
mov al,’ ’
mov ah,0; atribúty znaku => čierna obrazovka
cld
rep stosw

BIOS ponúka celý rad služieb pre komunikáciu s obrazovkou. Označujú sa pojmom video služby a volajú sa cez softvérové prerušenie int 10h. Tabuľka 10 uvádza niekoľko z nich. Číslo služby sa odovzdáva v registri AH.

Tabuľka 10
Video služby
Služba číslo Popis Vstupné parametre Výstupné parametre
00h Nastaví požadovaný režim obrazovky a vymaže obrazovku. AL – číslo režimu
(3 – farebný, textový, 80x25 znakov)

02h Umiestni kurzor do zadanej polohy. BH – číslo stránky
DH – riadok
DL – stĺpec

03h Vráti polohu a veľkosť kurzora. BH – číslo stránky DH – riadok
DL – stĺpec
CH – prvý riadok v znakovej matici
CL – posledný riadok v znakovej matici
08h Vráti znak a jeho atribúty na aktuálnej pozícii kurzora. BH – číslo stránky AL – ASCII kód znaku
AH – atribúty
09h Napíše znak na aktuálnu pozíciu kurzora. BH – číslo stránky
AL – ASCII kód znaku
BL – atribúty
CX – koľkokrát

0Ah Napíše znak s aktuálnymi atribútmi na aktuálnu pozíciu kurzora. BH – číslo stránky
AL – ASCII kód znaku
CX – koľkokrát

0Fh Vráti režim obrazovky
AL – číslo režimu
AH – počet znakov na riadok
BH – číslo stránky

Hore

Načo je vám jazyk symbolických adries?

Architektúra moderných procesorov

Registre

Spôsoby adresovania

Premenné a návestia

Symbolické konštanty

Inštrukčný súbor

Segmentové direktívy

Moduly

Služby operačného systému MS-DOS

Služby operačného systému Windows 95/98/NT/XP

Systémová úroveň vstupu a výstupu

Prostriedky pre prípravu programu

Služby operačného systému Windows 95/98/NT/XP | Prostriedky pre prípravu programu
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4.
Otázky a pripomienky môžete poslať autorke.
Naposledy upravené 6.11.2007.