Professional Documents
Culture Documents
MNAV nPC3
MNAV nPC3
3 1
Podmíněné příkazy jsou realizovány pomocí instrukce podmíněného skoku jcc. Zda ke
skoku dojde nebo ne se instrukce jcc rozhodne dle nastavených příznakových bitů. Pro
nastavení příznakových bitů se používají instrukce cmp, test nebo logické funkce. Pomocí
těchto instrukcí se definuje podmínka jako výsledek porovnání dvou operandů.
Stejně jako podmíněné příkazy jsou cykly založené na podmíněných skocích. Rozdíl je
v tom, že se neskáče jako u podmíněných příkazů na adresy vyšší, ale na adresy nižší.
instrukce _ op3[,op4]
…
…
jmp _ návěští1 ; nepodmíněný skok na návěští1
návěští2: _ instrukce _ op7[,op8] ; sled instrukcí mimo cyklus
…
Cyklus s počítadlem:
Pokud to není nutné z jiných důvodů, doporučuje se používat nejjednodušší cyklus, což
je cyklus s podmínkou na konci. Pokud se používá cyklus s počítadlem pro řetězcové
instrukce, je vhodnější použít prefixovou instrukci rep. Součástí instrukčního souboru jsou
instrukce typu loop, které také umožňují realizaci cyklů různého typu s rozsahovými
omezeními (viz Sysman nebo instrukční soubor 8086).
Jak již bylo uvedeno, k definici názvu adresy a typu operandu, který na této adrese
může být uložen, slouží direktiva dX (db, dw, dd, dq, dt). Pro definici adresy řetězce se
používá direktiva db, která definuje právě jeden byte v paměti. V tomto případě jméno
(identifikátor) řetězce, není jménem celého řetězce, ale pouze prvního znaku v řetězci.
Direktiva dX obecně umožňuje současnou definici více adres v paměti pro hodnoty stejného
typu, přičemž adresy počínaje druhou výše již nemají svoje jméno.
Následující příklady doporučuji vyzkoušet pomocí služby DOS Fn 09h. Služba
zobrazuje řetězec z adresy retez až po jeho konec, který je dán znakem “$”. Každé zobrazení
řetězce z níže uvedených definicí adresy retez bude mít na obrazovce stejný výsledek.
Při vytváření uživatelského rozhraní je nutné vytvářet různá okna a rámečky, které se
vytvářejí ze speciálních znaků k tomu určených, přičemž některé z nich se velmi často
opakují. Mezi tyto znaky se řadí zejména linky ohraničení okna, jejichž přehled je uveden
v následující tabulce:
Tabulka 4.1: Znaky pro vytváření jednoduchého a dvojitého rámečku
Následující příklady doporučuji vyzkoušet např. pomocí služby DOS Fn 09h. Stejně
jako v předcházející kapitole, bude výsledek zobrazení všech tří možností definice adresy
retez stejný. Příklad zobrazuje horní část okna dvojitého rámečku.
Pro překladač není nutné, aby se dekadické hodnoty označovaly písmenem d, je možné
tímto definice pomocí ASCII kódů ještě dále zkrátit. Nejkratší a nejvhodnější definice objektů
pro rámečky a okna je použití dekadického ASCII kódu spolu s direktivou times.
Tímto způsobem se v paměti nadefinuje rozhraní programu. Po spuštění programu je
jednou s prvních fází jeho vykonávání zobrazení vlastního uživatelského rozhraní. K tomu se
používají služby obrazovky a zobrazení rozhraní lze provést několika způsoby.
Obecně je barevný atribut 8-i bitové číslo, které umožňuje barevné zobrazení objektů
grafického/textového uživatelského rozhraní. Toto číslo má dvě části, horní nibble (horní 4
bity) a dolní nibble (dolní 4 bity). Horní nibble specifikuje barvu pozadí a dolní nibble
specifikuje barvu popředí. V případě zobrazení znaku např. “A” je barvou popředí barva
písmene a barvou pozadí je barva jeho podkladu.
K dispozici jsou kombinace 16-i barev popředí s 16-i barvami pozadí. Jednotlivé
významy barevného atributu v rámci nibblu jsou součástí následující tabulky:
Tabulka 4.2: Možné barvy v textovém módu 2 při běhu programu v okně.
Např. barevný atribut 1Eh představuje takovou kombinaci barev, kdy se zobrazí žlutý
znak na tmavě modrém pozadí. Např. barevný atribut 55h nastaví barvu popředí i barvu
pozadí na tmavě fialovou barvu, takže zobrazované znaky nebudou viditelné.
Dále platí, že některé kombinace (8h až Fh) barev pozadí se svým zobrazením liší při
běhu programu v okně a při běhu programu v režimu celé obrazovky. V režimu celé
obrazovky nemají správnou barvu odpovídající tabulce a objekty blikají. Podrobný popis viz
Sysman – práce s paletou.
r0
r2 25
řádků
r0
r3
p 24
80 sloupců
Další parametry jednotlivých řádků jsou stejné, každý řádek má délku 80 znaků a každý
řádek je vykreslován od nultého sloupce.
Každý z jedinečných řádků bude vykreslen zvláštní službou VID Fn 13h. Opakující se
řádky budou vykresleny postupným voláním služby VID Fn 13h v cyklu. Pro vykreslení
celého rozhraní je vhodné vytvořit podprogram, který se volá na začátku hlavní části
programu.
Pro volání služeb DOSu, služeb obrazovky a zejména pak služby VID Fn 13h je vhodné
vytvořit pomocné objekty – makra. Tyto umožní významným způsobem zkrátit zdrojový kód.
Použití makra však nezkracuje přeložený kód, tedy nemá vliv na konečnou velikost programu.
Pro další zkrácení zdrojového kódu je možné makra ukládat do zvláštního souboru a u
momentálního zdrojového kódu používat pouze include tohoto souboru.