Funkce dosu (8086)
Funkce DOSu jsou různé služby řízení procesů, paměti, zařízení a souborů, které jsou přístupné libovolnému programu schopnému nastavovat registry a vyvolávat softwarová přerušení.
Postup použití funkcí DOSu:
- umístit číslo funkce DOSu do registru AH (má-li podfunkce, většinou se dávájí do AL)
- nastavit všelijaké ostatní registry tak, jak je potřeba pro použití dané funkce
- připravit potřebné buffery, ASCII řetězce a řídící bloky
- je-li to nutné, vědět o (nebo nastavit) DTA
- vyvolat přerušení INT 21H
- pohlídat si chybová hlášení vrácená DOSem (zkoumat vlajku Carry)
4Ch - EXIT
- ukončí program
| Vstup |
| AH |
= 4Ch |
| AL |
výstupní kód
- 0 - normální ukončení
- 1 - ukončení přes Ctrl-Break (INT 23h)
- 2 - ukončení přes kritickou chybu zařízení (INT 24h)
- 3 - ukončení přes funkci 31h KEEP
(?????????je to tak i 80286????????)
|
| Výstup |
| Nemá žádné výstupy - nemají smysl. |
09h - Zobraz řetězec
- vypsání znakového řetězce na obrazovku
- vypisovaný řetězec je je zakončen znakem '$'
- odřádkování se provede dvojicí znaků CR/LF - tedy z naky s kódy 13 a 10 (hexadecimálně 0Dh a 0Ah)
- pokud chceme vytisknout řetězec, který má obsahovat $, můžeme použít funkci 40h - zápis do souboru...
| Vstup |
| AH |
= 09h |
| DS:DX |
- ukazatel na řetězec
- adresa řetězce, jež končí znakem $
|
| Výstup |
| nic - žádný výstup |
Příklad vypsání řetězce na obrazovku
- Program napíše na obrazovku 'Hello World!!!', odřádkuje a skončí...
.MODEL SMALL
.STACK 100
.DATA
TEXT1 DB 'Hello World!!!',13,10,'$'
.CODE
start: MOV AX, @DATA ;adresa data segmentu
MOV DS, AX
MOV AH, 09h
MOV DX, offset TEXT1 ;offset vrací offsetovou část adresy
INT 21h
MOV AH, 4Ch
INT 21h
END
3Ch - vytvoř soubor přes rukojeť
- vytvoří soubor a vrátí rukojeť (handle) souboru. Pokud soubor existuje, bude přepsán.
| Vstup |
| AH |
= 3Ch |
| DS:DX |
- adresa řetězce názvu souboru, název musí končit binární nulou (0h) |
| CX |
- atributy |
| Výstup |
| AX |
Pokud je nastavena vlajka CF, bude AX obsahovat kód chyby. V opačném případě bude AX obsahovat rukojeť souboru (handle). |
3Dh - otevři soubor přes rukojeť
- otevře soubor a vrátí rukojeť (handle) souboru.
| Vstup |
| AH |
= 3Dh |
| DS:DX |
- adresa řetězce názvu souboru ukončený binární nulou (0h) |
| AL |
- způsob otevření (0 pro čtení, 1 pro zápis...) |
| Výstup |
| AX |
Pokud je nastavena vlajka CF, bude AX obsahovat kód chyby. V opačném případě bude AX obsahovat rukojeť souboru (handle). |
3Fh - čti ze souboru přes rukojeť
- čte ze souboru, jehož rukojeť zadáme jako vstupní hodnotu
| Vstup |
| AH |
= 3Fh |
| DS:DX |
adresa bufferu pro příjem dat |
| BX |
rukojeť (0 je klávesnice) |
| CX |
bude obsahovat počet znaků, které chceme načíst = počet čtených bytů (rozumná hodnota je 512)
|
| Výstup |
| CF |
- Pokud se rovná 1, tak bude AX obsahovat kód chyby
- Pokud se rovná 0, tak bude AX obsahovat počet skutečně přečtených bytů
|
| AX |
Bude obsahovat kód chyby, pokud se vlajka CF = 1. Pokud je CF = 0, bude obsahovat počet skutečně přečtených bytů...
|
40h - zápis do souboru přes rukojeť
- zápis do souboru, jehož rukojeť zadáme jako vstupní hodnotu
| Vstup |
| AH |
= 40h |
| DS:DX |
adresa bufferu obsahující data pro zápis |
| BX |
rukojeť (1 je monitor) |
| CX |
počet zapisovaných bytů
|
| Výstup |
| CF |
- Pokud se rovná 1, tak bude AX obsahovat kód chyby
- Pokud se rovná 0, tak bude AX obsahovat počet skutečně zapsaných bytů
|
| AX |
Bude obsahovat kód chyby, pokud se vlajka CF = 1. Pokud je CF = 0, bude obsahovat počet skutečně zapsaných bytů...
|
3Eh - zavření souboru
- uzavření souboru, jehož rukojeť zadáme
| Vstup |
| AH |
= 3Eh |
| BX |
rukojeť souboru |
| CX |
počet zapisovaných bytů
|
| Výstup |
| AX |
Pokud je CF = 1, bude AX obsahovat kód chyby. Pokud je CF = 0, soubor byl úspěšně uzavřen...
|