Professional Documents
Culture Documents
MNAV nPC2
MNAV nPC2
2 1
2 Systémové služby
Pro programování a řešení algoritmů nepostačuje pouze znalost instrukcí a direktiv
jazyka symbolických instrukcí. Pro komunikaci s okolím (pro tzv. vstupně-výstupní operace)
na běžném osobním počítači s operačním systémem je nutné využívat systémových služeb.
Mezi nejdůležitější systémové služby patří služby OS (konkrétně DOSu) a tzv. služby
obrazovky. Podrobný popis všech systémových služeb lze nalézt v systémovém manuálu
(Sysman).
Služeb DOSu je přes 120 (liší se dle verze DOSu) a některé služby přitom mají
vícenásobnou funkci. Služby DOSu se volají pomocí funkce ROM-BIOSu číslo 21h. Volání
se provádí pomocí vektoru přerušení (jejich celkový počet je 256). Konkrétně služba (funkce)
DOSu se zavolá instrukcí int 21h. Která konkrétní služba a s jakými konkrétními parametry
má být vykonána, je specifikováno pomocí hodnot v implicitních registrech. Obsah
implicitních registrů bývá zachován s výjimkou těch registrů, které slouží k navrácení
výstupních parametrů služby.
Typické použití implicitních registrů:
ah – číslo požadované služby,
al – vstupní data pro službu nebo číslo podfunkce, pokud se daná služba rozděluje na
podfunkce,
bx – identifikátor souboru,
cx – atributy souboru,
ds:dx – adresa uložení vstupních/výstupních dat,
es:bx – adresa uložení vstupních/výstupních dat,
es – adresa segmentu pro alokaci paměti.
Úspěšné provedení služby se signalizuje stavem bitu přenosu CF (příznakový bit Carry
Flag). Je-li CF=0, služba proběhla úspěšně. Pokud je CF=1, došlo k chybě, jejíž kód je uložen
v registru ax.
Služby DOSu jsou pojmenovány dle čísla služby a toto číslo služby se vždy před
voláním přerušení int 21h ukládá do registru ah.
Služby obrazovky se jmenují dle čísla služby a toto číslo služby se vždy před voláním
přerušení int 10h ukládá do registru ah.
V případě adaptéru EGA se rozumí počet barev jako počet současně zobrazitelných
barev, které lze však vybrat z širšího množství (tzv.paleta). Tato paleta u EGA představuje
celkem 64 odstínů, u VGA 262144 odstínů. Adaptér EGA a VGA připouští přičtení 80h k al a
inicializace se provede bez smazání obrazovky.
3.3 Uspořádání zdrojového kódu pro spustitelný soubor typu *.exe (32,
64 bit WIN)
; zahrnutí externích zdrojových kódů
[%include ...]
; importování externích funkcí z knihoven
extern _ ExitProcess
import _ ExitProcess _ kernel32.dll
; definice datového segmentu
[segment _ data _ class=DATA _ use32 _ align=16]
szWndClassName: _ DB _ "WIN CLASS32",0
… Data v datovém
hInstance _ dd _ 0 segmentu
…
; definice kódového segmentu
[segment _ code _ USE32 _ class=CODE]
; začátek kódu, získání handlu programu
..start: push _ dword _ NULL
call _ [GetModuleHandle]
…
; registrace, vytvoření a zobrazení mateřského okna
Vytvoření
…
mateřského okna
call _ [RegisterClassEx]
v kódovém segmentu
…
call _ [CreateWindowEx]
…
call _ [ShowWindow]
; načtení, překlad a odeslaní zprávy proceduře mat. okna
.MessageLoop:
…
call _ [GetMessage]
…
call _ [TranslateMessage]
Smyčka zpracování
…
zpráv v kódovém
call _ [DispatchMessage]
segmentu
…
; ukončení, obsluha zprávy o ukončení programu.
.Finish
push _ dword _ NULL
call _ [ExitProcess]
; procedura mateřského okna
WndProc: Podprogram
WndProc_PARAMBYTES _ EQU _ 16 mateřského okna
enter _ 0,0 v kódovém segmentu
; obsluha zpráv předaných smyčkou zprac. zpráv
mov _ eax, _ dword _ [ebp+12]
cmp _ eax, _ WM_CLOSE
je _ near _.Destroy
…
TEXTOVÝ EDITOR
ASSEMBLER
přepínač
- o *.com *.com - spustitelný soubor *.com
- l *.txt *.txt - textový výpis překladu
DEBUGGER
spuštění ladění
Obrázek 3.1: Přímý překlad na *.com (16 bit DOS) pomocí překladače NASM
Assembler je pro soubory typu *.asm překladačem a slouží k vytvoření souboru *.obj,
které obsahují tzv. kód relativních adres. V případě použití přepínače -l *.txt je také výstupem
textový soubor, ve kterém se vyskytuje zdrojový kód s očíslovanými řádky, příslušnými
TEXTOVÝ EDITOR
ASSEMBLER
přepínač
- fobj *.obj - kód relativních adres
- l *.txt *.txt - textový výpis překladu
LINKER
DEBUGGER
spuštění ladění
Obrázek 3.2: Fáze překladu na *.exe (16 bit DOS) pomocí překladače NASM
ASSEMBLER
přepínač
- fobj *.obj - kód relativních adres
- l *.txt *.txt - textový výpis překladu
LINKER
přepínač
-oPE -subsys gui *.exe - spustitelný soubor *.exe
DEBUGGER
spuštění ladění
Obrázek 3.3: Fáze překladu na *.exe (32, 64 bit WIN) pomocí překladače NASM
Dále je uveden konkrétní příklad překladu a linkování pro soubor typu *.exe DOS 16 b.
Uvedeny jsou dvě fáze vytvoření spustitelného souboru v příkazové řádce (předpokladem je
přítomnost všech potřebných souborů nasm.exe, alink.exe a pr1.asm v adresáři např. C:\asm\):