Obsah    Kapitoly: 12345678,  |  X.1X.2X.3X.4,  |  Y1 Y2 

4) "!!Hello World!!"

Tak, touto dobou, pokud jste četli předcházející kapitoly byste měli být schopni s trochou pomoci napsat nějaký jednodušší program. Protože v této učebnici asi těžko proberu vše, budete muset používat nějakou tu elektronickou učebnici o Assembleru. Doporučuji
ATHELP, SYSMAN nebo něco podobného.

Následující program, který budete vytvářet jste už viděli. Je to jednoduchá aplikace typu "Hello world". Pokud byste ani trochu nevěděli, jak na ní, budete se muset podívat do nějaké té učebnice. Podíváte-li se na přerušení Int 21H (přerušení DOSu), zjistíte, že DOS poskytuje několik desítek funkcí, které by vám mohli pomoci. Hned devátá funkce je "Vypiš řetězec". A tu zrovna potřebujeme.

U podrobného této popisu funkce bude nějaká podobná tabulka:
DOS Fn 09H - Zobraz řetězec
VSTUP
  AH -> Číslo funkce DOSu 009H
  DS:DX -> Adresa řetězce ukončeného znakem '$'  
VÝSTUP
  Nic
+ nějaké poznámky o funkci

Jak bychom to přeložili do češtiny? Není to zase tak složité. Před tím, než zavoláme přerušení DOSu (Int 21H), musíme provést následující kroky:
  • Registr AH musí obsahovat číslo funkce DOSu, neboli 09H
  • DS by měl být nastaven na datový segment programu. (To už je zajištěno v hlavičce programu kód "ASSUME CS:A,DS:A")
  • Registr DX musí mít hodnotu offsetu, na kterém začíná řetězec znaků, zakončený znakem '$'
  • Žádné výstupy od této funkce nečekejte.

    Jednoduché, ne? Potřebujete znát jen dvě instrukce, umět definovat proměnné zjistit offset proměnné a vědět, jak napsat hlavičku k programu. To vše už umíte, až na zjištění offsetu proměnné. Na to je jednoduchý příkaz Offset.

    Pokud chcete, zkuste napsat program sami, nebo si přečtěte následující kód s komentáři. Jedná se o podrobně rozebraný vzorový příklad.

    A SEGMENT ; Název segmentu ASSUME CS:A,DS:A ; Nastavení registrů na začátek onoho segmentu ORG 100H ; A nakonec, kde budeme začínat .386 ;============================================== Start: Mov Dx, Offset Text Mov Ah,09H ; Číslo fce DOSu pro výpis na obrazovku Int 21H Int 20H ; Konec programu ;============================================== Text DB '!!Hello World!!$' ; Definice proměnných ;============================================== A ENDS ; Konec segmentu END START ; Konec programu

  • První tři řádky už znáte. Je to hlavička programu, určená pro překladač.
  • Instrukce .386 je opět pro překladač, určuje, která instrukční sada se v programu používá. ( spustitelné od 386 a víc)
  • Start: je takzvané návěští. vzhledem k tomu, že je v posledním řádku uvedeno END START, program začne na návěští se jménem Start.
  • Mov Dx,Offset Text - Do registru DX přiřaď offset proměnné Text.
  • Mov Ah, 09H - Do registru Ah dej 09H, neboli číslo funkce DOSu pro výpis textu na obrazovku.
  • Int 21H - Vyvolej přerušení. V této fázi program vypíše na obrazovku paměť začínající na adrese DS:DX a ukončenou znakem '$'.
  • Int 20H - Přerušení, které ukončí program. (Lze též použít fci DOSu 4CH - snad bych to i doporučoval)
  • Text DB '!!Hello World!!$' - Po skončení programu definujeme proměnné. Konkrétně proměnnou s názvem Text a řetězcem znaků '!!Hello World!!$'. (Na toto místo v kódu program nikdy nedojde, protože se přeruší. Pokud by program došel až sem, jednotlivé byte by byly přeloženy na instrukce, což by pravděpodobně způsobilo spadnutí programu.)
  • Poslední dva řádky jsou opět pro překladač. Ukončení segmentu a programu.

    Když o tom teď tak přemýšlím, měli byste být schopni napsat ještě jeden prográmek. A to takový, který by na obrazovku vypsal znak, který uživatel stisknul. Malá rada: Podívejte se na služby klávesnice (Int 16H). Jinak už napsaný kód je přiložen v adresáři ASM. (Klavesa.asm)

    Předchozí kapitola Nahoru Následující kapitola