0% au considerat acest document util (0 voturi)
4 vizualizări7 pagini

Int 21

Documentul detaliază funcțiile DOS din versiunea 1.x și 2.x, inclusiv apelurile de întrerupere și parametrii asociați pentru gestionarea programelor, fișierelor și dispozitivelor. Fiecare funcție este identificată printr-un cod AH și descrie acțiuni precum citirea și scrierea fișierelor, manipularea unităților de disc și gestionarea intrărilor de la tastatură. De asemenea, sunt incluse informații despre gestionarea erorilor și a atributelor fișierelor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
4 vizualizări7 pagini

Int 21

Documentul detaliază funcțiile DOS din versiunea 1.x și 2.x, inclusiv apelurile de întrerupere și parametrii asociați pentru gestionarea programelor, fișierelor și dispozitivelor. Fiecare funcție este identificată printr-un cod AH și descrie acțiuni precum citirea și scrierea fișierelor, manipularea unităților de disc și gestionarea intrărilor de la tastatură. De asemenea, sunt incluse informații despre gestionarea erorilor și a atributelor fișierelor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

INT 21: Funcț ii DOS

DOS 1.x
AH=00:Terminate Program (=INT 20)
CS->PSP restauraț i vectorii INT 22, 23, 24 din vechi
valori stocate în PSP.
nu închide fiș ierele deschise.
AH=01:Citeste tastatura cu ecou AL=InputChar
=0 pentru taste extinse (taste de funcț ie etc)
- inputul poate fi redirecț ionat următoarea apelare citeș te codul scannerului
<ctrl-break>: INT 23
AH=02: Afiș aț i caracterul
- ieș irea poate fi redirecț ionată
DL=OutputChar
=7 (Bip)
<ctrl-break>: INT 23
AH=03:Auxiliary Input AL=InputChar
aș teaptă input de la dispozitivul standard <ctrl-break>: INT 23
(COM1) - inputul poate fi redirecț ionat către
alt port serial (prin MODE)
AH=04:Auxiliary Output
la dispozitiv standard (COM1) - poate fi
redirectat
DL=OutputChar
<ctrl-break>: INT 23
AH=05:Tipăreș te caracter vezi INT 17
DL=OutputChar - către imprimanta standard (LPT1)
<ctrl-break>: INT 23
AH=06:Intrare/ieș ire directă de consolă citeș te - caracter gata:
Zf=0, AL=InputChar
DL= FF:citeș te de la intrarea standard (tastatură)
- nu aș tepta - fără ecou (=0: cheie extinsă - citeș te din nou)
- nu există control pentru <^break> citire - caracterul nu este pregătit:
Zf=1, AL nedefinit
< FF:scrie DL pe ieș irea standard (ecran)
AH=07:Intrare directă în consolă AL=InputChar
citiț i de la intrarea standard (tastatură)
(=0: cheia extinsă - citeș te din nou)
- aș teptaț i cheia - fără ecou
- nu există verificare pentru <^break>
AH=08:Citire tastatură fără ecou AL=InputChar
citeș te din intrarea standard (=0: cheie extinsă - citeș te din nou)
- aș teptaț i cheia - fără ecou
- verifică pentru <^break> (INT 23)
AH=09:Display String
DS:DX -> String$
fiecare caracter este trimis ca cu funcț ia
02: Afiș aț i caracter
AH=0A:Intrare de la tastatură cu buffer byte[DX+1]=bytes citite (excl. CR terminal)
citeș te ș irul de la input-ul standard [DX+2]=primul octet
- aș teptaț i inputul - ecou terminal byte = 0D <Enter>
- terminat de <enter>
(utilizat de [Link] la prompt) dacă bufferul este plin: intrarea suplimentară va fi
DS:DX -> tampon: neglijate ș i bipuri emise
byte[DX] : lungimea buffer-ului (1..255)
AH=0B:verifică starea tastaturii AL=00: buffer empty
=FF: cel puț in un caracter în buffer
<ctrl-break>: INT 23
AH=0C:Spală Buffer, Citeș te Tastatura AL=InputChar
bufărul de intrare standard gol, apoi:
AL=01: INT 21,1: Citeș te tastatura cu ecou
=06: INT 21,6: I/O Direct la Consolă
=07: INT 21,7: Intrare Directă Consolă
=08: INT 21,8: Citeste tastatura fara ecou
=0A: INT 21,A: Intrare de la tastatură tamponată
AH=0D:Resetare unitate disc
! fiș ierele cu dimensiuni schimbate trebuie să fie
închis înainte de apel!
Goleste toate buffer-urile de fiș iere.
AH=0E:selectaț i unitatea de disc AL=numărul total de unităț i logice
unitatea selectată va fi noua implicită
DL=driveID: 0=A, 1=B,,,
AH=0F:Deschide Fiș ier AL=00: fiș ier deschis - FCB completat
DS:DX->FCB să fie deschis =FF: error
AH=10:Închide Fiș ierul AL=00: fiș ier închis
DS:DX->deschide FCB =FF: eroare
AH=11:Cauta prima potrivire de fiș ier AL=00: match found
la filespec (caractere generice permise) în [Link] umplut cu FCB neandaagere
Caută doar în directorul curent - - deschiderea fiș ierului distruge informaț iile pentru
pentru căutarea căii, folosiț i INT 21,4E. Caută următorul
Înainte de acest apel: foloseș te INT 21,1A: Set =FF: nu găsit
DTA.
DS:DX->FCB (nu este deschis)
AH=12:Caută fiș ierul următor care se potriveșAL=00:
te match found
Înainte de acest apel: foloseș te anterior DTA umplut cu FCB neevaporizat
DS:DX->FCB (nu este deschis) - deschiderea fiș ierului distruge informaț iile pentru
Caută următorul
=FF: nu a fost găsit
AH=13:Delete file AL=00: file(s) deleted
=FF: eroare
Toate fiș ierele care se potrivesc cu specificaț ia de fiș ier în FCB
sunt ș terse.
DS:DX->FCB (nu este deschis)
AH=14:Read File Sequential AL=00: înregistrarea fiș ierului citită în memorie la DTA
DS:DX->deschide FCB cu FCB actualizat la următorul înregistrare
- filename =01: EOF (fără date)
- record size =02: DTA prea mic
numărător de înregistrări EOF (parte a înregistrării citite)
AH=15:Scrie fiș ier secvenț ial AL=00: înregistrare fiș ier scrisă din DTA în
DS:DX->deschide FCB cu buffer - sectoare întregi sunt scrise
- nume fiș ier pe disc
- record size FCB actualizat la următorul record
- contor de înregistrări =01: Disc plin
=02: DTA prea mic
AH=16:Creare Fiș ier AL=00: Fiș ier creat cu lungimea 0
DS:DX->FCB (nu deschis) cu numele fiș ierului =FF: eroare
AH=17:Renumeș te fiș ierul cu FCB AL=00: File(s) renamed
DS:DX->FCB cu un nou fiș ier specificat =FF: eroare
AH=19:Get Default Drive AL=0,1,..: A,B,..
AH=1A:Setare adresă DTA
(80h în PSP dacă nu este setat)
DS:DX->DTA-adresă
AH=1B: Obț ineț i informaț ii FAT AL=sectors pr cluster
pentru unitatea curentă (implicită) CX=dimensiunea sectorului
DX=numărul de clustere
DS:BX->byte descriptor media
AL=sectoare
AH=1C: Obț ineț i informaț ii FAT pentru unitatea pe cluster
specificată
DL=Drive number CX=dimensiunea sectorului
DX=numărul de clustere
DS:BX->byte descriptor media
AH=21:Citire înregistrare aleatoare AL=00: Înregistrare citită în DTA
DS:DX->deschide FCB =01: EOF (fără date)
=02: DTA prea mic
=03: EOF (parte a înregistrării citite)
AH=22:Scrie înregistrare aleatoare AL=00: Înregistrare scrisă din DTA
DS:DX->deschide FCB Disk plin
DTA prea mic
AH=23:Obț ineț i dimensiunea fiș ierului AL=00: nr. de înregistrări returnate în FCB
no. of records =FF: eroare
DS:DX->FCB cu
- filespec
- RecordSize
AH=24:Setează numărul aleatoriu al înregistrării
folosind CurBlockNo ș i CurRecNo
DS:DX->deschide FCB
AH=25:set interrupt vector
AL=int nr.
DS:DX=o nouă vector
AH=26:Creare PSP nou
cu o copie a programelor .COM apelante
PSP (CS trebuie să se refere la acesta)
DX=adressă segment a noului PSP
AH=27:Citire bloc aleatorie AL=00: Înregistrări citite în DTA
DS:DX->deschide FCB =01: EOF (fără date)
CX=numărul de înregistrări care trebuie citite
=02: DTA prea mic
=03: EOF (parte a înregistrării citite)
CX=numărul de înregistrări citite
AH=28:Scriere aleatoare în bloc AL=00: Înregistrări scrise din DTA
DS:DX->deschide FCB =01: EOF (fără date)
CX=numărul de înregistrări care urmează a fi =02:
scriseDTA prea mic
CX=numărul de înregistrări scrise
AH=29:Analizează Numele Fiș ierului AL=00: nu s-au folosit caractere wildcard
AL=Analiza controlului bitilor: =01: caractere wildcard utilizate
vezi MS-DOS PR p.254 =FF: unitate nu acceptată
DS:SI->Linia de Comandă ("d:numele_fisierului.ext'0'")
DS:SI->[Link] după nume fiș ier
ES:DI->[Link]
caractere generice ok sau mai multe nume de fiș iere de FCB umplut
separate prin spaț ii
ES:DI->FCB de completat (nu deschis)
AH=2A:Obț ine data AL=weekday (0=sunday)
CX=year (1980-2099)
DH=month (1-12)
DL=day (1-31)
AH=2B:Setare dată AL=00: no error
CX=year (1980-2099) AL=FF: eroare
DH=month (1-12)
DL=day (1-31)
AH=2C:Obț ine timpul CH=hours (0-23)
CL=minutes (0-59)
DH=seconds (0-59)
DL=sec/100 (0-99)
AH=2D:Setare timp AL=00: no error
CH=hours (0-23) AL=FF: eroare
CL=minutes (0-59)
DH=seconds (0-59)
DL=sec/100 (0-99)
AH=2E:Set Verificare Activată/Dezactivată
AL=0,1: setează verificarea off,on
DOS 2.x
AH=2F:Obț ine adresa DTA ES:BX->DTA
AH=30:obț ineț i numărul versiunii DOS AH= număr minor
AL=major number
AH=31:Menț ine Programul
AL=return code
DX = dimensiune în paragrafe de cod pentru a rămâne în
memorie
AH=33:Obț ine/Setează indicatorul de verificare
ObțCtrl-C
ine:
AL=00: Get DL=00,01: flag is off,on
AL=01: Set:
DL=00,01: Set off, Set on
AH=35: obț ine vectorul de interupere ES:BX=vector
AL=int nr.
AH=36:Get Disk Free Space AX=no. of sectors pr cluster
DL=driver nr. (0=implicit, 1=A,..) =FFFF: eroare
BX=no. of free clusters
CX=nr. de octeț i pe sector
DX=no. of clusters
AH=38:Set Country Code
DX=FFFF
Dacă CountryCode < 254:
AL=CountryCode (45=DK)
ALTELE:
AL=FF
BX=CountryCode
AH=38:Get Country Info CF=1: error
DX<>FFFF: AX=error code
Structura CountryInfo CF=0:
DACĂ CountryCode < 254: AL=CodȚ ară (8 biț i inferior) (45=DK)
AL=CountryCode (45=DK BX=CountryCode
0=ț ara actuală) DS:DX->structură CountryInfo umplută
ALTCEVA:
AL=FF
BX=CountryCode
AH=39:Create Directory CF=1: AX=error code
DS:DX->ASCIIZ DirSpec
AH=3A:Ș terge directorul CF=1: AX=error code
DS:DX->ASCIIZ DirSpec
AH=3B:schimbă directorul curent CF=1: AX=error code
DS:DX->calea0
AH=3C:Creare fiș ier cu mânere Dacă fiș ierul există: fără erori
(compară INT 21,5B) CF=1: AX=error code
DS:DX->path0 CF=0: AX=Handle
CX=atribut fiș ier fiș ier deschis
AH=3D:Deschide fiș ier cu mânere CF=1: AX=error code
AL=access code: 0=read CF=0: AX=Handle
1= scrie fiș ierul deschis
2=lectură/scriere
DS:DX->FileSpec0
AH=3E:închide mânerul CF=1: AX=error code
BX=handle
AH=3F: citeș te din fiș ier sau dispozitiv CF=1: AX=error code
BX=handle (0=standard input: keybd) CF=0: AX=bytes read
CX=Numărul de bytes
DS:DX->buffer
AH=40:scrie într-un fiș ier sau dispozitiv CF=1: AX=error code
BX=maner (1=iesire standard: scrn) CF=0: AX=bytes written
CX=numărul de octeț i
DS:DX->buffer
AH=41:Delete File CF=1: AX=error code
DS:DX->SpecificaFiș ier0
AH=42:Mută pointerul fiș ierului CF=1: AX=error code
AL=metoda de miș care CF=0: DX,AX=punct nou
=00: absolut de la începutul fiș ierului (+)
=01: relativ de la poziț ia curentă (+-)
=02: absolut de la sfârș itul fiș ierului (+-)
BX=handle
CX,DX=move distance (bytes)
AX=4300:Obț ine Atributele Fiș ierului CF=1: AX=error code
DS:DX-> nume complet ASCIIZ CF=0: CX=attributes
AX=4301: Setează Atributele Fiș ierului
CX=attributes
DS:DX-> nume de fiș ier ASCIIZ complet
AH=44:Controlul dispozitivului I/O CF=1: AX=error code
AL=00: Obț ine informaț ii despre dispozitiv CF=0: DX=informaț ii dispozitiv (pentru AL=00)
=01: Setează informaț iile dispozitivului
=02: Citiț i de la dispozitivul de caractere
=03: Scrie către dispozitivul de caracter
=04: Citeș te din dispozitivul de bloc
etc...
AH=45:Handle de fiș ier duplicat CF=1: AX=error code
BX=handle CF=0: AX=un nou mâner
AH=46:Forț a Mâncării Fiș ier Duplicat CF=1: AX=error code
BX=handle
CX=new handle
AH=47:Get Current Directory CF=1: AX=error code
DL= numărul de drive CF=0: DS:SI->umple zona de 64 byte
DS:SI->zona de 64 byte
AH=48:Alocare Memorie CF=1: AX=error code
BX=paragrafe solicitate CF=0: AX:00->memorie alocată
BX=paragrafe alocate
AH=49:Free Allocated Memory CF=1: AX=error code
ES=segment de bloc de liberat
AH=4A: Setează dimensiunea blocului de memorie CF=1: AX=error code
ES=segment de bloc care să fie setat (modificat)
CF=0: BX=allocated paragraphs
BX=paragrafelor solicitate
AH=4B:Încărcaț i (ș i Executaț i) Program CF=1: AX=error code
AL=00: Load and execute
Încărcare suprapus
DS:DX->ASCIIZ fiș ier_spec
ES:BX->bloc de parametrii
AH=4C:termina programul
AL='errornr' (used by ERRORLEVEL)
AH=4D:Obț ine valoarea de returnare AH=return value
din INT 21,31 sau INT 21,4C AL=00: terminare normală
- doar o singură dată! 01: terminarea ctrl-break
02: eroare critică
=03: încetare prin INT 21,31
AH=4E:Caută primul fiș ier CF=1: AX=error code
CX=atribut CF=0: DTA umplut cu structura Fileinfo.
DS:DX->ASCIIZ fiș ier
AH=4F:Caută Fiș ier Următor CF=1: AX=error code
DTA conț ine informaț ii despre fiș ier CF=0: Informaț ii DTA actualizate
AH=52:obț ine lista listelor(undoc) ES:BX indică informaț iile sistemului
-PCM.10.24.466:Structura CDS +16h punct la primul CDS
GOOKIN: Îmbunătăț it...p325 +21h numărul structurilor CDS
setat de LASTDRIVE
- implicit: 5 (E)
AH=54:Obț ineț i starea de verificare AL=00: Verificare oprită
=01: Verificarea este activată
AH=56:Rename File CF=1: AX=error code
- poate fi utilizat pentru a 'mutare' un fiș ier
DS:DX->ASCIIZ fiș ier
ES:DI->ASCIIZ fiș ier nou
AX=5700: Obț ine data ș i ora fiș ierului CF=1: AX=error code
BX=Handle CF=0: CX=time (bits:)
15-11: oră (0-23)
10- 5: minut (0-59)
4- 0: 2sec (0-29)
DX=date (bits:)
15- 9: an (din 1980)
8-5: lună (1-12)
4- 0: zi (1-31)
AX=5701:Setează data ș i ora fiș ierului CF=1: AX=error code
BX=Handle
CX=time, DX=date (as above)
DOS 3.x
AH=59:Obț ine informaț ii extinse despre eroareAX=cod de eroare extins
>PC'ere UL s.185
BH=error type
BL=suggested action
CH=locaț ia erorii
AH=5A:Crează fiș ier 'Temporar' CF=1: AX=error code
CX=atribut CF=0: DS:DX->ASCIIZ fiș ier specificat cu numele fiș ierului
DS:DX->ASCIIZ dirspec (cu terminalul '\') furnizat de DOS
AH=5B:Creare fiș ier nou DACĂ fiș ierul există: eroare (CF=1)
(compară INT 21,3C) CF=1: AX=error code
CX=atrib CF=0: AX=handle
DS:DX->ASCIIZ fiș ier_spec fiș ier deschis
AH=5C:Blochează/Dezblochează fiș ierul CF=1: AX=error code
AL=00: Lock
Deblochează
BX : Handle
CX, DX: Offset (4 bytes)
SI,DI: Lungime (4 byte)
AX=5E00:Obț ine numele maș inii CF=1: AX=error code
DS:DX->zonă de 15 octeț i CF=0:
CH=0: Nume nedefinit
CH<>0:
CL='Name of NETBIOS' (?)
DS:DX->15 byte ASCIIZ Numele maș inii
AX=5E02: Setare printer CF=1: AX=error code
BX=index
CX=lungimea ș irului de iniț ializare
DS:DI->initializează ș irul care urmează să fie trimis
din toate fiș ierele trimise la imprimantă
AX=5E03:Configurare imprimantă CF=1: AX=error code
BX=index CF=0: CX=length of initialize string
DS:SI->buffer DS:DI->iniț ializează ș ir
CF=1:
AX=5F02:Obț ineț i intrarea din lista de atribuț ii AX=error code
BX=index (nr. de redirecț ionare curentă) =18d: sfârș itul listei de redirecț ionare
=0: index iniț ial, care trebuie incrementat CF=0: BH=status flag:
până când AX returnează codul de eroare 18d bit 0=0: dispozitiv indisponibil
DS:SI->buffer de 16 octeț i =1: dispozitiv disponibil
ES:DI->128 byte buffer BL=device type
=3: imprimantă
=4: fiș ier
CX=parameter value
DS:SI->ASCIIZ nume dispozitiv local
(PRN, LPT1, ...)
nume reț ea
AX=5F03:Conectare la reț ea CF=1: AX=error code
BL=3: to printer
=4: pe unitatea de disc
CX=parametru (=00)
DS:SI->ASCIIZ numele dispozitivului (PRN, LPT1, ...)
Calea reț elei ES:DI->ASCIIZ
AX=5F04:Ș terge Conexiunea de Reț ea CF=1: AX=error code
DS:SI->ASCIIZ numele dispozitivului ș i calea
AH=62:Obț ineț i adresa PSP BX=adresă segment
DOS 3.3:
AH=65: Obț ineț i informaț ii naț ionale extinseES:DI->tabel cu informaț ii naț ionale extinse
AL=info type
BX=pagina de cod
CX=no. of data to be returned
DX=national ID
ES:DI->buffer
AX=6601:Obț ineț i pagina de cod CF=1: AX=error code
CF=0: BX=pagina de cod activă
DX=pagina de cod a sistemului
AX=6602:Schimbare cod pagină
ca comanda DOS :>CHCP
are nevoie de NLSFUNC instalat
AH=67:Setează numărul maxim de mânere CF=1: AX=error code
BX=numărul maximal de handle-uri deschise pentru fiș iere
<20: =20
AH=68: Confirmare fiș ier
Buffer de fiș ier gol
BX=handle

S-ar putea să vă placă și