+----------------------+
|Assembler pro blbé č.2|
+----------------------+
Minule jsem začal trošku složitějším příkladem, takže teď se
vrátíme zpátky na zem a začnu klasickým Hello World. Tedy programem,
který na obrazovce vypíše nápis "Hello World".
MODEL SMALL
.STACK 200
.DATA
Napis db 'Hello World'
.CODE
START:
mov ax, seg Napis ;DS:DX ukazuje na napis
mov ds, ax
mov dx, offset Napis ;DS:DX ukazuje na text
mov ah, 9 ;funkce zobraz retezec
int 21h
mov ax, 4c00h ;Konec programu, navrat do DOSu
int 21h
END START
Objevuje se nám tu poprvé volání služby DOSu. To je to int
21h. Je to vyvolání přerušení číslo 21h. Můžete si to představit
jako vyvolání nějaké procedury číslo 21h. Tato procedura potřebuje
parametry, aby věděla co má dělat. V našem případě jsou to parametry
dva. V AH zadáme číslo služby. V našem případě 9 což znamená výstup
řetězce. V DS:DX je uložena adresa tohoto řetězce. Řetězec se
ukončuje znakem .
Příkaz mov ax, seg Napis uloží do ax segmentovou část adresy
proměnné Napis. mov dx, offset Nápis uloží do dx část offsetovou.
Přerušení int 21h umí spoustu věcí, které by se musely jinak
programovat ručně. Umí to například otevírat, číst a zapisovat
soubory. Spouštět další programy. Číst klávesnici, psát po
obrazovce, atd... Toto přerušení se vyvolává vždy s číslem služby v
AH a dalšími parametry v ostatních registrech.
Ukážeme si například využití služby číslo 30h
(Zjisti verzi DOSu)
MODEL SMALL
.STACK 200
.DATA
Napis db 'Cislo verze DOSu je: '
.CODE
START:
mov ax, seg Napis ;DS:DX ukazuje na napis
mov ds, ax
mov dx, offset Napis ;DS:DX ukazuje na text
mov ah, 9 ;funkce zobraz retezec
int 21h
mov ah, 30h ;funkce 30, zjisti verzi
int 21h ;Hlavni cislo verze je ted v al
add al, 48 ;prictu 48, abych dostal ascii kod cisla
mov dl, al
mov ah, 2 ;funkce tisk jednoho znaku z DL
int 21h
mov ax, 4c00h ;Konec programu, navrat do DOSu
int 21h
END START
Sežeňte si někde program jménem SYSMAN, to je hypertext právě
o takových věcech. Mimo jiné je tu i seznam všech těchto přerušení.
Dozvíte se, co musíte kam strčit a co, po skončení INT, kde hledat.
Pro začátek jsem připravil seznam služeb pro práci se soubory,
budeme je pořebovat příště. Tady je
Takže příště si skusíme napsat konvertor češtiny v assembleru
a dozvíte se, jak se pracuje s procedurami.
Pokud se se mnou budete chtít spojit máte dvě možnosti:
FIDO a internet.
Moje fidonetí adresa je 2:421/59.
A internetí je: SysOp@pizi.fido.cz
Jó a taky mám vlastní WWW stránku, kde jsou všechny tyhle texty,
které píšu i do VÝHNĚ.
www.geocities.com\SiliconValley\Park\8209
Čaute příště PIŽI
výheň