- 11 - db - v adresni casti musi byt jeden nebo vic vyrazu od- delenych carkami. V pripade pseudoinstrukce db jako vyraz muze byt tez retezec znaku uzavrany v apostro- fech, dw - v adresni casti musi byt jeden nebo vic vyrazu odde- lenych carkami, equ - v poli navesti musi byt navesti a v poli adresy musi byt vyraz, ent - v poli adresy musi byt jedno nebo vic navesti odde- lenych carkami, ext - v poli adresy musi byt jedno nebo vic navesti odde- lenych carkami, end - pole adresy musi byt prazdne. 2.3.3 Psani radku Radek se pise beznym zpusobem, a pri tom se vyuzivaji ty- to specialni tlacitka: CS+8 - presune kurzor na nasledujici znak, hranice radku se kontroluji, CS+5 - presune kurzor na predchazejici znak, hranice rad- ku se kontroluji, CS+9 - vlozi mezeru na pozici kurzoru a zbytek pole po- sune doprava, CS+0 - vymaze znak oznaceny kurzorem a zbytek pole posu- ne doleva. Kdyz je kurzor za poslednim znakem rad- ku, posune se o jeden znak doleva a znak vymaze, CS+4 - posune kurzor na zacatek dalsiho pole, hranice radku se konstroluji, CS+1 - presune kurzor na zacatek pole nebo na zacatek predchazejiciho pole, hranice radku se kontroluji, SS+space - nastavi kurzor na posledni znak v poli adresy, space - vyplni zbytek pole mezerami a kurzor nastavi na zacatek dalsiho pole. Tato funkce je potlacena v poli poznamky, v radku poznamky, nebo kdyz je mezera soucasti retezce nebo znakove konstanty. V techto pripadech se mezera normalne ulozi do textu. Dalsi ridici znaky zpusobuji ukonceni psani radku. Radek se syntakticky zkontroluje. Kdyz nektere pole nevyhovuje predpi- su, kurzor se nastavi na jeho zacatek, zazni zvukovy signal a u- zivatel musi radek opravit. Syntakticky spravny radek se pomerne komplikovane kompri- muje a opet se prevede do zdrojoveho tvaru. Potom se porovna s puvodnim radkem a pokud se tyto dva radky nerovnaji, vypise se radek, ktery vytvoril system misto puvodniho radku a zazni zvu- kovy signal. Kdyz je uzivatel s novym radkem spokojen, stiskne ENTER a pokracuje v praci, jinak ho muze opravit. - - 12 - Na prvni pohled komplikovany system je pro uzivatele prak- ticky neviditelny. Kdyz jsou totiz radky stejne (a to je vzdy, kdyz je radek spravne napsany), pokracuje se normalne v praci. Pomoci tohoto mechanizmu se objevi chyby: - preteceni (prilis velka konstanta se komprimovanim zme- ni), - neformalizovany zapis konstanty (hexadecimalni konstan- ta musi mit sudy pocet bytu, pred decimalni konstantou nesmi byt nuly), - formalne spravne, ale neexistujici instrukce (napr. in- strukce add hl,ix se pretvori na instrukci add ix,ix a tim se zjisti chyba). **************************************************************** System MRS (moduly EDI, ASM, DBG) spravne zpracuje i tzv. skryte instrukce. Jsou to jednak instrukce SLL (operacni znak CB30 az CB37) a instrukce ekvivalentni instrukcim, ktere pracuji s re- gistry H a L, ale s prefixem DD resp. FD). Tyto potom pracuji s vyssim nebo nizsim bytem indexregistru IX nebo IY. Tyto instruk- ce se zapisuji tak, ze na misto registru H se pise XH nebo YH a na misto registru L se pise XL nebo YL. Ne kazda nahrada napr. registru H registrem XH je mozna (napr. kdyz uz instrukce ma prefix CB, tak se H neda nahradit XH). Blize o skrytych instruk- cich viz v odborne literature. Jinak jedina odchylka od standardniho zapisu instrukci je, ze instrukce EX AF,AF' se pise bez apostrofu, tedy EX AF,AF **************************************************************** V pripade spravneho radku dalsi akce zavisi na pouzitem ridicim znaku. CS+7 - kurzor se nastavi na zacatek predchazejiciho radku. Kdyz je kurzor na prvnim radku obrazovky, cela ob- razovka se posune o radek dolu. Kdyz je kurzro na prvnim radku textu, zazni zvukovy signal a nic se nestane. CS+6 - kurzor se nastavi na zacatek nasledujiciho radku. Kdyz je kurzor na poslednim radku obrazovky, posune se cela obrazovka o radek nahoru. Kdyz je kurzor za poslednim radkem textu, ozve se zvukovy signal a nic se nestane. CS+3 - vypise se predchazejici obrazovka textu a kurzor je na zacatku prvni radky obrazovky. CS+2 - vypise se nasledujici obrazovka textu a kurzor je na zacatku prvniho radku obrazovky. SS+ENTER - vypise se nova obrazovka textu tak, ze radek, na kterem byl kurzor, se stane prvnim radkem obra- zovky. CS+SS - vymaze se radek, na kterem byl kurzor a zbytek ob- razovky se posune nahoru. V tomto pripade se neana- lyzuje syntakticka spravnost radku. Kdyz je kurzor za poslednim radkem textu, ozve se zvukovy signal a nic se nestane. - - 13 - CS+ENTER - za radkem, na kterem je nastaven kurzor, se vy- tvori jeho kopie. ENTER - text na obrazovce pocinaje radkem, na kterem je kurzor, se posune smerem dolu, a tim se vytvori mi- sto pro vlozeni noveho radku. Kdyz je kurzor na poslednim radku obrazovky, toto misto se vytvori posunem celeho textu o radek nahoru. Kdyz je kur- zor za poslednim radkem textu, zazni zvukovy signal a nic se nestane. BREAK - Editor vypise text edi> do dialogoveho radku a prejde do prikazoveho rezimu. Odeslani jinych ridicich znaku ma za nasledek zvukovy signal a nic se nestane. Kazde tlacitko ma opakovaci schopnost, tzn. ze jeho podrzeni ma stejny ucinek, jako kdyby se opetovne stisklo. 2.3.4 Chybova hlaseni Na velkou vetsinu chybnych akci reaguje Editor zvukovym signalem a pripadne nastavenim kurzoru na chybnou polozku. Exi- stuji vsak dva chybove stavy, nasledkem kterych Editor vypise chybove hlaseni do dialogoveho radku a po stisknuti tlacitka ENTER se rizeni vrati systemu MRS. mem full - tento vypis znamena, ze pamet urcena na zapis tex- tu se zaplnila. Je nutne text zkratit, prip. vyma- zat moduly z binarni knihovny (viz Program na ob- sluhu knihovny). Prakticky je ale tento stav zrid- kakdy, protoze velikost volne pameti staci na cca 6000 radku zdrojoveho textu. Kdyz doslo k preplne- ni pameti, uzivatel vyvola opet Editor, prikazem ln=0 prejde do obrazoveho rezimu, tlacitkem CS+SS vymaze radek, pri kterem doslo k preplneni a tla- citkem SS+ENTER obnovi obrazovku. Jiny duvod pro vypis tohoto hlaseni je, kdyz se zaplni tabulka symbolu. Tato tabulka je ulozena za textem a dynamicky se rozsiruje. Jeji maximalni kapacita je vsak 255 navesti. Navesti, ktera se nepouziji pri prekladu se automaticky vymazou. Po skonceni prekladu (viz popis Prekladace sestavova- ciho jazyka). 2.4 Prekladac sestavovaciho jazyka 2.4.1 Spusteni prekladu Prekladac sestavovaciho jazyka (v dalsim textu tez Assem- bler) se vyvola prikazem asm, za kterym jako dalsi parametr nas- leduje jmeno prekladaneho modulu. Assembler vyhleda dany modul v binarni knihovne a zdrojovy text prelozi na misto puvodniho mo- dulu. Pokud tento modul v knihovne neni, Assembler prelozi zdro- jovy text jako novy modul a pripoji ho na konec knihovny. - - 14 - Kdyz v prikazu asm chybi jmeno modulu, vytvori se modul s prazdnym jmenem na konci knihovny. Takovyto modul je v knihovne jen docasne, kazdy dalsi preklad ho smaze. Jinymi slovy, uzivatel by mel prelozit a odladit modul nejprve bez jmena, a az kdyz je vse v poradku, zaradit modul do knihovny prikazem asm jmeno. Assembler v kazdem pripade sleduje hranice pameti, ktera je modulu prirazena uz velikosti mista, ktere zabiral puvodni modul, nebo velikosti mista od konce knihovny po konec volne pameti. Asembler preklada text pripraveny Editorem do prislusne pameti a na obrazovce vytvari vypis prekladu. Radek vypisu se vypise do dvou az trech radku obrazovky nasledovne: 1. az 5. znak - poradove cislo radku, 7. znak - obsahuje mezeru nebo kod chyby. Chybove kody jsou popsane dale. 9. az 12. znak - hexadecimalni vypis hodnoty citace adres, 14. az 21. znak - hexadeciamlni vypis kodu Druhy a v pripade poznamky i treti radek obrazovky obsahu- je vypis zdrojoveho textu. Vypis je mozne kdykoliv zastavit tlacitkem CS+S a potom znovu spustit tlacitkem CS+Q. Po skoneni prekladu vypise Assemb- ler informaci o poctu chyb errors: n kde n je pocet zjistenych chyb. Pokud se behem prekladu vyskytly chyby, modul se do knihov- ny nezaradi. Je treba si uvedomit, ze pokud jsme chteli prelozit text pres modul, ktery uz v knihovne byl, je tento modul chybnym prekladem znicen, ale funkce ostatnich modulu jsou zachovane. Pokud se prelozil cely text (tzn. ze pseudoinstrukce end je poslednim radkem textu), prohledne se tabulka symbolu a v prekladu nepouzite symboly se vymazou. Na zaver prekladu, pokud byl pozadovan vystup vsech radku prikazem *a (viz oddil 2.4.2), se vypise tabulka pouzitych nave- sti. Navesti jsou usporadane podle abecedy a za jmenem navesti nasleduje jeho hodnota jako hexadecimalni cislo. Navesti popsane pseudoinstrukci ext maji misto hodnoty, ktera muze byt jeste ne- znama, znaky xxxx. 2.4.2 Vyhodnoceni vyrazu Vyraz v poli adresy se vyhodnoti beznym zpusobem, tzn. ze decimalni a hexadecimalni konstanta ma hodnotu danou svym zapi- sem, znakova konstanta ma hodnotu danou hodnotou ASCII znaku, ktery ji representuje a hodnota navesti je dana velikosti citace adres v okamziku, kdy se navesti vyskytlo v poli navesti. Specialni unarni vyrazy jsou >symbol, ktery definuje hod- notu vyssich bitu ze 16-ti bitove hodnoty, a do dialogoveho radku a ocekava jeden z techto prikasu: lst - vypise seznam modulu ulozenych v knihovne. Pro kazdy modul tez vypise seznam vstupnich navesti s jejich hodnotami v hexadecimalnim tvaru. Stejne jako pri vypisu, ktery dela prekladac, je mozno tento vypis zastavovat a spoustet tlacitky CS+S a CS+Q nebo pre- rusit tlacitkem BREAK. Tehdy system vypise do dialo- goveho radku text break a po stisknuti tlacitka ENTER se rizeni vrati ridi- cimu modulu. del - vymaze z knihovny posledni modul. Moduly uvnitr kni- hovny se nedaji vymazat tak, aby se usetrilo misto (aby se udelala komprese knihovny), nebot jsou pre- lozeny v absolutnich adresach.Vymazani vnitrniho mo- dulu bez usetreni pameti (napr. kdyz chceme pouzit vstupni navesti, ktera jsou v nem definovana, v ji- nem modulu) je mozne, kdyz prelozime prazdny modul (sestavajici z pseudoinstrukce END) se stejnym jme- nem. Posledni modul bez jmena se automaticky vymaze na zacatku kazdeho prekladu. Zakladni modul knihovny SYSMOD neni mozno vymazat. sav - stejne jako pri ukladani zdrojoveho textu tento pri- kaz ulozi binarni knihovnu na magnetovonovou pasku. Pred jeho odeslanim uzivatel musi zapnout magnetofon a po ulozeni knihovny se prihlasi opet modul LIB. V poslednich 2 bytech hlavicky jsou zapsane 0, cimz system rozezna moduly knihovny od jinych modulu se stejnym jmenem. Pred ulozenim knihovny se vymaze pripadny modul bez jmena. loa - slouzi k nahrani binarni knihovny z magnetofonu. Na- hravani se provede stejnym zpusobem jako v pripade zdrojoveho textu (viz tam). Program kontroluje, zda se nahranim knihovny neprepise pripadny zdrojovy text. V tomto pripade vypise chybove hlaseni: mem full a po stisknuti klavesy ENTER se rizeni vrati modulu MRS. Nova knihovna vzdy nahradi starou knihovnu. ent - za prikazem nasleduje navesti, ktere je v knihovne popsane jako vstupni bod. Od tohoto navesti se potom - - 20 - spusti program prikazem run. Pokud uzivatel jeste nepouzil prikaz ENT, nebo za nim neuvedl zadne nave- sti, prikaz run vrati rizeni okamzite systemu MRS. run - timto prikazem se spusti uzivatelsky program od na- vesti popsane prikzem ENT. Posledni instrukce RET v uzivatelskem programu vrati rizeni systemu MRS. mon edi asm lnk ald dbg - ukonci praci programu LIB a rizeni se vrati prislus- nemu modulu. 2.6.2 Zakladni modul knihovny Tento modul se nazyva SYSMOD a musi byt v knihovne vzdy pritomny. Obsahuje ruzne podprogramy systemy MRS popsane jako vstupni navesti. Uzivatel tedy nemusi vedet, na jakych absolut- nich adresach se moduly nachazeji, ale oznacuje je jmeny pomoci pseudoinstrukce EXT. Modul SYSMOD obsahuje tato vstupni navesti: memory - obsahuje adresu prvni volne pametove bunky za knihvnou. Tato hodnota se iniciuje az pri vstupu do ladiciho programu. memtop - obsahuje adresu prvni obsazene pametove bunky. MEMORY a MEMTOP umoznuji praci s dynamickou pame- ti, tj. kdyz napr. uzivatel v programu pouzije instrukce ext memory,memtop ld de,(memory) ld hl,(memtop) tak ziska v registrech a hranice pou- zitelne pameti, tj. bezici program ma k dispozici pamet od do . dcbn - konverze retezce decimalnich cislic na 16-ti bi- tovou binarni hodnotu vstup: = adresa retezce vystup: = adresa konce retezce (retezec kon- ci libovolnym symbolem mimo 0-9) = konvertovana binarni hodnota = ukoncovaci znak meni se: , , hxbn - konverze retezce hexadecimalnich cislic na 16-ti bitovou binarni hodnotu. vstup: = adresa retezce vystup: = adresa konce retezce (retezec kon- ci libovolnym symbolem mimo cislic 0-9 a pismen A-F = konvertovana binarni hodnota meni se: , ,