Tymto cislom casopisu BIT otvarame celkom novy serial - serial o assembleri procesorov radu INTEL 86. Procesory INTEL 86 sa nachadzaju v pocitacoch IBM PC, ktore sa pomaly ale isto stavaju najrozsirenejsim pocitacom nielen v kancelariach, ale aj v domacnostiach.

   Tento serial si v ziadnom pripade nekladie za ciel vam poskytnut podrobny navod ako pisat programy v strojovom kode a ani vas nenauci programovat tak dobre ze by ste mohli hned naprogramovat take demo ako napr. UNREAL od Future Crew. Toto vsetko sa musite naucit postupne sami usilovnou pracou - programovanim pri ktorom ziskate najviac skusenosti. Tento serial si tiez nekladie za ciel presne vymenovat cely instrukcny subor so vsetkymi jeho detailami. Na to sluzia tabulky strojoveho kodu 86, ktore su pomerne dostupne a daju sa lahko ziskat ci uz v tlacenej forme (knizky o 86) alebo v elektronickej forme (rozne programy - vyukove alebo referencne).

   Cielom tohto serialu je poskytnut vam najprv celkovy pohlad na procesor z hladiska jeho programovania v assembleri, potom orientacny prehlad instrukcneho suboru procesora a na koniec nejake male ukazky rutiniek a programov v tomto assembleri, na ktorych si tiez ukazeme pouzivanie sluzieb a podprogramov operacneho systemu MS-DOS bezne pouzivaneho na pocitacoch PC.

   Pri citani tohto serialu vam odporucame mat vzdy po ruke nejake podrobne tabulky instrukcneho suboru 86. Existuje uz viac vhodnych publikacii zaoberajucich sa danou temou, napr. "Instrukcny subor ASM 86" (napisal Ing. Karel Janu, Csc. a vydala Kniznica CSVTS). Tiez existuje pomerne vela elektronickych tabuliek - programov podrobne sa zaoberajucich instrukcnym suborom 86 - napriklad THE NORTON GUIDES (copyright 1987 by Peter Norton Computing), alebo LANGUANGE WINDOW (copyright 1986 by BLR Software Engineering). Znamy program TECH HELP (copyright 1985,1990 by Flambeaux Software Inc.) obsahuje iba zakladne informacie o instrukciach, preto ako podrobne tabulky nie je moc vhodny.

   Okrem podrobnych tabuliek instrukcneho suboru odporucame tiez mat po ruke nejaky popis sluzieb a podprogramov operacneho systemu. Prave tu je vhodny program TECH HELP alebo THE NORTON GUIDES. Zo zaciatku tieto tabulky nebudete moc potrebovat, ale potom neskor, ked si zacneme uvadzat priklady vyuzivajuce tieto sluzby, sa vam urcite zidu.

   Vsetky ukazky rutiniek budu pisane tak, aby sa dali priamo skompilovat a zlinkovat kompilatorom assembleru - programom TURBOASSEMBLER (Turbo Assembler, Version 2.02, copyright 1988,1990 Borland International; Turbo Link, Version 3.01, copyright 1987,1990 Borland International). Existuju aj ine prekladace, napr, MacroAssembler, ale syntax zapisu programu je pre vsetky prakticky taka ista a odlisnosti su len minimalne. Okrem samotnych prekladacov existuju aj specializovane editory assemblera, napr. The Programmer's editor (by Lostak Super Department), ktore vyuzivaju pre kompilaciu a spustanie programov uz existujuce kompilatory. Mnohi programatori pracuju tak ze vyuzivaju vyvojove prostredia vyssich programovacich jazykov (Pascal, C) a v nich direktivu ASM po ktorej mozu pisat priamo instrukcie assembleru.

   Urcite ste si vsimli ze sa tu casto spominaju dva pojmy: "strojovy kod" a "assembler". Tieto dva pojmy sa praxi dost casto zamienaju a preto je potrebne presne vysvetlit co ktory znamena a aky je medzi nimi rozdiel.

   Strojovy kod je "materinsky" jazyk samotneho mikroprocesora, je to postupnost instrukcii ulozenych v jednotlivych bitoch pamete, kde kazda instrukcia obsahuje z hladiska programatora jednu viac-menej elementarnu operaciu. Instrukcie okrem specifikacie operacie mozu obsahovat aj data (argumenty), s ktorymi sa ma dana operacia vykonat. Samotny procesor je vlastne okrem tohto svojho materinskeho jazyka ziadny iny nevie (je to totalny jazykovy antitalent), preto mu musime vsetko co po nom chceme aby robil, napisat v tomto jazyku. Napriklad tento kusok strojoveho kodu:

 11000111
 00000110
 00111111
 00000101
 01110110
 00011011
ulozi cislo 1B76h na adresu 053Fh.

   Lenze pisat programy vkladanim jednotiek a nul do jednotlivych bitoch pamete je pre cloveka dost nepohodlne a narocne, preto si clovek vymyslel pomocku - assembler. Assembler (tiez nazyvany jazyk symbolickych adries, JSA) je vlastne specialny zapis strojoveho kodu zrozumitelnejsi pre cloveka - namiesto hodnot jednotlivych bitov zodpovedajucich nejakej instrukcii sa v assembleri pise mnemotechnicke oznacenie tejto instrukcie. Mnemotechnicke oznacenie je akasi skratka, symbol, oznacenie, ktore bola vymyslene prave preto aby sa lepsie a lahsie zapametalo. Okrem toho assembler umoznuje zapisovat symbolicky nielen jednotlive instrukcie, ale aj jednotlive udaje, s ktorymi instrukcie narabaju. Lenze takemuto zapisu procesor nerozumie - a preto boli spravene specialne programy, zvane prekladace assembleru (tiez sa im zvykne jednoducho hovorit "assemblery"), ktore tento zapis prelozia do strojoveho kodu zrozumitelnemu procesoru. Napriklad ten isty kusok strojoveho kodu napisany vyssie by v assembleri vyzeral napriklad takto:

 DATA = 1B76H
 MOV ADRESA,DATA
 ...
 ADRESA: DW ?

   Skratka MOV je od anglickeho slova "move", pohyb. Jasne tu vidite, ze sa nejake data "pohybuju", cize inym slovom ukladaju na nejaku adresu oznacenu symbolom "adresa". A ze nikde nevidite vyssie spomenutu adresu 053Fh ? Nepotrebujete ju vidiet (ani vediet), samotnu adresu si prekladac assembleru vypocita sam, takze ani s tym sa uz nemusite trapit. A teraz si uprimne povedzte, ktory z tychto dvoch zapisov sa vam lepsie pameta a s ktorym by sa vam lepsie pracovalo ?

   Iste ste si vsimli, ze som tu v tychto prikladoch pouzil sestnastkovu sustavu pre zapis cisel. Viac o tejto sustave, ako i to preco ju budem uprednostnovat v buducich lekciach sa mozete viac docitat v casopise BIT v cisle 8/93, alebo tu.

   V buducich lekciach si uvedieme celkovy pohlad na procesor Intel 86 z hladiska programatora v strojovom kode - odborne povedane "programatorsky model procesora". Popiseme si ako sa da pristupovat do pameti, ake registre ma 86, na co sluzia tieto registre a ako sa daju pri programovani vyuzivat.

Nazad na obsah a dalsia lekcia