První program, základní instrukce

Konečně jsi se prokousal teoretickými řečmy. To svědší o tom, že tě zřejmě assembler opravdu zajímá, proto se už pustíme do prvních instrukcí. V závorce za každou novou instrukcí je její plné jméno a překlad do češtiny.


Tyto instrukce pro začátek stačí, teď si můžeš napsat první program. Přečti si všechny zadání příkladů k odzkoušení, protože v nich nalezneš popisy např. služeb DOSu, které budeš v tom kterém příkladu potřebovat. Mnou psaná vzorová(?) řešení máš v odkazu dole zabalená do ZIPu.

  1. Příklad č. 1
    "Ahoj světe"

    Kdo by neznal program "Ahoj světe", byl to první program nás všech vypisující právě tuto hlášku. Teď nějaké údaje.

    1. Jak skončit programu už víš-INT 20H. Mimochodem, to jsem asi nezdůraznil-program neskončí, pokud se dostane jakoby na konec zdrojáku(END START). Překladač negeneruje žádné INT 20H na konec programu a pokud bys na to spoléhal, došlo by ke zboření.
    2. Jak vypsat řetězec. Nejjednodušší je to přes službu DOSu "Vypiš řetězec", která má tyto parametry :
      AH = 9Hčíslo služby
      DS:DXadresa řetězce. DS máš nastavené od spuštění, zbývá jen nastavit DX na offset textu
      Služba začne se znakem na adrese DS:DX a vypisuje znaky(včetně např. znaku 10-další řádka a znaku 13-návrat kurzoru na začátek řádky) dokud nenajde znak "$". Tím se končí.

  2. Příklad č. 2
    "Ahoj světe 2"

    Udělej program, který vypíše tento text : "Stoji to 50$. Vic ne.". Bylo by úplně to samé, jako program č. 1, ale rozdíl je v tom, že službu DOSu AH=9 nedonutíš, aby vypsala znak "$". Musíš použít něco jiného. To je služba AH=2, která vypíše na obrazovku(lépe řečeno na standartní výstup) znak, který dostane v registru DL.

  3. Příklad č. 3
    "Detektor klávesy"

    Napiš program, který nejprve počká na nějakou klávesu a pak vypíše text. Pokud stiskl "1", vypíše "Bylo to číslo 1", "2"-"Bylo to číslo 2", "3"-"Bylo to číslo 3" nebo "Byla to nějaká jiná klávesa". Co potřebuješ znát ?

    1. Na klávesu se čeká pomocí přerušení INT 16H. Číslo služby je AH=0 a přerušení ti vrátí tyto údaje: V registru AL je ascii kód stisknuté klávesy a v AH je scan kód(ten tě zatím nemusí zajímat).
Doporučuji se podívat do výsledného COMu, abys viděl, jak je ten který program dlouhý(lépe říct krátký) a že většinu ho navíc zabírají texty určené k vypsání.

Vzorová řešení

Úvodní stránka Registry procesoru Aritmetika, zásobník
Rejstřík

Stránku připravuje Lukáš Valenta, 1. v celostátním kole soutěže v programování, kategorie mládež.