Návodník
ASM_DEBUG
Informácie z web stánky:  
  http://www.dnp.fmph.uniba.sk/~kollar/navodnik.htm

Obsahuje poznámky a návody k programovaniu styku počítača s rozhraním prostredia:
   D_load:
Ú Pár slov na úvod  
Ú-1 Kontrola procesora pomocou odlaďovacieho programu Debugger  
Ú-2 Použitie BIOS a DOS na uľahčenie programovania  
Ú-3 Programovanie v jazyku symbolických adries - Assembler  
Ú-4 Prenos dát cez paralelné rozhranie  
Ú-5 Vlastnosti programovateľného časovača - timera  
Ú-6 Prenos dát cez sériové rozhranie  
Ú-7 Prerušenie - Interrupt a programy na obsluhu prerušenia  
Ú-8 Kanál - DMA priameho prístupu do pamäte počítača  
Ú-9 Interfacing with QBasic  

 
 
Na základe rôznej literatúry:
 
D.J. Bradley:  Assembly Language programming for the PC, Prentice-Hall, 1984.
P. Abel:  Assembler for the IBM PC and PC-XT,  Prentice-Hall, 1984
Al Schneidar: Fundamentals of IBM PC Assembly Language, rusky preklad, MIR, 1988.
L.J. Scanlon:  IBM PC&XT  Assembly Language, rusky preklad,  Radio i svjaz, 1989.
P. Norton:  PC Programer`s Bible, Microsoft Press, 1993.
M. Brandejs: Mikroprocesory INTEL 8086 - 80486, Grada, 1991.
V. Broukal: BIOS IBM PC, Grada, 1992.
J. Šimunek: Úvod do problematiky osobných  počítaču typu IBM PC - MS DOS, 602,  1992.
P.W. Gofton: Sériová komunikace, Grada , 1994.
M. Šnorek: Standardní rozhraní PC, Grada , 1992.
M. Minasi: IBM PC - Velký pruvodce hardware, Grada, 1992.
H.H. Haupt: Quick Basic 4.5, Sybex Verlag , 1992.
 
doplnil pre potreby študentov a tiež pre vlastné potešenie Dušan Kollár.
 
 
Anno Domini 2000


Ďalšie zaujímavé zdroje informácii (v angličtine v zazipovanom tvare):

                  • o technických prostriedkoch PC;
                  • o programovaní v assembleri;
                  • o použití debuggera :
  • PdfAoa.zip - Randall Hyde: The Art of Assembly Language Programming - pomocou Acrobat Readra čitateľná knižka, v ktorej je množstvo podrobnej informácie o technických prostriedkoch PC.
  • Asmtut.zip - Gavin's Guide to 80x86 Assembly.
  • Debug.zip - Príklady debugovania programov.com od R. De Younga.
  • Debugtut.zip - Návod k používaniu programu DOS Debugger.
Databázové zoznamy  informácii (so zabudovaným prehliadačom) o prerušeniach BIOS, DOS, assemblerovských inštrukciach mikroprocesora 80x86 a pod.
    • HelpPC.zip- obsahuje okrem iného:
      • Informácie o DOS
      • Po stlačení F6 má množstvo informácii o parametroch BIOS .
    • INTall.zip- obsahuje okrem iného:
      • Prehľad inštrukcii assemblera mikroprocesora 80x86
      • Základné údaje o samotnom procesore.
      • Prehľad preušení INT.
      • Základné údaje o hardware.
      • Základné údaje o BIOS a DOS parametroch.






Pár slov na úvod

Výberová prednáška "Styk mikroprocesora s prostredím" nadväzuje tiež na prednášku " Základy jadrovej elektroniky ", resp. na látku zo skrípt D.Kollár: Elektronika a automatizácia II. Skriptá MFF UK 1990 (F). Nasledujúci zoznam predstavuje súhrn pojmov z prednášky o technických prostriedkoch (hardwarwe) počítačov a ich príslušenstve (F), potrebný k správnemu pochopeniu textu v tejto výberovej prednáške. Je to teda akýsi zoznam otázok, na ktoré by ste mali vedieť odpoveď, resp. pojmov, o ktorých by ste mali mať konkrétnu predstavu.
 
 
F Základy technického a programového vybavenia
Obsah prednášky, ktorú ste mali už absolvovať
1. Z historie vývoja počítačov
2. Architektúra počítača
q Hardvarská architektúra (podľa Howarda Aikena)
q Princetonská architektúra (podľa Johna vonNeumana)
Rýchlosť počítača
Pamäťové obvody v počítači
q Príspôsobovanie rýchlosti procesora a operačnejpamäti
q Pamäť typu Cache
Registre mikroprocesora
Podpora adresovania u mikroprocesora 80x86
q Fyzická organizácia pamäti
q Virtuálna pamäť
q Správa pamäti
Niekoľko poznámok k technologickým novinkám
q Moderné mikroprocesory
q Integrácia PC do čípu
Assembler
3. Zbernica
q Zbernica PC XT
q Zbernica ISA (Industry Standard Architecture)
q Zbernica MCA (Micro Channel Architecture)
q Zbernica EISA (Enhanced Industry StandardArchitecture)
q Lokálna zbernica 
q Univerálna sériová zbernica USB
q Zbernice moderných počítačov
Logická organizácia pamäti so zbernicou XT aAT
q Operačná pamäť RAM v PC s operačným systémomMS DOS
q Zavedenie operačného systému MS DOS v PC
4. Klávesnica
5. Zobrazovacia sústava
q Monitor
qVideoadaptér
q Pamäťové mapy a bitové roviny v grafickýchmódoch
q Fonty a videostránky v textových módoch BIOS
q Vhodná videokarta
6. Rozhranie pre vstup a výstup
Adresovanie I/O zariadení
q Ovládače I/O zariadení
Paralelné rozhranie
q Programovateľný obvod paralelného rozhraniaPPI 8255A
Paralelné rozhranie pre tlačiareň
Programovateľný časovač - timer
q Použitie timera v PC
Sériové rozhranie
q Modem
q Znakovo orientovaný formát
q Bitove orientovaný formát
Handshaking
q Hardwareový spôsob (zabezpečovaný technickýmiprostriedkami)
q Softwareový spôsob
Adaptér sériového rozhrania - UART
Metódy realizovania prenosu cez sériové rozhranie
7. Prerušovací podsystém
q Dôležité služby BIOS:
Kontrolér prerušenia
Obsluha prerušenia
q Inicializačná časť a nainštalovanie rezidentnéhoobslužného programu
q Realizácia tela programovej obsluhy preušenia
Postup činností pri obsluhe prerušenia
q Rezidentné programy
q Typy rezidentných programov na obsluhu prerušenia
q Štruktúra rezidentného programu
8. Priamy prístup do pamäte - DMA
q Inicializácia prenosu DMA
q Priebeh prenosu DMA
9. Sekundárna pamäť - disky a diskety
Fyzická štruktúra disku
q Metódy kódovania informácie
q Rozhranie pre disk
q Výkon diskovej jednotky
q Vyrovnávacia pamäť HD (Cache)
q Kompaktné disky (CD - Compact Disk)
q Ďalší vývoj rýchlejších a objemnejších pamätí
Logická štruktúra disku
q Architektúra systému MS DOS
q Logická štruktúra disku v MS DOS
q Správy súborov v MS DOS na báze FAT
q Prístup k súboru
q HPFS pre správu súborov v OS/2
q Prístup k súborom v HPFS
q Správy súborov v UNIXe
q Správa súborov vo Windows NT 
10. Niekoľko poznámok o operačnom systéme
q Správa operačnej pamäte
q Správa procesov

Stručný sylabus prednášky "Styk mikroprocesora s prostredím":

Prednáška rozširuje informaciu (z prednášky - Základy technického a programového vybavenia) o architektúre mikropočítačov. Podáva informáciu o základoch programovania v jazyku symbolickych inštrukcii (assembleri) a o spôsoboch testovania a odlaďovania krátkych programov na obsluhu rôznych periférnych zariadení a meracích prístrojov s digitálnym rozhraním. Zvláštna pozornosť je venovaná styku mikroprocesora s okolim (paralelný a sériový prenos dát, DMA prenos dát, spôsoby a metódy obsluhy prerušení), tiež prevodníkom AD/DA a obvodu časovača. Prednáška je doplnená praktickými demonštračnými cvičeniami na objasnenie odprednášanej látky.

Cieľom prednášky "Styk mikroprocesora s prostredím" je bližšie zoznámenie sa s technickými prostriedkami počítača, predovšetkým s tými, ktoré sú potrebné na realizovanie styku procesora s vonkajšim prostredím (cez paralelné a sériové rozhranie). Na kontrolu činnosti procesora, resp. programov sa používa odlaďovací program Debugger. Pre písanie krátkych demonštračných programov na obsluhu rôznych technických prostriedkov počítača sa používa jazyk symbolických adries a inštrukcii - Assembler. Na záver prednášky sa demonštruje aj spôsob ako spojiť assemblerovskú časť kódu s kódom napísaným v programovacom jazyku vyššej úrovne.

Súčasťou prednášky je tvorba krátkych procedúr pre vstup/výstup dát cez paralelné/sériové rozhranie (napr. tlačiareň), spúšťanie rôznych zariadení pomocou časovača, ovládanie DAC a ADC prevodníka, zber údajov v štandarde IMS (z digitálneho volt - ampér - ohm - metra, ovládanie súpravy na meranie ionizujúceho žiarenia RFT), ovládanie modulov CAMAC, riadenie komunikácie medzi dvoma PC prepojených cez paralelný alebo sériový kanál, tvorba jednoduchých rezidentných programov na obsluhu prerušenia. Ide teda o assemblerovské procedúry v reálnom móde mikroprocesora 80x86, stále aktuálne a prakticky nezávislé od súčastnej rýchlej modernizácie procesorov. (Stále ešte platí známy Moorov zákon, podľa ktorého sa výkon procesorov zdvojnásobňuje každých 18 mesiacov a teda držať krok s výdobytkami techniky je prakticky nemožné.)

Po prediskutovaní (odprednášaní) určitej časti (kapitoly) prednášky je súčasťou prednášky aj nasledná demonštrácia jednoduchších procedúr priamo na zariadeniach v laboratóriu s následnou "domácou úlohou" na dokončenie alebo vylepšenie zadaného problému. (Základné podprogramy priamo viazané na konkrétny hardware musia byť však doladené v laboratóriu.) Som presvedčený, že prenáška (resp. tento text) bude prínosom k lepšiemu pochopeniu technickej stránky "vnútorností" počítača. Veľký počet priložených demonštračných procedúr (pozbieraných z vyššie uvedenej literatúry ako aj na základe vlastnej inšpirácie) by mohol slúžiť ako doplnok pre komponovanie vlastných procedúr na ovládanie predovšetkým rôznych neštandardných periférii počítača.

Predchodcom tohto variantu prednášky v osemdesiatych rokoch bola rovnomenná prednáška avšak zameraná na možnosti mikropočítača PMD-85. Aj keď do budúcnosti možno predpokladať vysokú štandardizáciu prístrojov, vhodných na pripojenie k periférii PC a tým aj naslednej možnosti použitia rôznych dokonalejšich programových produktov (napr. použitia grafického programovacieho jazyka LabView na ovládanie zariadení, ktoré majú štandardný interfejs) na zostavovanie programov pre počítačom riadenú meraciu aparatúru, vždy tu zostane ešte poznávacia funkcia tejto prednášky, hľadajúca odpoveď na otázku: ako to vo vnútri počítača a jeho komponentoch vlastne funguje a ako sa o tom čo najjednoduchšie presvedčiť.


Assembler – obecné pojmy a charakteristika jazyka

Assembler (oficialne jazyk symbolických adries - F - príklad inštrukcii) je programovací jazyk, v ktorom každý kód inštrukcie generuje jednu inštrukciu strojového jazyka, viazanú na konkrétny procesor počítača (napr.na rozdiel od iného programovacieho jazyka nízkej úrovne C, v ktorom kódovaný príkaz ( ktorý sa už neviaže na konkrétny počítač alebo operačný systém) po prekompilovaní generuje jednu alebo častejšie viac inštrukcii stojového jazyka). “Jazyk nízkej úrovne” znamená, že Assembler pracuje priamo len so štandardnými dátovými typmi ako sú znaky, celé a reálne čísla. Assembler je  pre predmet "Styk mikropočítača s prostredím" najjednoduchší jazyk, pomocou ktorého  možno skontrolovať fungovanie styku počítača s prostredím .

Spracovanie programu

Základné spracovanie programu v assembleri (F) prebieha niekoľkými fázami, ktoré sú schématicky znázornené na obrázku 1.
 
Obr.1. Programy (F), ktorými je zdrojový súbor (textový súbor s príponou .asm) spracovávaný majú tento význam:
Editor Textový editor, pomocou ktorého sa vytvára a opravuje zdrojový (.asm) súbor.
Preprocesor Súčasť prekladača, ktorá predspracováva (upravuje zdrojový súbor tak, aby mal prekladač uľahčenú prácu. Napr. vynecháva komentáre, zaisťuje správne vloženie a rozvoj maker a pod.). Preprocesor odovzdáva výsledky svojej práce priamo “svojmu nadriadenému“ kompilátoru. 
Compiler Po slovensky kompilátor, vykonáva preklad zdrojového súboru do relatívneho (objektového) kódu počítača – vzniká .obj súbor. Relátívny kód (oficialne nazývaný jazyk relatívnych adries) je temer hotový program. Slovo relatívny znamená, že adresy dát a inštrukcii nie sú ešte konkretizované (napr. môžu byť uložené v knižnici) a sú teda v súbore .obj zapísané relatívne. Ak je program rozdelený do viacerých súborov, vznikne po preklade niekoľko .obj súborov a tie sa spoja do jedného programu až pomocou zostavovacieho programu – linkera. Vedľajší produkt prekladača (ktorý sa vytvára len na špeciálne prianie užívateľa) je tzv. protokol o preklade (listing - .lst súbor). Pri použití akéhokoľvek prekladača prebieha cyklus: preprocesor + compiler, hoci vo väčšine firemných produktov (TASM, MASM) sa tieto činnosti robia automaticky postupne za sebou. Na pomenovanie činnosti, ktoré vykonáva preprocesor a compiler sa v jazyku symbolických adries – assembleri používa názov prekladača – assembler.)
Linker Zostavovací program pridelí relatívnemu kódu (respektíve jeho relatívnym adresám F príklad) absolutné adresy a vykoná všetky odkazy (nájde adresy) na doposiaľ neznáme identifikátory (napr. na volané subrutiny z knižnice). Výsledkom práce linkeru je priamo spustiteľný program (.exe alebo .com).
Debugger Odlaďovací program (F) alebo otrocky preložené odvšivovač (odstraňovač vší, ploštíc a iného podobného hmyzu, ktorý sa v počítačovom dávnoveku mohol zapliesť do relátok a iných kontaktov vtedajšich počítačov). Slúži na ladenie alebo hľadanie chýb, ktoré nastávajú pri behu programu. Po najdení chyby sa celý cyklus (editor, compiler, linker, debugger) opakuje tak dlho, až si myslíme, že náš program už žiadnu chybu neobsahuje.
   

Zdrojový súbor .asm (F), v ktorom je program je treba pre správne preloženie doplniť:

  • hlavičkou (s názvom - Title, Subttl, deklarovaním použitývh makier, poprípade bližším špecifikovaním spôsobu prekladu (F));
  • na sprehľadnenie programu doplniť program komentárom (komentár je oddelený ;)
  • vlastná procedúra (F) je uzavretá medzi pseudooperátory Proc a EndP;
  • na začiatku procedúry je inicializačná časť - priradenie segmentov pamäte (pomocou pseudooperátora Assume ), v ktorých bude uložený kód programu, dáta, zásobník;
  • na konci procedúry je obvykle návratová inštrukcia (Ret alebo iný spôsob návratu);
  • kód programu v segmente uzatvára EndS a na konci textového súboru .asm stojí END .
Dátové typy

Implicitným tvarom dát v assembleri (F) je unsigned int (celé čísla od dlžke jedného alebo niekoľko bajtov (DB, DW, DD, DQ, DT- s priradením pamätovej lokality ), bez znamienka). Obsah bunky 1bajt môže predstavovať aj znak typu char o dlžke 8 bitov. Často na začiatku programu sa prideľuje určitej oblasti pamäte meno, poprípade význačným premeným a konštantám (typ D, B, H, Q) sa deklaruje meno (EQU - bez priradenia pamätovej lokality).

Terminálový vstup a výstup

Najjednoduchšim spôsobom pre vstup dát je klávesnica (F, v procese merania sériový F alebo paralelný F port). Najjednoduchším spôsobim výstupu je obrazovka (F) alebo tlačiareň (F). Vo väčšich programoch sa na vstup dát používajú súbory. Podobne aj výstupy je výhodné ukladať do súborov.

Vstup zo súboru a výstup do súboru

Z hardwareového pohľadu je každý súbor postupnosť bajtov (Byte), uložených na nejakom médiu v niekoľkých blokoch. Bloky majú rovnakú veľkosť a nemusia nutne ležať za sebou. Súbor je teda vytváraný podľa pravidiel daných operačným systémom. Prístup k súboru je možný sekvenčne alebo aj náhodne.

Z užívateľského hľadiska je súbor postupnosť po sebe sledujúcich bajtov od začiatku do konca súboru. Úlohou operačného systému je dodať tieto bajty v správnom poradí. Z dôvodov zvýšenia rýchlosti sú I/O operácie bufferované, tzn:

  • Pre vstup:
Naraz sa prečíta celý blok dát z disku do pamäti (buffera). Jednotlivé položky sa potom čítajú z pamäti a nie priamo z disku. Ak potrebujeme prečítať napr 2 znaky zo súboru, načíta sa celý úsek súboru (napr. blok dát o veľkosti 512 bajtov do prenosového buffera – špecialne vyhradenej oblasti vyrovnávacej pamäte DTA (Data Transfer Area F), ktorú vytvoril procesor príkazov command.com v pamäti pri zavedení súboru – tzv prefix programového segmentu PSP – Program Segment Prefix), v ktorom sú tieto 2 znaky. Potom sa už z tejto pamäti DTA prečíta prvý znak, potom aj druhý znak – už bez prístupu k vonkajšiemu médiu, čiže podstatne rýchlejšie.
  • Pre výstup:
Dáta sa zapisujú nie priamo na disk, ale do bufferu DTA a keď je tento bufer plný, zapíše sa automaticky celý obsah bufferu na disk do súboru ako jeden blok dát.. Výhodou je opäť vyššia rýchlosť zapisovania do pamäti než na disk.


Štandardný vstup a výstup

Samozrejme pre iné možnosti vstupu a výstupu ako do/zo súboru sa používajú nebufferované I/O operácie. Práca so súbormi sa veľmi neodlišuje od práce s obrazovkou a klávesnicou. V operačnom sytéme je definované niekoľko konštantných ukazovateľov tzv. handle(F), ktoré predstavujú súbory, otvorené operačným systémom pri spustení programu. MS-DOS podporuje 5 štandardných zariadení, ktoré slúžia k zabezpečeniu základnej komunikácie medzi počítačom a užívateľom:

  • CON – pre vstup (stdin s handle=0) z klávesnice a výstup (stdout s handle=1) na obrazovku a (stderr s handle=2) pre výstup štandarných chybových hlásení operačného systému,
  • AUX (COM1) – sériový port (stdaux s handle=3) v štandarde RS 232 s 9 vodičmi (teda nie len 2 alebo 3 vodiče, ako pri tzv. nulovom modeme),
  • PRN (LPT1) – paralelný port (stdprn s handle=4) so štandardom Centronics pre výstup na tlačiareň – s 18 vodičmi (teda nie len 8 alebo 9 vodičov, ktoré v podstate stačia na prenos 7 bit znaku a komunikáciu potvrdenia správnosti prenosu).
Tieto štandarné ukazovatele možno v mnohých operačných systémoch (UNIX, MS-DOS) použiť pomocou presmerovania (redirekcia >, >>, <, <<) na zmenu toku dát. Napríklad ak pôvodný súbor tlac.exe posiela svoj výstup oznamov na obrazovku, tak príkaz tlac.exe>prn pošle výstup oznamov na tlačiareň a príkaz tlac > vystup.txt uloží výstup oznamov do súboru vystup.txt. Textové a binárne súbory

Ak chceme so súborom pracovať, je ho treba otvoriť , špecifikovať spôsob otvorenia súboru (textový alebo binárny súbor) a činnosť, ktorá sa bude vykonávať (čítanie / zápis). Po skončení práce so súborom je treba oznámiť operačnému systému, že môže zatvoriť prístup k súboru.

V textovom súbore sa používajú špecialne znaky na označenie:

  • Konca riadku End-of Line (CR – carrige return – návrat vozíku s ASCII kódom 0DH, samostaným znakom LF (Linefeed – posun riadku s ASCII kódom 0AH)). Spôsob použitia (CR alebo CR+LF) závisí na okolnostiach;
  • Konca súboru End-ofFile, pomocou symbolickej konštanty (FFH alebo 1AH).
Textový súbor je teda pri zápise a pri čítaní modifikovaný (pri zápise sa doplňujú sa CR a LF na označenie konca riadku, pri čítaní sa vypúšťajú sa CR a LF). Preto pri chybnom interpretovaní textového súboru ako binárny sa poruší jednak delenie textu na riadky a tiež sa bude chybne interpretovať obsah súboru. V textovom súbore napríklad číslo 65535 zaberá priestor piatich bajtov, v binárnom súbore len 2 bajty (FFFFH). Výhodou textových súborov je, že ich obsah možno kedykoľvek prezrieť, vytvoriť alebo opraviť bežným editorom.

Obsah binárneho súboru nie je ovplyvňovaný funkciou zápisu a čítania. To znamená, že to čo do biárneho súboru zapíšeme, to sa bezo zmeny prečíta. Výhodou binárnych súborov je, že sa s nimi pracuje omnoho rýchlejšie ako s textovými súbormi. Jednak sú binárne súbory kratšie a jednak pri zápise čísla do textového súboru treba vykonať jeho konverziu z vnútornej reprezentácie čísla v počítači na textovú podobu a pri čítaní konverziu obrátene - z textu na číslo. Tieto konverzie v binárnych súboroch odpadajú, pretože sa do nich zapisuje priamo obsah pamäte po bajtoch. Binárne súbory sú preto výhodnejšie pri ukladaní rozmernejšich dát. Pre uloženie znakov nemajú príliš veľký význam, pretože znak v textovom súbore zaberá rovnako ako v binárnom súbore jeden bajt.

V textových súboroch sa moc nevyužíva možnosť pohybu v súboroch – jednotlivé znaky sa z nich jednoduco sekvenčne snímajú. V binárnych súboroch, kde sú známe presné veľkosti položiek, je mnohokráť veľmi účelné nastaviť ukazovateľ (index pointer) do súboru na ľubovoľné miesto. Od tohto miesta sa bude ďalej čítať alebo zapisovať (adresovanie s pomocou bázového a indexového registra), bez nutnosti zdržovať sa čítaním predošlých údajov.
 
 

Spracovanie zdrojového textu

Pri prvom zbehnutí assemblera (pôsobením preprocesora) sa:

  • spracováva zdrojový text programu pred použitím prekladača (F);
  • vykonáva sa zámena textov, napr. identifikátorov konštant za príslušné hodnoty;
  • vkladajú sa rozvinuté kódy makier (expandované makrá F) do príslušných častí programového kódu, tam kde sa v zdrojovom programe vyskytovalo meno makra;
  • vykonáva sa podmienený preklad;
  • vypúšťajú sa so zdrojového textu všetky komentáre.


Makrá vs volanie podprogramu

Pri písaní programov sa často vyskytne prípad, keď sa mnohokrát používa nejaká funkcia, ktorá je veľmi krátka, napr. vykonáva jednoduchý výpočet nejakej hodnoty. Takúto funkciu možno samozrejme napísať ako podprogram a podľa potreby ju volať pomocou inštrukcie volania (Call F), ale niekedy môže byť pokladaný takýto spôsob za málo efektívny. Ak je totiž funkcia veľmi krátka, tak niekedy jej administratíva, t.j. odovzdanie parametrov, úschova potrebných obsahov registrov, úschova návratovej adresy, skok do funkcie, návrat z miesta volania z funkcie do miesta volania a výber použitých parametrov, je dlhší ako samotný užitočný kód funkcie. Táto administratíva samozrejme zdržuje priebeh programu. Pomocou zadefinovania makra (telo makra vložené medzi pseudo/op MACRO a zakončovacíiu inštrukciu ENDM F) pred prvým výskytom v programe možno zjednodušiť tvar zdrojového programu. Ak sa potom hocikde v zdrojovom programe vyskytne príslušné meno makra preprocesor assemblera ho nahradí konkrétnymi inštrukciami z tela definície makra – rozvinie makro v mieste vyskytu mena makra. Samozrejme pri použití makra sa zväčší dĺžka programu. Je teda na programátorovi akým spôsobom optimalizuje svoj program – či bude kratší a pomalší alebo dlhší a rýchlejší. Pri písaní komplikovanejšich programov si možno makra pripraviť do súboru .lib (F) - vytvoriť knižnicu makier a tú pomocou príkazu include automaticky pripojiť k zdrojovému súboru.

Oddelený preklad zdrojového textu

Niekedy je výhodné rozdeliť si program do niekoľkých súborov a každý súbor preložiť zvlášť – vznikne tak niekoľko .obj súborov, ktoré sa spoja do jedného spoločného programu až pomocou zostavovacieho programu (linkera). Na prvý pohľad to vyzerá ako zbytočné skomplikovanie, ale v praxi je to jediný spôsob ako rozumne zvládnuť prácu s väčšími programami (F). Tento spôsob je výhodný aj s ohľadom na trvanie prekladu a obsadenie pamäte pri preklade. Pri opakovanom preklade (najčastejšie pri ladení pomocou debuggera) potom stačí prekladať len ten súbor, ktorý bol skutočne modifikovaný.
 
 

Podmienený preklad

V mnohých prípadoch sa zložitejšie programy doplňujú rôznymi pomocnými výpismi, testami a pod., ktoré majú uľahčiť odladenie programu. Po odladení programu sú tieto doplnkové informácie už nepotrebné, zdržujú vykonávaný program a treba ich z programu odstrániť. Často sa pri záverečnom zdokonaľovaní podarí zmazať aj potrebné časti, ktoré využíva program. V assembleri pomocou rôznych podmienených príkazov (F) možme určiť preprocesoru, ktoré časti budú podmienene prekladané a nebudú tak trvalou súčasťou programu.
 
 

Podprogram, procedúra, funkcia

Formálne v assembleri existujú len volania podprogramov v zmysle pre procedúru a funkciu. Procedúra je podprogram, ktorý nevracia návratovú hodnotu, na rozdiel od funkcie, ktorej úlohou je zistiť výstup pre špecifikované vstupné parametre.

Odovzdávať parametre do funkcie možno (F):

  • hodnotou (call by value). Pri odovzdaní vstupnej hodnoty parametra do podprogramu sa akákoľvek zmena pôvodného parametra vo vnútri funkcie po opustení funkcie stráca;
  • volaním odkazu na hodnotu. Pri volaní parametra pomocou odkazu sa používa pointer na adresu tohto parametra. Do zásobníka –skack sa odovzdá adresa parametra, s ktorým sa má pracovať.
Alokácia pamäti

Každá premená musí mať behom svojej existencie pridelený pamäťový priestor (F), ktorý veľkosťou zodpovedá premenej. Meno premenej (identifikátor) je vlastne symbolická adresa tohto pamäťového priestoru. Akcia, ktorá vyhradzuje pamäťový priestor sa nazýva alokácia. Poznáme dva základné typy alokácie – statickú a dynamickú.

Statická alokácia pamäti – miesto v pamäti (v dátovej oblasti – data area F) sa alokuje už počas prekladu, teda pred spustením programu. Tento typ alokácie sa používa vtedy, ak dopredu dokážeme zadefinovať prekladaču nároky programu na pamäť. Počas vykonávania programu sa nevykonáva žiadna manipulácia s prideľovaním pamäte. Statická alokácia vymedzuje miesto v dátovej oblasti. Globálne premené (F) môžu byť alokované len staticky.

Dynamická alokácia pamäti – miesto v pamäti (v hromade – heap alebo v zásobníku - stack F) sa alokuje počas behu programu. Počas behu programu sa teda alokuje pamäť určitej dĺžky, ktorá nemá špecialne symbolické meno – identifikátor. Táto alokácia sa zaisťuje sama pri volaní funkcie s využitím informácie o kóde, ktorý sa alokuje v zásobníku – stack. Dynamické prideľovanie pamäti zo zásobníku – skack je najčastejšie používaný spôsob. Pomocou heapu možno prideliť blok pamäti potrebnej veľkosti (ktorú musíme sami určiť) pre novo zadefinovaný zásobník (F). Po skončení manipulácie s dynamickou pamäťou v oblasti novozadefinovaného zásobníka treba zabezpečiť podmienky návratu do pamäti pôvodného zásobníka. Existencia lokálnych premených začína pri vstupe do funkcie (podprogramu) a končí sa pri výstupe z tejto funkcie. Potom môže byť pamäť, použitá vo funkcii pre túto premenú, využitá pre iné účely, napr. pre inú lokálnu premenú definovanú v inej, práve prebiehajúcej funkcii.

Globálna premená, resp. parameter – premená, ktorej existencia začína so spustením programu a končí s ukončením programu (F).

Lokálna premená, resp. parameter – premená, ktorej existencia začína po vstupe do procedúry, v ktorej je definovaná a končí sa s ukončením procedúry (F). Volanie funkcie (podprogramu, ktorý používa lokálny parameter) môže byť aj vhniezdené – jedna funkcia môže obsahovať vo svojom tele volanie ďalšej funkcie. Normálne (bez dodatočných úprav) sú formálne parametre a lokálne premené teda prístupné len vo funkcii, v ktorej boli definované (podľa toho ako boli ukladané príslušné parametre do zásobníku - stack).
 
 
 


[Návrat]
 


If you have comments or suggestions, email me at Kollar@fmph.uniba.sk