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...

coded by Xagatron, powered by XRS engine