Hoofdstuk – 6
Inleiding tot computerbeginselen
Invoering
Soms, in sommige gevallen, wanneer u probeert de gegevens te herstellen of wanneer u een taak voor het oplossen van gegevens- en schijfproblemen uitvoert (of het kan een andere systeemgerelateerde taak zijn), is het erg handig om het DEBUG-commando van DOC te gebruiken.
Ook kan het in bepaalde gevallen mogelijk zijn dat u het gemakkelijk vindt om die specifieke taak uit te voeren met behulp van DEBUG en vervolgens met programmeren. Laten we een voorbeeld nemen. De volgende codering van debug is voldoende om de back-up van DBR te maken. Typ gewoon de volgende regels:
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Hier kunt u zien dat u alleen door het typen van de bovenstaande paar regels kunt voorkomen dat u een programma schrijft. Laten we nog een voorbeeld bekijken van codering die de reservekopie van DBR naar de schijf laadt
Onthoud altijd! Probeer dit niet zonder de volledige kennis. Weet zeker wat je gaat doen. Een onzorgvuldig gebruik van de volgende instructies kan een groot gegevensverlies veroorzaken, aangezien het misbruik van de instructie ertoe kan leiden dat al uw informatie op de schijf ontoegankelijk wordt.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
Door de codering van dit voorbeeld te zien, kunt u gemakkelijk raden hoeveel het u kan helpen wanneer u het het meest nodig heeft. Ook is het niet mogelijk om in elke situatie te programmeren. Echter, binnen een limiet van eenvoudige gevallen van het probleem, om de montage-instructies te gebruiken, je moet gewoon debug.exe/debug.com naar je opstartdiskette kopiëren en beginnen met het schrijven van de code.
De werking en de beschreven voorbeelden in dit hoofdstuk en in dit boek zijn alleen compatibel met x86 Intel Processor Family-architectuur.
Allereerst moeten we een beetje kennis hebben van de basisprincipes van computerarchitectuur om de termen die in de komende secties worden gebruikt te begrijpen, terwijl we de werking en voorbeelden in verschillende stappen beschrijven. Laat ons enkele basisprincipes van de computerarchitectuur weten:
Basisconcepten
Centrale processor
Dit onderdeel staat ook bekend als de centrale verwerkingseenheid of CPU, die op zijn beurt wordt gevormd door de besturingseenheid en de rekenkundige en logische eenheid. Zijn functies bestaan uit het lezen en schrijven van de inhoud van de geheugencellen, het doorsturen van gegevens tussen geheugencellen en speciale registers en het decoderen en uitvoeren van de instructies van een programma. De processor heeft een reeks geheugencellen die heel vaak worden gebruikt en dus deel uitmaken van de CPU.
Deze cellen staan bekend onder de naam registers. Een processor kan een of twee dozijn van deze registers hebben. De rekenkundige en logische eenheid van de CPU realiseert de bewerkingen die verband houden met numerieke en symbolische berekeningen.
Normaal gesproken hebben deze eenheden alleen de capaciteit om zeer elementaire bewerkingen uit te voeren, zoals het optellen en aftrekken van twee gehele getallen, vermenigvuldigen en delen van gehele getallen, het verwerken van de bits van de registers en het vergelijken van de inhoud van twee registers. Personal computers kunnen worden geclassificeerd op basis van wat bekend staat als woordgrootte, dit is de hoeveelheid bits die de processor tegelijk aankan.
Centraal geheugen
Het is een groep cellen, vervaardigd met halfgeleiders, die wordt gebruikt voor algemene processen, zoals het uitvoeren van programma's en het opslaan van informatie voor de operaties. Elk van deze cellen kan een numerieke waarde bevatten en ze hebben de eigenschap dat ze richtingsgevoelig zijn. Dit is dat ze elkaar kunnen onderscheiden door middel van een uniek nummer of een adres voor elke cel. De algemene naam van deze geheugens is Random Access Memory of RAM.
Het belangrijkste nadeel van dit type geheugen is dat de geïntegreerde schakelingen de informatie verliezen die ze hebben opgeslagen wanneer de elektriciteitsstroom wordt onderbroken. Dit was de reden voor het creëren van geheugens waarvan de informatie niet verloren gaat wanneer het systeem wordt uitgeschakeld. Deze herinneringen krijgen de naam Read Only Memory of ROM.
Om ervoor te zorgen dat de pc informatie kan verwerken, is het noodzakelijk dat deze informatie zich in speciale cellen bevindt die registers worden genoemd. De registers zijn groepen van 8 of 16 flip-flops.
Een flip-flop is een apparaat dat twee spanningsniveaus kan opslaan, een laag voltage, regelmatig 0,5 volt, en een ander voltage, gewoonlijk 5 volt. Het lage energieniveau in de flip-flop wordt geïnterpreteerd als uit of 0, en het hoge niveau als aan of
- Deze toestanden staan meestal bekend als bits, de kleinste informatie-eenheid in een computer.
Een groep van 16 bits staat bekend als woord; een woord kan worden verdeeld in groepen van 8 bits die bytes worden genoemd, en de groepen van 4 bits worden nibbles genoemd.
CPU-registers
De CPU heeft 4 interne registers, elk van 16 bits. De eerste vier, AX, BX, CX en DX zijn registers voor algemeen gebruik en kunnen ook worden gebruikt als 8-bits registers, als op zo'n manier gebruikt dat het nodig is om er bijvoorbeeld naar te verwijzen als: AH en AL, de hoge en lage bytes van het AX-register. Deze nomenclatuur is ook van toepassing op de BX-, CX- en DX-registers.
De registers bekend onder hun specifieke namen:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
We zullen dit register echter gebruiken bij het programmeren van interrupts via C in de volgende hoofdstukken in detail, maar het leren van de basis van assembler hier is een goed idee en het zal ons helpen bij het programmeren van schijfbewerkingen enz.
Het is mogelijk om de waarden van de interne registers van de CPU te visualiseren met behulp van het Debug-programma. Typ de volgende prompt op uw computer om met Debug te werken:
C:/>Debug <Enter>
Op de volgende regel zal een streepje verschijnen, dit is de indicator van Debug, op dit moment kunnen de Instructions of Debug geïntroduceerd worden met het volgende commando:
- r <Enter>
Alle inhoud van de interne registers van de CPU wordt weergegeven. Een alternatief om ze te bekijken is om de "r" te gebruiken. commando met als parameter de naam van het register waarvan de waarde gezien wil worden. Bijvoorbeeld:
-rbx <Enter>
Deze instructie geeft alleen de inhoud van het BX-register weer en de foutopsporingsindicator verandert van "-" naar ":"
Als de prompt er zo uitziet, is het mogelijk om de waarde van het register die werd gezien te wijzigen door de nieuwe waarde en <Enter> te typen, of de oude waarde kan worden verlaten door op Enter te drukken zonder een andere waarde in te voeren.
Het is mogelijk om de waarde van het vlagregister te veranderen en het te gebruiken als een controlestructuur in onze programma's, zoals we later zullen zien. Elk bit van het register heeft een speciale naam en betekenis, de volgende lijst beschrijft de waarde van elk bit, aan of uit en de relatie met de bewerkingen van de processor:
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Assembler structuur
In assembler hebben coderegels twee delen, de eerste is de naam van de instructie die moet worden uitgevoerd, en de tweede zijn de parameters van de opdracht. Bijvoorbeeld:
ADD ah, bh
Hier "TOEVOEGEN" is de opdracht die moet worden uitgevoerd; in dit geval een toevoeging, en "ah" evenals "bh" zijn de parameters.
De naam van de Instructies in taal bestaat uit twee, drie of vier letters. Deze instructies worden ook geheugensteuntjes of bewerkingscodes genoemd, omdat ze een functie vertegenwoordigen die de processor zal uitvoeren. Er zijn enkele commando's die geen parameters nodig hebben voor hun werking, evenals andere die slechts één parameter nodig hebben.
Soms worden instructies als volgt gebruikt:
ADD al,[170]
De haakjes in de tweede parameter geven ons aan dat we gaan werken met de inhoud van de geheugencel nummer 170 en niet met de waarde 170; dit staat bekend als directe richting.
Nu zijn we klaar om te coderen voor ons eerste programma met behulp van debug. We gaan een programma maken dat werkt om te illustreren wat we hebben gezien, en wat we zullen doen is twee waarden toevoegen die we direct in het programma zullen introduceren.
De eerste stap is het starten van Debug, deze stap bestaat alleen uit het typen van debug <Enter> op de prompt van het besturingssysteem.
Om een programma op de Debug samen te stellen, moet de "a" (assembleren) commando wordt gebruikt. Wanneer deze opdracht wordt gebruikt, kan het adres waar u wilt dat de montage begint als parameter worden opgegeven. Als de parameter wordt weggelaten, wordt de montage gestart op de plaats die is opgegeven door CS:IP, meestal 0100h, wat de plaats is waar programma's met de extensie .COM moet worden gestart. En het zal de plaats zijn die we zullen gebruiken, omdat alleen Debug dit specifieke type programma's kan maken.
Ook al is het op dit moment niet nodig om de "a" een parameter opdraagt, is het raadzaam om dit te doen om problemen te voorkomen als de CS:IP-registers eenmaal zijn gebruikt, daarom typen we:
-a0100 <Enter>
Wanneer dit is gedaan, verschijnt er iets als dit op het scherm: 0C1B:0100 en de cursor staat rechts van deze cijfers, merk op dat de eerste vier cijfers, in hexadecimale systemen, kunnen verschillen, maar de laatste vier moeten 0100 zijn , aangezien dit het adres is dat we als begin hebben aangegeven. Nu kunnen we de instructies introduceren:
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
Het is niet nodig om de opmerkingen achter de ";" te schrijven. Nadat het laatste commando is getypt, voert int 20, <Enter> wordt ingedrukt zonder iets meer te schrijven, om de Debugger-prompt weer te zien.
De laatste geschreven regel is niet echt een assembler-instructie, in plaats daarvan is het een oproep voor een onderbreking van het besturingssysteem, deze onderbrekingen besparen ons veel regels en zijn erg handig om toegang te krijgen tot de functies van het besturingssysteem.
Om het programma dat we schreven uit te voeren, gebruikt de "g" commando wordt gebruikt, en wanneer gebruikt, zien we een bericht met de tekst:
"Programma is normaal beëindigd". Natuurlijk kunnen we bij een bericht als dit niet zeker weten of het programma de toevoeging heeft gedaan, maar er is een eenvoudige manier om dit te verifiëren door de "r" commando van de Debug kunnen we de inhoud van alle registers van de processor zien, typ gewoon:
-r <Enter>
Elk register met zijn respectievelijke werkelijke waarde zal als volgt op het scherm verschijnen:
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
De mogelijkheid dat de registers verschillende waarden bevatten, bestaat, maar AX en BX moeten hetzelfde zijn, aangezien dit degenen zijn die we zojuist hebben gewijzigd.
Een andere manier om de waarden te zien, terwijl het programma wordt uitgevoerd, is door het adres te gebruiken waar we willen dat de uitvoering eindigt en de waarden van de registers te tonen als een parameter voor "g", in dit geval zou het zijn : g108, deze instructie voert het programma uit, het stopt op adres 108 en toont de inhoud van de registers.
Een follow-up van wat er in de registers gebeurt, kan worden gedaan met behulp van de "t" commando (trace), de functie van dit commando is om regel voor regel uit te voeren wat is samengesteld, waarbij telkens de inhoud van de registers wordt getoond.
Om Debug af te sluiten, gebruikt u de "q" (stop) commando.
Voordelen van de monteur
De eerste reden om met assembler te werken is dat het de mogelijkheid biedt om meer te weten te komen over de werking van uw pc, waardoor de ontwikkeling van software op een meer consistente manier mogelijk is.
De tweede reden is de totale controle over de computer, die je kunt hebben met behulp van de assembler. Een andere reden is dat de op assemblage gebaseerde programma's sneller zijn en in sommige gevallen kleiner zijn en grotere capaciteiten hebben dan programma's die met andere talen zijn gemaakt.
Laat me mijn belofte houden!!
In het eerdere deel van dit hoofdstuk gebruikten we enkele instructies als voorbeeld, om de back-up van DBR te maken en om de back-up van DBR naar de oorspronkelijke locatie te laden wanneer dat nodig is. Eerst bekijken we de instructie om de back-up te maken.
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
Laten we in dit voorbeeld beginnen met studeren vanaf de eerste regel. Het commando DEBUG A:\BKDBR.BIN Initialiseert het debug-commando met het maken van een bestand in A: diskettestation met de naam BKDBR.BIN als het daar nog niet aanwezig is. Daarom kregen we in het begin de melding "Bestand niet gevonden".
In onze tweede instructie L 100 2 0 1 is de L (load)-opdracht om de DBR van de geïnstrueerde drive te laden. Laten we leren hoe? In deze instructie is het getal 100 het adres van de buffer, waar de DBR wordt opgeslagen, het volgende getal 2 wordt gebruikt voor de drive C(C :). De stationsnummers worden als volgt gegeven:
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
Het volgende cijfer 0 is het startsectornummer van het aantal te lezen sectoren. Hier gebruiken we 0 om de 1e sector, d.w.z. DBR-sector, te lezen. Het volgende getal dat 1 is, wordt gebruikt om het aantal te lezen sectoren aan te geven.
Hier hebben we 1 gegeven omdat we maar één sector willen lezen. We kunnen echter de aantallen en locaties van beginnende en eindigende sectoren gebruiken volgens onze behoeften in verschillende soorten andere operaties. Daarom zal het een sector laden die begint vanaf de 1e sector van de drive C: naar de geheugenlocatie 100.
En R CX-instructie wordt gebruikt om de lengte van de gegevens die we in het BKDBR.BIN-bestand willen schrijven, te wijzigen of te definiëren. Deze instructie toont de huidige waarde van het CX-register en stelt u in staat om elke wijziging aan te brengen. We hebben hier 200 getypt omdat het DEBUG-commando een hexadecimaal systeem gebruikt en de grootte van DBR in hexadecimaal 200 (h) bytes is, dat is 512 bytes in het decimale systeem.
W commando vertelt de DEBUG om de 200(h) bytes van locatie 100 naar het BKDBR.BIN bestand te schrijven. En tot slot gebruiken we de instructie Q om de DEBUG af te sluiten en terug te gaan naar de DOS-prompt.
Waarschuwing!!! Waarschuwing!!! Waarschuwing!!!
Het wordt ten strengste aanbevolen dat u weet wat en hoe u doet in de procedure voor het herstellen van DBR van een schijf. Als u per ongeluk de illegale of DBR van een andere schijf opslaat, is het in de meeste gevallen mogelijk dat de volledige gegevens van de schijf ontoegankelijk worden.
wanneer u de eerste instructie van de codering typt, is dat:
DEBUG A:\BKDBR.BIN <Enter>
Het bestand moet zich op de opgegeven locatie bevinden waar u het DEBUG-programma start. Als u nu de foutmelding "Bestand niet gevonden" krijgt vóór de DEBUG-prompt, stop dan onmiddellijk het proces met behulp van de Q (quit) -opdracht. Omdat het betekent dat het BKDBR.BIN-bestand niet kon worden gevonden of geopend door het DEBUG-programma en als u doorgaat met dit proces, wordt er wat ongewenste informatie op DBR geschreven en wordt de volledige partitie ontoegankelijk. |
Laten we nu eens kijken wat we hebben gedaan bij het coderen van de instructies voor het herstellen van de DBR vanuit het back-upbestand dat we hebben gemaakt met de naam BKDBR.BIN. De opdrachten van DEBUG om de back-up te herstellen zijn als volgt:
C:\> DEBUG A:\BKDBR.BIN <Enter>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
Deze instructie schrijft 1 sector met informatie uit het BKDBR.BIN-bestand in diskettestation (a:) in de geheugenlocatie 100 naar de eerste sector die sector 0 is van het 2e station dat station (C:) is.
Opslaan en laden van de programma's
Het lijkt niet praktisch om elke keer dat het nodig is een heel programma te typen, en om dit te voorkomen is het mogelijk om een programma op de schijf op te slaan, met als enorm voordeel dat het, omdat het al geassembleerd is, niet nodig is om het uit te voeren. Debug opnieuw om het uit te voeren.
De stappen om een programma op te slaan dat al in het geheugen is opgeslagen, zijn:
- Verkrijg de lengte van het programma door het uiteindelijke adres af te trekken van het oorspronkelijke adres, natuurlijk in hexadecimaal systeem.
- Geef het programma een naam en extensie.
- Zet de lengte van het programma in het CX-register.
- Geef Debug opdracht om het programma op de schijf te schrijven.
Door het volgende programma als voorbeeld te gebruiken, krijgen we een duidelijker beeld van hoe we deze stappen moeten nemen. Wanneer het programma uiteindelijk is samengesteld, ziet het er als volgt uit:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
000A bytes schrijven
Om de lengte van een programma te bepalen, gebruikt de "h" commando wordt gebruikt, omdat het ons het optellen en aftrekken van twee getallen in hexadecimaal laat zien. Om de lengte van die van ons te verkrijgen, geven we deze als parameters de waarde van het eindadres van ons programma (10A) en het beginadres van het programma (100). Het eerste resultaat dat de opdracht ons laat zien, is het optellen van de parameters en het tweede is het aftrekken.
De "n" commando stelt ons in staat om het programma een naam te geven. De "rcx" commando stelt ons in staat om de inhoud van het CX-register te wijzigen in de waarde die we hebben verkregen uit de grootte van het bestand met "h", in dit geval 000a, aangezien het resultaat van het aftrekken van het uiteindelijke adres van het oorspronkelijke adres.
Ten slotte, de "w" commando schrijft ons programma op de schijf en geeft aan hoeveel bytes het heeft geschreven. Om een reeds geladen bestand op te slaan zijn er ook twee stappen nodig:
- Geef de naam van het bestand dat moet worden geladen.
- Laad het met de "l" (laad) commando.
Om het juiste resultaat van de volgende stappen te verkrijgen, is het noodzakelijk dat het bovenstaande programma al is aangemaakt.
Binnen Debug schrijven we het volgende:
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
De laatste "u" commando wordt gebruikt om te controleren of het programma in het geheugen is geladen. Wat het doet, is dat het de code demonteert en gedemonteerd laat zien. De parameters geven aan om te DEBUG van waar en naar waar te demonteren. DEBUG laadt altijd de programma's op het geheugen op het adres 100H, anders aangegeven.
Segmenten
De architectuur van de x86-processors dwingt tot het gebruik van geheugensegmenten om de informatie te beheren, de grootte van deze segmenten is 64kb.
De reden dat ze uit deze segmenten bestaan, is dat, aangezien de maximale grootte van een getal dat de processor kan beheren, wordt gegeven door een woord van 16 bits of register, het niet mogelijk zou zijn om toegang te krijgen tot meer dan 65536 geheugenplaatsen met slechts één van deze registers, maar nu, als het geheugen is verdeeld in groepen of segmenten, elk van 65536 plaatsen, en we gebruiken een adres in een exclusief register om elk segment te vinden, en dan maken we elk adres van een specifiek slot met twee registers, en het is voor ons mogelijk om toegang te krijgen tot een hoeveelheid van 4294967296 bytes geheugen.
Om ervoor te zorgen dat de assembler de gegevens kan beheren, is het noodzakelijk dat elk stuk informatie of elke instructie wordt gevonden in het gebied dat overeenkomt met de respectieve segmenten. De assembler heeft toegang tot deze informatie, rekening houdend met de lokalisatie van het segment, gegeven door de DS-, ES-, SS- en CS-registers en in het register het adres van het gespecificeerde stuk informatie. Dit is de reden dat wanneer we een programma maken met behulp van de Debug op elke regel die we samenstellen, er zoiets als dit verschijnt:
1CB0:0102 MOV AX,BX
Waar het eerste nummer, 1CB0, overeenkomt met het geheugensegment dat wordt gebruikt, verwijst het tweede naar het adres binnen dit segment, en de instructies die vanaf dat adres worden opgeslagen, volgen.
De assembler past de grootte van de segmenten aan en neemt als basis het aantal bytes dat elke geassembleerde instructie nodig heeft, aangezien het zonde van het geheugen zou zijn om de hele segmenten te gebruiken. Als een programma bijvoorbeeld slechts 10 kb nodig heeft om gegevens op te slaan, is het gegevenssegment slechts 10 kb en niet de 64 kb die het aankan.
Gegevensverplaatsing
Ik geef hier enkele instructies voor assembleertaal voor gegevensbewerkingen voor uw kennis en gemak, als we gaan programmeren met behulp van interrupts en andere BIOS-bewerkingen, hebben we de basis nodig.
Gedetailleerde introductie en grondige studie van assembler gaat de limiet van dit boek te boven. Hoewel de basiskennis van de montage noodzakelijk is om door te gaan in de verdere belangrijke programmeerhoofdstukken, maar als u het moeilijk vindt om alle instructies te begrijpen, hoeft u zich geen zorgen te maken, maar het wordt aanbevolen dat u het basisidee van de instructies leert.
In elk programma is het nodig om de gegevens in het geheugen en in de CPU-registers te verplaatsen en er zijn verschillende manieren om dit te doen. het kan gegevens in het geheugen naar een register kopiëren, van register naar register, van een register naar een stapel, van een stapel naar een register, om gegevens naar externe apparaten te verzenden en omgekeerd.
Deze verplaatsing van gegevens is onderhevig aan regels en beperkingen. De volgende zijn enkele van hen:
- Het is niet mogelijk om gegevens rechtstreeks van de ene geheugenlocatie naar de andere te verplaatsen. Het is noodzakelijk om eerst de gegevens van de bronlocatie naar een register te verplaatsen en vervolgens van het register naar de bestemmingslocatie.
- Het is niet mogelijk om een constante rechtstreeks naar een segmentregister te verplaatsen; het moet eerst naar een register in de CPU worden verplaatst.
- Het is mogelijk om datablokken te verplaatsen door middel van de MOVS Instructions, die een keten van bytes of woorden kopieert. MOCSB die n bytes van de ene locatie naar de andere kopieert en MOVSW kopieert n woorden van de ene locatie naar de andere. De laatste twee instructies nemen de waarden van de gedefinieerde adressen door DS:SI als een groep gegevens om te verplaatsen en ES:DI als de nieuwe lokalisatie van de gegevens.
Om gegevens te verplaatsen zijn er ook structuren die batterijen worden genoemd, waarbij de gegevens worden geïntroduceerd met de push-instructie en worden geëxtraheerd met de pop-instructie. In een stapel zijn de eerste gegevens die moeten worden ingevoerd de laatste die we kunnen nemen, dit wil zeggen, als we in ons programma deze instructies gebruiken:
PUSH AX
PUSH BX
PUSH CX
Om de juiste waarden terug te geven aan elk register op het moment dat ze van de stapel worden gehaald, is het nodig om dit in de volgende volgorde te doen:
POP CX
POP BX
POP AX
Voor de communicatie met externe apparaten wordt het out-commando gebruikt om informatie naar een poort te sturen en het in-commando om de van een poort ontvangen informatie te lezen.
De syntaxis van het OUT-commando is:
OUT DX,AX
Waarbij DX de waarde bevat van de poort die zal worden gebruikt voor de communicatie en AX de informatie bevat die zal worden verzonden.
De syntaxis van het IN-commando is:
IN AX,DX
Waarbij AX het register is waar de binnenkomende informatie wordt bewaard en DX het adres bevat van de poort waar de informatie zal aankomen.
MOV-instructie
Wordt gebruikt voor gegevensoverdracht tussen geheugencellen, registers en de accu. Syntaxis is als volgt:
MOV-bestemming, bron
De verschillende verplaatsingen van gegevens die voor deze instructie zijn toegestaan, worden weergegeven in de onderstaande tabel:
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
Let us see an example:
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
Dit programma verplaatst de waarde van 0006H naar het AX-register, vervolgens verplaatst het de inhoud van AX (0006h) naar het BX-register, en ten slotte verplaatst het de 4C00h-waarde naar het AX-register om de uitvoering te beëindigen met de 4C-optie van de 21h-onderbreking . We nemen een korte introductie van interrupt 13H en interrupt 21H later.
Onderbrekingen
Een interrupt is een hardwarevoorziening die ervoor zorgt dat de CPU de uitvoering onderbreekt, de status opslaat en naar een specifieke locatie wordt overgebracht. De overdrachtslocatie specificeert het adres van een programma dat bedoeld is om actie te ondernemen als reactie op de onderbreking. Het programma dat als resultaat van de interrupt wordt uitgevoerd, wordt een interruptafhandelingsprogramma genoemd.
Bijvoorbeeld: als DOS wat informatie naar het BIOS wil sturen of BIOS wat informatie naar het computersysteem wil sturen, genereert DOS of BIOS interrupts. Telkens wanneer een interrupt wordt gegenereerd, onderbreekt de computer wat hij aan het doen is en zorgt eerst voor de bewerking die de interrupt heeft gegenereerd.
Elk apparaat dat een onderbreking kan genereren, krijgt een uniek onderbrekingsnummer om te identificeren welk apparaat deze onderbrekingen genereert. We zullen in dit boek alle functies en subfuncties van interrupt 13H, uitbreidingen van interrupt 13H en interrupt 21H bespreken.
Kortom, de onderbrekingen kunnen van de volgende drie typen zijn:
- Interne hardware-onderbrekingen
- Externe hardware-onderbrekingen
- Software-onderbrekingen
Interne hardware-onderbrekingen
Interne onderbrekingen worden gegenereerd door bepaalde gebeurtenissen die optreden tijdens de uitvoering van een programma. Dit type onderbrekingen wordt volledig beheerd door de hardware en het is niet mogelijk om ze te wijzigen.
Een duidelijk voorbeeld van dit soort onderbrekingen is degene die de teller van de interne klok van de computer actualiseert, de hardware roept meerdere keren per seconde naar deze onderbreking om de tijd up-to-date te houden.
>
Hoewel we deze onderbreking niet direct kunnen beheren, omdat we de tijdsupdate niet door middel van software kunnen controleren, is het toch mogelijk om de effecten ervan op de computer in ons voordeel te gebruiken.
Bijvoorbeeld: om een virtuele klok te maken die continu wordt bijgewerkt, hoeven we alleen een programma te schrijven dat de werkelijke waarde van de teller leest en deze te vertalen in een voor de gebruiker begrijpelijk formaat.
Externe hardware-onderbrekingen
Externe onderbrekingen worden gegenereerd door randapparatuur, zoals toetsenborden, printers, communicatiekaarten, enz. Ze worden ook gegenereerd door coprocessors. Het is niet mogelijk om externe onderbrekingen te deactiveren.
Deze onderbrekingen worden niet rechtstreeks naar de CPU gestuurd, maar ze worden verzonden naar een geïntegreerd circuit waarvan de functie is om uitsluitend dit soort onderbrekingen af te handelen
Software-onderbrekingen
Software-onderbrekingen kunnen direct worden geactiveerd door de assembler het nummer van de gewenste onderbreking op te roepen met de INT-instructie.
Het gebruik van onderbrekingen helpt ons bij het maken van programma's en door ze te gebruiken worden onze programma's korter. Het is gemakkelijker om ze te begrijpen en ze presteren meestal beter vanwege hun kleinere formaat. Dit type onderbrekingen kan worden onderverdeeld in twee categorieën: de DOS-onderbrekingen van het besturingssysteem en de BIOS-onderbrekingen.
Het verschil tussen de twee is dat de onderbrekingen van het besturingssysteem gemakkelijker te gebruiken zijn, maar ook langzamer zijn omdat deze onderbrekingen gebruik maken van het BIOS om hun doel te bereiken, aan de andere kant zijn de onderbrekingen van het BIOS veel sneller, maar ze hebben de nadeel dat ze, aangezien ze deel uitmaken van de hardware, zeer specifiek zijn en zelfs kunnen variëren afhankelijk van het merk van de fabrikant van het circuit.
De keuze van het type onderbreking dat moet worden gebruikt, hangt uitsluitend af van de kenmerken die u uw programma wilt geven.
Aangezien we interrupts zullen gebruiken voor het programmeren van gegevensherstel met behulp van C-taal via Interrupt-afhandeling met C, zullen we alleen Interrupt 13H, Interrupt 13H Extensions en Interrupt bespreken 21H routines speciaal. Het is niet zo belangrijk om alle andere interrupts en hun functies te bespreken, omdat in C-taal gemakkelijkere functies beschikbaar zijn om de meeste van deze taken uit te voeren. De kennis van Interrupt 13H en zijn extensies is echter een must voor het programmeren van gegevensherstel. |
Laten we een korte introductie geven van Interrupt 20H en Interrupt 21H. De waarde tussen haakjes (zoals 0x20) geeft aan, hoe te gebruiken
INT 20H ( 0x20) --> Terminate process
Call with: CS = segment address of program segment prefix
Returns: Nothing
Opmerkingen:
Het beëindigt het huidige proces. Dit is een van de vele methoden die een programma kan gebruiken om een definitieve exit uit te voeren. U kunt ook functies (00H of 31H of 4CH) van INT 21H of gewoon INT 27H gebruiken om een laatste exit uit te voeren, waarbij functies 31H en 4CH van INT 21H over het algemeen de voorkeur hebben omdat ze het mogelijk maken een retourcode door te geven aan het bovenliggende proces.
Het wordt aanbevolen dat als u File Control Blocks (FCB's) hebt gebruikt om een bestand te schrijven, u het bestand eerst moet sluiten, anders kunt u de gegevens kwijtraken, omdat bij het definitief afsluiten van al het geheugen dat door het proces is ingenomen wordt vrijgegeven, worden bestandsbuffers leeggemaakt en worden alle open handvatten voor bestanden of apparaten die eigendom zijn van het proces gesloten.
Als je dus open handvatten voor bestanden hebt, kun je de gegevens kwijtraken.
INT 21H (0x21)
Function 00H (0x00) --> Terminate process
Call with: AH = 00H
CS = segment address of program segment prefix
Returns: Nothing
Opmerkingen:
Deze interrupt beëindigt het huidige proces. Dit is een van de vele methoden die een programma kan gebruiken om een definitieve exit uit te voeren. Voor meer informatie zie INT 20H
INT 21H (0x21)
Function 01H (0x01) --> Character input with echo
Call with: AH = 01H
Returns: AL = 8-bit input data
Opmerkingen:
Deze interrupt leest een teken van het standaard invoerapparaat, zoals het toetsenbord, en geeft dit door aan het standaard uitvoerapparaat. Als er geen personage klaar is, wacht dan tot er een beschikbaar is.
INT 21H (0x21)
Function 02H (0x02) --> Character output
Call with: AH = 02H
DL = 8-bit data for output
Returns: Nothing
Opmerkingen:
Het voert een teken uit naar het standaard uitvoerapparaat. Uitvoer kan worden omgeleid. Als de uitvoer wordt omgeleid, is er geen manier om te detecteren dat de schijf vol is.
Strings kunnen ook strings naar het scherm worden gestuurd door een schrijfbewerking (INT 21H, Functie 40H) uit te voeren met behulp van de vooraf gedefinieerde handle voor de standaarduitvoer (0001H), als de uitvoer niet is omgeleid, of een handle heeft het logische apparaat CON verkregen .
INT 21H (0x21)
Function 03H (0x03) --> Auxiliary input
Call with: AH = 03H
Returns: AL = 8-bit input data
Opmerkingen:
Het leest een karakter van het standaard hulpapparaat. De standaard is de eerste seriële poort (COM1).
Als het hulpapparaat gegevens sneller verzendt dan uw programma deze kan verwerken, kunnen tekens verloren gaan. Er is geen manier voor een gebruikersprogramma om de status van het hulpapparaat te lezen of om I/O-fouten zoals verloren tekens te detecteren via deze functie-aanroep.
INT 21H (0x21)
Function 04H (0x04) --> Auxiliary output
Call with: AH = 04H
DL = 8-bit data for output
Returns: Nothing
Opmerkingen:
Deze functie van INT 21H voert een karakter uit naar het standaard hulpapparaat. De standaard is de eerste seriële poort (COM1). Strings kunnen ook naar het hulpapparaat worden gestuurd door een schrijfbewerking uit te voeren (INT 21H Functie 40H) met behulp van de vooraf gedefinieerde handgreep voor het standaard hulpapparaat (00034) of door een handgreep te gebruiken die is verkregen door het logische apparaat AUX te openen.
INT 21H (0x21)
Function 05H (0x05) --> Printer output
Call with: AH = 05H
DL = 8-bit data for output
Returns: Nothing
Opmerkingen:
Deze functie stuurt een teken naar het standaard lijstapparaat. Het standaardapparaat is de printer op de eerste parallelle poort (LPT1). Strings kunnen ook naar de printer worden gestuurd door een schrijfbewerking uit te voeren (INT 21H Functie 40H) met behulp van de vooraf gedefinieerde handgreep voor het standaard printerapparaat (0004H) of door een handgreep te gebruiken die is verkregen door het logische apparaat PRN of LPT1 te openen.
INT 21H (0x21)
Function 06H (0x06) --> Direct console I/O
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
Opmerkingen:
Het leest een teken van het standaard invoerapparaat of schrijft een teken naar het standaard uitvoerapparaat. I/O kan worden omgeleid, maar als I/O is omgeleid, is er geen manier om EOF of schijf vol te detecteren. Deze functie van INT 21H wordt gebruikt door programma's die alle mogelijke karakters en besturingscodes moeten lezen en schrijven zonder enige tussenkomst van het besturingssysteem.
INT 21H (0x21)
Function 07H (0x07) --> Unfiltered character input
without Echo
Call with: AH = 07H
Returns: AL = 8-bit input data
Opmerkingen:
Deze functie leest een teken van het standaard invoerapparaat zonder dit naar het standaard uitvoerapparaat te herhalen.
INT 21H (0x21)
Function 08H (0x08) --> Character input without
echo
Call with: AH = 08H
Returns: AL = 8-bit input data
Opmerkingen:
Deze functie leest een teken van het standaard invoerapparaat zonder dit naar het standaard uitvoerapparaat te herhalen.
INT 21H (0x21)
Function 09H (0x09) --> Display string
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Opmerkingen:
Het stuurt een reeks karakters naar het standaard uitvoerapparaat. Uitvoer kan worden omgeleid. Als de uitvoer is omgeleid, is er geen manier om te detecteren dat de schijf vol is. String kan ook naar het display worden verzonden door een schrijfbewerking uit te voeren (INT 21H Functie 40H) met behulp van de vooraf gedefinieerde handgreep voor de standaarduitvoer (0001H), als deze niet is omgeleid, of een handgreep die is verkregen door het logische apparaat CON te openen.
INT 21H (0x21)
Function 0AH (0x0A or 10) --> Buffered keyboard
input
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Opmerkingen:
Het leest een reeks bytes van het standaard invoerapparaat, tot en met een ASCII-carrouselterugloop (0DH), en plaatst ze in een door de gebruiker aangewezen buffer. De karakters worden doorgestuurd naar het standaard uitvoerapparaat. De buffer die door de functie wordt gebruikt, heeft het volgende formaat:
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
Function 0BH (0x0B or 11) --> Check input status
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
Opmerkingen:
Controleert of een teken beschikbaar is op het standaard invoerapparaat, zoals het toetsenbord. Deze functie is gelijk aan IOCTL INT 21H Functie 44H Subfunctie 06H.
INT 21H (0x21)
Function 0CH (0x0C or 12) --> Flush input buffer
and then Input
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Opmerkingen:
Wist de standaard invoerbuffer en roept vervolgens een van de tekeninvoerfuncties op. Invoer kan worden omgeleid. Een functienummer in AL behalve 01H, 06H, 07H, 08H of 0AH spoelt de invoerbuffer en geeft de controle terug aan het oproepende programma.
INT 21H (0x21)
Function 0DH (0x0D or 13) -> Disk reset
Call with: AH = 0DH
Returns:Nothing
Opmerkingen:
Met deze functie worden alle bestandsbuffers leeggemaakt. De functie werkt de schijfmap niet bij voor bestanden die nog open zijn.
INT 21H (0x21)
Function 0EH (0x0E or 14) -> Select disk
Call with: AH = 0EH
DL = drive code (0 = A, 1= B, etc.)
Returns: AL = number of logical drives in system
Opmerkingen:
Selecteert het opgegeven station als huidige of standaard schijfstation en retourneert het totale aantal logische stations in het systeem.
De toepassingen moeten zich beperken tot de stationsletters A-Z (0 = A, 1 = B, enz.). Logische schijven betekent het totale aantal blokapparaten, zoals diskettes en harde schijven, enz. Over het algemeen is een enkele fysieke harde schijf gepartitioneerd in twee of meer logische schijven.
INT 21H (0x21)
Function 0FH (0x0F or 15) -> Open file
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
If function unsuccessful and file not found
AL = 0FFH
Opmerkingen:
Opent een bestand en maakt het beschikbaar voor latere lees-/schrijfbewerkingen. Als het programma een andere recordgrootte dan 128 bytes gaat gebruiken, moet het veld voor recordgrootte worden ingesteld op FCB offset 0EH nadat het bestand met succes is geopend en vóór elke andere schijfbewerking.
INT 21H (0x21)
Function 10H (0x10 or 16) -> Close file
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Opmerkingen:
Het wordt gebruikt om een bestand te sluiten. Het sluit een bestand, spoelt alle interne MS-DOS-schijfbuffers die bij het bestand horen naar de schijf en werkt de schijfmap bij als het bestand is gewijzigd of uitgebreid.
INT 21H (0x21)
Function 11H (0x11 or 17) -> Find first file
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
And buffer at current disk transfer area (DTA) address filled in as an unopened normal FCB or extended FCB, depending on which type of FCB was input to function.
If function unsuccessful (no matching filename found)
AL = FFH
Opmerkingen:
Het zoekt in de huidige map op het aangewezen station naar een overeenkomende bestandsnaam. U kunt jokertekens (? en *) gebruiken. Deze functie retourneert de eerste overeenkomende bestandsnaam.
INT 21H (0x21)
Function 12H (0x12 or 18) -> Find next file
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Opmerkingen:
Dit is de metgezel van de vorige functie. Als INT 21H Functie 11H succesvol is geweest, wordt de volgende overeenkomende bestandsnaam geretourneerd, indien aanwezig. Deze functie gaat ervan uit dat de FCB die als invoer wordt gebruikt correct is geïnitialiseerd door een eerdere oproep naar INT 21H Functie 11H en mogelijke daaropvolgende oproepen naar INT 21H Functie 12H en dat de bestandsnaam of extensie waarnaar wordt gezocht ten minste één jokerteken bevat.
INT 21H (0x21)
Function 13H (0x13 or 19) -> Delete file
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Opmerkingen:
Het verwijdert alle overeenkomende bestanden uit de huidige map op de standaard of gespecificeerde schijf. U kunt ook jokertekens (? en *) gebruiken.
INT 21H (0x21)
Function 14H (0x14 or 20) -> Sequential read
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Opmerkingen:
Deze functie leest het volgende sequentiële gegevensblok uit een bestand en verhoogt vervolgens de bestandsaanwijzer op de juiste manier. Het aantal bytes aan gegevens dat moet worden gelezen, wordt gespecificeerd door het veld voor recordgrootte (offset 0EH) van het bestandsbeheerblok (FCB).
Het record wordt in het geheugen ingelezen op het huidige disk transfer area (DTA)-adres, gespecificeerd door de meest recente aanroep van INT 21H Functie 1AH. Als de grootte van het record en de locatie van de buffer zodanig zijn dat een segmentoverloop of -omhulling zou optreden, mislukt de functie met een retourcode van 02H.
INT 21H (0x21)
Function 15H (0x15 or 21) --> Sequential write
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Opmerkingen:
Deze functie schrijft het volgende sequentiële gegevensblok naar een bestand en verhoogt vervolgens de bestandsaanwijzer op de juiste manier. Het aantal bytes aan gegevens dat moet worden geschreven, wordt gespecificeerd door het veld voor recordgrootte (offset 0EH) van het bestandsbesturingsblok (FCB).
INT 21H (0x21)
Function 16H (0x16 or 22) --> Create file
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
Opmerkingen:
Deze functie maakt een nieuw directory-item aan in de huidige directory of kapt een bestaand bestand met dezelfde naam af tot een lengte van nul. Opent ook het bestand voor latere lees-/schrijfbewerkingen. Deze functie moet met de nodige voorzichtigheid worden gebruikt, omdat een bestaand bestand met de opgegeven naam wordt afgekapt tot een lengte van nul en alle gegevens in dat bestand onherstelbaar verloren gaan.
INT 21H (0x21)
Function 17H (0x17 or 23) --> Rename file
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Opmerkingen:
Deze functie verandert de naam van alle overeenkomende bestanden in de huidige map op de schijf in het opgegeven station.
Hiermee kunt u ook jokertekens gebruiken. Het speciale bestandsbesturingsblok heeft een stationscode, bestandsnaam en extensie op de gebruikelijke positie (bytes 0 tot en met 0BH) en een tweede bestandsnaam die 6 bytes na de eerste begint (offset 11H).
INT 21H
Function 18H (0x18 or 24) --> Reserved
INT 21H (0x21)
Function 19H (0x19 or 25) --> Get current disk
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
Opmerkingen:
Deze functie retourneert de stationscode van het huidige of standaardschijfstation.
INT 21H (0x21)
Function 1AH (0x1A or 26) --> Set DTA address
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
Opmerkingen:
Deze functie specificeert het adres van het schijfoverdrachtgebied (DTA) dat moet worden gebruikt voor volgende FCB-gerelateerde functieaanroepen.
INT 21H (0x21)
Function 1BH (0x1B or 27) --> Get default drive
data
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
Opmerkingen:
Deze functie haalt geselecteerde informatie over de standaard diskdrive en een verwijzing naar de media-identificatiebyte uit de bestandstoewijzingstabel.
De media-ID-byte heeft de volgende betekenissen:
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Function 1CH (0x1C or 28) --> Get drive data
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
Opmerkingen:
Deze functie verkrijgt toewijzingsinformatie over het gespecificeerde schijfstation en een verwijzing naar de media-identificatiebyte uit de bestandstoewijzingstabel. Raadpleeg de mediadescriptor-ID-bytetabel, gegeven in INT 21H, Functie 1BH, voor informatie over media-ID's.
INT 21H (0x21)
Function 1DH (0x1D or 29) --> Reserved
INT 21H (0x21)
Function 1EH (0x1E or 30) --> Reserved
INT 21H (0x21)
Function 1FH (0x1F or 31) --> Reserved
INT 21H (0x21)
Function 20H (0x20 or 32) --> Reserved
INT 21H (0x21)
Function 21H (0x21 or 33) --> Random read
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Opmerkingen:
Deze functie leest een geselecteerde record uit een bestand in het geheugen. Het record wordt in het geheugen ingelezen op het huidige schijfoverdrachtgebiedadres, gespecificeerd door de meest recente oproep aan INT 21H Functie 1AH.
INT 21H (0x21)
Function 22H (0x22 or 34) --> Random write
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
Opmerkingen:
Deze functie schrijft de data uit het geheugen naar een geselecteerde record in een bestand.
INT 21H (0x21)
Function 23H (0x23 or 35) --> Get file size
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Opmerkingen:
Deze functie zoekt naar een overeenkomend bestand in de huidige directory; als er een wordt gevonden, werkt de FCB bij met de grootte van het bestand in termen van aantal records. Er is geen standaard recordgrootte voor deze functie, daarom moet een geschikte waarde worden geplaatst in het veld FCB-recordgrootte (offset 0EH) voordat deze functie wordt aangeroepen.
INT 21H (0x21)
Function 24H (0x24 or 36) --> Set relative record
number
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
Opmerkingen:
Deze functie stelt het relatieve recordnummerveld van een bestandsbesturingsblok (FCB) in om overeen te komen met de huidige bestandspositie zoals vastgelegd in de geopende FCB.
INT 21H (0x21)
Function 25H (0x25 or 37) --> Set interrupt vector
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Opmerkingen:
Deze functie initialiseert een CPU-interruptvector om te verwijzen naar een interruptafhandelingsroutine. Het moet bij voorkeur worden gebruikt boven directe bewerking van de interrupt-vectortabel door goed opgevoede toepassingen.
INT 21H (0x21)
Function 26H (0x26 or 38) --> Create new Program
Segment Prefix (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Opmerkingen:
Deze functie kopieert het programmasegmentvoorvoegsel (PSP) van het programma dat momenteel wordt uitgevoerd naar een gespecificeerd segmentadres in het vrije geheugen, en werkt vervolgens de nieuwe PSP bij om het bruikbaar te maken voor een ander programma.
INT 21H (0x21)
Function 27H (0x27 or 39) --> Random block read
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Opmerkingen:
Deze functie leest een of meer opeenvolgende records uit een bestand in het geheugen, beginnend op een aangewezen bestandslocatie. Als de grootte en locatie van de buffer zodanig zijn dat er een segmentoverloop of omwikkeling zou optreden, mislukt de functie met een retourcode van 02H en als een gedeeltelijk record aan het einde van het bestand wordt gelezen, wordt de rest van het record opgevuld met nullen.
INT 21H (0x21)
Function 28H (0x28 or 40) --> Random block write
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
Opmerkingen:
Deze functie schrijft een of meer opeenvolgende records uit het geheugen naar een bestand, beginnend op een aangewezen bestandslocatie. Als de grootte en locatie van de buffer zodanig zijn dat er een segmentoverloop of omwikkeling zou optreden, mislukt de functie met een retourcode 02H.
INT 21H (0x21)
Function 29H (0x29 or 41) --> Parse filename
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Opmerkingen:
Deze functie ontleedt een tekstreeks in de verschillende velden van een bestandsbesturingsblok (FCB).
Deze functie beschouwt de tekens (: . ; , = + tab-spatie ) als scheidingstekens en beschouwt alle controletekens en tekens (: . ; , = + tab-spatie < > | / “ [ ]) als terminator-tekens.
INT 21H (0x21)
Function 2AH (0x2A or 42) --> Get day and date
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
Opmerkingen:
Deze functie verkrijgt de systeemdag van de maand, dag van de week, maand en jaar.
INT 21H (0x21)
Function 2BH (0x2B or 43) --> Set date
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
Opmerkingen:
Deze functie initialiseert het systeemklokstuurprogramma op een specifieke datum, maar de systeemtijd blijft ongewijzigd.
INT 21H (0x21)
Function 2CH (0x2C or 44) --> Get time
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Opmerkingen:
Dit wordt gebruikt om de tijd van de dag te verkrijgen van de real-time klokdriver van het systeem, geconverteerd naar uren, minuten, seconden en honderdsten van seconden.
INT 21H (0x21)
Function 2DH (0x2D or 45) --> Set time
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Opmerkingen:
Deze functie initialiseert de real-time klok van het systeem op een gespecificeerd uur, minuut, seconde en honderdste van een seconde. De systeemdatum wordt niet beïnvloed.
INT 21H (0x21)
Function 2EH (0x2E or 46) --> Set verify flag
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Returns: Nothing
Opmerkingen:
Deze functie schakelt de vlag van het besturingssysteem in of uit voor automatische lees-na-schrijfverificatie van gegevens. De standaardinstelling van de verificatievlag is UIT omdat verificatie bij lezen na schrijven schijfbewerkingen vertraagt.
INT 21H (0x21)
Function 2FH (0x2F or 47) --> Get DTA address
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
Opmerkingen:
Deze functie verkrijgt het huidige adres van het schijfoverdrachtgebied (DTA) voor lees-/schrijfbewerkingen van FCB-bestanden.
INT 21H (0x21)
Function 30H (0x30 or 48) --> Get MS-DOS
version number
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Opmerkingen:
Het retourneert het versienummer van het host MS-DOS-besturingssysteem.
INT 21H (0x21)
Function 31H (0x31 or 49) --> Terminate and Stay
Resident (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Opmerkingen:
Deze functie beëindigt de uitvoering van het programma dat momenteel wordt uitgevoerd door een retourcode door te geven aan het bovenliggende proces, maar reserveert een deel of het hele geheugen van het programma zodat het wordt bedekt door het volgende tijdelijke programma dat moet worden geladen. Deze functie moet worden gebruikt in plaats van INT 27H omdat het CS ondersteunt om het segment van het programmasegmentprefix te bevatten.
INT 21H (0x21)
Function 32H (0x32 or 50) --> Reserved
INT 21H (0x21)
Function 33H (0x33 or 51) --> Get or set break flag, get boot Drive
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
Opmerkingen:
Deze functie verkrijgt of wijzigt de status van de break-vlag van het besturingssysteem, die de Ctrl-C-controle tijdens functieaanroepen beïnvloedt.
INT 21H (0x21)
Function 34H (0x34 or 52) --> Reserved
INT 21H (0x21)
Function 35H (0x35 or 53) --> Get interrupt vector
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Opmerkingen:
Deze functie verkrijgt het adres van de huidige interrupt-handler-routine voor de gespecificeerde machine-interrupt.
INT 21H (0x21)
Function 36H (0x36 or 54) --> Get drive allocation
Information
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
Opmerkingen:
Deze functie verkrijgt geselecteerde informatie over een diskdrive.
Deze functie is erg belangrijk bij het programmeren van gegevensherstel en het oplossen van problemen met schijven, op basis waarvan de capaciteit van de schijf en de resterende vrije ruimte en vele andere belangrijke dingen kunnen worden berekend.
INT 21H (0x21)
Function 37H (0x37 or 55) --> Reserved
INT 21H (0x21)
Function 38H (0x38 or 56) --> Get or set country
information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verkrijgt internationale informatie voor het huidige of gespecificeerde land of stelt de huidige landcode in.
INT 21H (0x21)
Function 39H (0x39 or 57) --> Create directory
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie maakt een map aan met het opgegeven station en pad.
ASCIIZ staat bekend als de reeks ASCII-tekens die wordt beëindigd als, Null of Zero, Byte. |
INT 21H (0x21)
Function 3AH (0x3A or 58) --> Delete directory
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verwijdert een map met het opgegeven station en pad. Als een element van de padnaam niet bestaat of de map niet leeg is of de toegang wordt geweigerd of de opgegeven map ook de huidige map is, mislukt de functie om de map te verwijderen.
INT 21H (0x21)
Function 3BH (0x3B or 59) --> Set current
directory
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie stelt de huidige of standaarddirectory in met behulp van het opgegeven station en pad. Als het opgegeven pad of enig element van het pad niet bestaat, mislukt de functie.
INT 21H (0x21)
Function 3CH (0x3C or 60) --> Create file
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
De betekenis van bits wordt gegeven in de volgende tabel:
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Als een ASCIIZ-padnaam is opgegeven, maakt deze functie een nieuw bestand aan in de aangewezen of standaardmap op de aangewezen of standaardschijf. Als het opgegeven bestand al bestaat, wordt het afgekapt tot een lengte van nul. In beide gevallen wordt het bestand geopend en wordt een handvat geretourneerd dat door het programma kan worden gebruikt voor latere toegang tot het bestand.
Als een element van de padnaam niet bestaat of een bestand wordt gemaakt in de hoofdmap en de hoofdmap is vol of de toegang wordt geweigerd of een bestand met alleen-lezen-attribuut bevindt zich al in de opgegeven map, dan mislukt de functie voor het maken van een bestand.
INT 21H (0x21)
Function 3DH (0x3D or 61) --> Open file
Call with: AH = 3DH
AL = access mode
De betekenis van bits in de toegangsmodus wordt gegeven in de volgende tabel:
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Als een ASCIIZ-padnaam is opgegeven, opent deze functie het gespecificeerde bestand in de aangewezen of standaarddirectory op de aangewezen of standaardschijf. Er wordt een handle geretourneerd die door het programma kan worden gebruikt voor latere toegang tot het bestand.
INT 21H (0x21)
Function 3EH (0x3E or 62) --> Close file
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie spoelt alle interne buffers die bij het bestand horen naar schijf, sluit het bestand en geeft de handle vrij voor hergebruik, van eerder geopend of met succes gemaakt met succes van een bepaalde handle. Als het bestand is gewijzigd, worden de tijd- en datumstempel en de bestandsgrootte bijgewerkt in de directoryvermelding van het bestand.
INT 21H (0x21)
Function 3FH (0x3F or 63) --> Read file or device
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie brengt gegevens op de huidige positie van de bestandsaanwijzer over van het bestand naar de buffer en werkt vervolgens de positie van de bestandsaanwijzer bij voor een gegeven geldige bestandshandle van een eerdere open- of maakbewerking, een bufferadres en een lengte in bytes.
INT 21H (0x21)
Function 40H (0x40 or 64) --> Write file or device
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie draagt gegevens over van de buffer naar het bestand en werkt vervolgens de positie van de bestandsaanwijzer bij voor een gegeven geldige bestandshandle van een eerdere open- of maakbewerking, een bufferadres en een lengte in bytes. Als de functie wordt aangeroepen met CX = 0, wordt het bestand afgekapt of uitgebreid naar de huidige positie van de bestandsaanwijzer.
INT 21H (0x21)
Function 41H (0x41 or 65) --> Delete file
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verwijdert een bestand van de standaard of gespecificeerde schijf en directory. De functie verwijdert een bestand door het eerste teken van de bestandsnaam in de hoofdmap te vervangen door het teken E5H (0xE5) en de clusters van het bestand beschikbaar te maken voor de nieuwe gegevens in de bestandstoewijzingstabel. Tot die tijd worden de feitelijke gegevens die in die clusters zijn opgeslagen, niet overschreven.
INT 21H (0x21)
Function 42H (0x42 or 66) --> Set file pointer
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie stelt de locatie van de bestandsaanwijzer in ten opzichte van het begin van het bestand, het einde van het bestand of de huidige bestandspositie.
INT 21H (0x21)
Function 43H (0x43 or 67) --> Get or set file
attributes
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verkrijgt of wijzigt de attributen van bestand (alleen-lezen, verborgen, systeem of archief) of map. Raadpleeg voor de betekenis van bits voor verschillende attributen de eerder gegeven Bits-betekenistabel.
INT 21H (0x21)
Function 44H (0x44 or 68) --> Input/Output
Control (I/O Ctrl)
Deze functie biedt een direct communicatiepad tussen een applicatieprogramma en een apparaatstuurprogramma. Hiermee kan een programma hardwareafhankelijke informatie verkrijgen en bewerkingen aanvragen die niet worden ondersteund door andere MS-DOS-functieaanroepen.
De subfuncties van Input en output Control zijn weergegeven in de volgende tabel:
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 00H (0x00)
I/O Ctrl --> get device information
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie retourneert een apparaatinformatiewoord voor het bestand of apparaat dat is gekoppeld aan de opgegeven handle.
INT 21H (0x21)
Function 44H (0x44 or 68), sub function 01H (0x01)
I/O Ctrl --> set device information
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie van functie 44H van INT 21H, stelt bepaalde vlaggen in voor een handle die bij een karakterapparaat hoort. Deze subfunctie mag niet worden gebruikt voor een handle die aan een bestand is gekoppeld.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 02H (0x02)
I/O Ctrl --> read control data character device
driver
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Het leest besturingsgegevens van een stuurprogramma voor een tekenapparaat. De lengte en inhoud van de gegevens worden gespecificeerd voor elk apparaatstuurprogramma en volgen geen standaardindeling. Deze functie leidt niet noodzakelijkerwijs tot invoer van het fysieke apparaat.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 03H (0x03)
I/O Ctrl --> write control data character-device
driver
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie draagt besturingsgegevens over van een applicatie naar een character-device driver. De lengte en inhoud van de gegevens zijn specifiek voor elk apparaatstuurprogramma en volgen geen standaardindeling. Deze functie leidt niet noodzakelijkerwijs tot uitvoer naar het fysieke apparaat.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 04H (0x04)
I/O Ctrl --> Read control data block-device driver
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie brengt besturingsgegevens van een block-device driver rechtstreeks over naar de buffer van een applicatieprogramma. De lengte en inhoud van de gegevens zijn specifiek voor elk apparaatstuurprogramma en volgen geen standaardindeling. Deze functie resulteert niet noodzakelijk in invoer van het fysieke apparaat.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 05H (0x05)
I/O Ctrl --> write control data block-device driver
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie draagt besturingsgegevens van een applicatieprogramma direct over naar een block-device driver. De lengte en inhoud van de besturingsgegevens zijn specifiek voor elk apparaatstuurprogramma en volgen geen standaardformaat. Deze functie leidt niet noodzakelijkerwijs tot uitvoer naar het fysieke apparaat.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 06H (0x06)
I/O Ctrl --> check input status
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Het retourneert een code die aangeeft of het apparaat of de bestanden die aan een handle zijn gekoppeld, gereed zijn voor invoer.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 07H (0x07)
I/O Ctrl --> check output status
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Het retourneert een code die aangeeft of het apparaat dat aan een handle is gekoppeld, gereed is voor uitvoer.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 08H (0x08)
I/O Ctrl --> check if block device is removable
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie controleert of het opgegeven blokapparaat een verwisselbaar opslagmedium bevat, zoals een diskette. Als een bestand op een bepaalde schijf niet wordt gevonden zoals verwacht, kan een programma deze subfunctie gebruiken om te bepalen of de gebruiker moet worden gevraagd om een andere schijf te plaatsen.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 09H (0x09)
I/O Ctrl --> check if block device is remote
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie controleert of het opgegeven blokapparaat lokaal is (aangesloten op de computer waarop het programma draait) of op afstand (omgeleid naar een netwerkserver).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0AH (0x0A or 10) I/O Ctrl --> check if handle is remote
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Het controleert of de opgegeven handle verwijst naar een bestand of apparaat dat lokaal is (op de pc waarop het programma draait) of op afstand (op een netwerkserver).
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0BH (0x0B or 11) I/O Ctrl --> change sharing retry count
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie stelt het aantal keren in dat MS-DOS een schijfbewerking opnieuw probeert uit te voeren na een fout veroorzaakt door een schending van het delen van bestanden voordat het een fout terugstuurt naar het aanvraagproces. Deze subfunctie is niet beschikbaar tenzij de module voor het delen van bestanden is geladen.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0CH (0x0C or 12) I/O Ctrl generic I/O control for
character devices
Call with: AH = 44H
AL = 0CH
BX = handle
CH =category (major) code:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = function (minor) code:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Het biedt een algemeen mechanisme voor communicatie tussen toepassingsprogramma's en stuurprogramma's voor tekens.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0DH (0x0D or 13) I/O Ctrl --> generic I/O control for block
devices
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie biedt een algemeen mechanisme voor communicatie tussen toepassingsprogramma's en stuurprogramma's voor blokapparaten. Hiermee kan een programma apparaatparameters voor een logische schijfeenheid inspecteren of wijzigen en schijftracks op een hardware-onafhankelijke manier lezen, schrijven, formatteren en verifiëren.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0EH (0x0E or 14) I/O Ctrl -->> get logical drive map
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Opmerkingen:
Het retourneert de logische schijfcode die het meest recent is gebruikt om toegang te krijgen tot de opgegeven blokschijf.
INT 21H (0x21)
Function 44H (0x44 or 68), Sub function 0FH (0x0F or 15) I/O Ctrl --> set logical drive map
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie stelt de volgende logische schijfcode in die zal worden gebruikt om naar een blokapparaat te verwijzen.
INT 21H (0x21)
Function 45H (0x45 or 69) --> Duplicate handle
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie retourneert een nieuwe handle die verwijst naar hetzelfde apparaat of bestand op dezelfde positie voor een gegeven handle voor een momenteel geopend apparaat of bestand.
INT 21H (0x21)
Function 46H (0x46 or 70) --> Redirect handle
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Als er twee handvatten zijn, zorgt deze functie ervoor dat de tweede handle verwijst naar hetzelfde apparaat of bestand op dezelfde locatie als de eerste handle. De tweede handle wordt dan omgeleid.
INT 21H (0x21)
Function 47H (0x47 or 71) --> Get current
directory
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verkrijgt een ASCIIZ-tekenreeks die het pad van de root naar de huidige map beschrijft, en de naam van die map.
INT 21H (0x21)
Function 48H (0x48 or 72) --> Allocate memory
block
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Opmerkingen:
Het wijst een geheugenblok toe en retourneert een aanwijzer naar het begin van het toegewezen gebied.
INT 21H (0x21)
Function 49H (0x49 or 73) --> Release memory
block
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie wordt gebruikt om een geheugenblok vrij te geven en beschikbaar te maken voor gebruik door andere programma's. De functie zal mislukken of kan onvoorspelbare systeemfouten veroorzaken als het programma een geheugenblok vrijgeeft dat er niet bij hoort of als het segmentadres dat in register ES is doorgegeven geen geldig basisadres is voor een bestaand geheugenblok.
INT 21H (0x21)
Function 4AH (0x4A or 74) --> Resize memory
block
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Opmerkingen:
Deze functie verkleint of breidt dynamisch een geheugenblok uit, afhankelijk van de behoeften van een applicatieprogramma.
INT 21H (0x21)
Function 4BH (0x4B or 75) --> Execute program (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Met deze functie kan een applicatieprogramma een ander programma uitvoeren en de controle terugkrijgen wanneer het klaar is. Kan ook worden gebruikt om overlays te laden, hoewel dit gebruik ongebruikelijk is.
INT 21H (0x21)
Function 4CH (0x4C or 76) --> Terminate process
with Return code
Call with: AH = 4CH
AL = return code
Returns: Nothing
Opmerkingen:
Deze functie beëindigt het huidige proces en geeft een retourcode door aan het bovenliggende proces. Dit is een van de vele methoden die een programma kan gebruiken om een definitieve exit uit te voeren.
INT 21H (0x21)
Function 4DH (0x4D or 77) --> Get return code
Call with: AH = 4DH
Returns: AH = exit type
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
Opmerkingen:
Deze functie wordt gebruikt door een bovenliggend proces, na de succesvolle uitvoering van een EXEC-aanroep (INT 21H Functie 4BH), om de retourcode en het beëindigingstype van een onderliggend proces te verkrijgen.
INT 21H (0x21)
Function 4EH (0x4E or 78) --> Find first file
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
En zoekresultaten werden als volgt geretourneerd in het huidige schijfoverdrachtgebied:
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie zoekt in de standaard of gespecificeerde directory op het standaard of gespecificeerde station naar het eerste overeenkomende bestand voor een gegeven bestandsspecificatie in de vorm van een ASCIIZ-string. Raadpleeg voor bitbetekenis van attributen de eerder gegeven tabel met bitbetekenis.
INT 21H (0x21)
Function 4FH (0x4F or 79) --> Find next file
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Als er een eerdere succesvolle aanroep van INT 21H Functie 4EH is, vindt deze functie het volgende bestand in de standaard of gespecificeerde map op het standaard of gespecificeerde station dat overeenkomt met de originele bestandsspecificatie.
INT 21H (0x21)
Function 50H (0x50 or 80) --> Reserved
INT 21H (0x21)
Function 51H (0x51 or 81) --> Reserved
INT 21H (0x21)
Function 52H (0x52 or 82) --> Reserved
INT 21H (0x21)
Function 53H (0x53 or 83) --> Reserved
INT 21H (0x21)
Function 54H (0x54 or 84) --> Get verify flag
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
Opmerkingen:
Deze functie verkrijgt de huidige waarde van de systeemverificatie (lezen-na-schrijven) vlag.
INT 21H (0x21)
Function 55H (0x55 or 85) --> Reserved
INT 21H (0x21)
Function 56H (0x56 or 86) --> Rename file
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie hernoemt een bestand en/of verplaatst de directory-ingang naar een andere op dezelfde schijf. In MS-DOS versie 3.0 en later kan deze functie ook worden gebruikt om mappen te hernoemen
Als een element van de padnaam niet bestaat of een bestand met de nieuwe padnaam al bestaat of de huidige padnaamspecificatie een ander schijfstation bevat dan de nieuwe padnaam of het bestand wordt verplaatst naar de hoofdmap en de hoofdmap directory is vol of gebruiker heeft onvoldoende rechten, functie om bestanden te hernoemen mislukt.
INT 21H (0x21)
Function 57H (0x57 or 87) --> Get or set file date and time
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verkrijgt of wijzigt de datum- en tijdstempel in de rootdirectory van het bestand.
INT 21H (0x21)
Function 58H (0x58 or 88) --> Get or set allocation strategy
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Verkrijgt of wijzigt de code die de huidige MS-DOS-strategie aangeeft voor het toewijzen van geheugenblokken. De standaard MS-DOS-geheugentoewijzingsstrategie is First Fit (code 0).
In de First fit-geheugentoewijzing doorzoekt MS-DOS de beschikbare geheugenblokken van laag adres naar hoog adres, waarbij de eerste groot genoeg wordt toegewezen om aan het bloktoewijzingsverzoek te voldoen.
In het geval van de best passende toewijzingsstrategie, doorzoekt MS-DOS alle beschikbare geheugenblokken en wijst het kleinste beschikbare blok toe dat aan het verzoek zal voldoen, ongeacht de positie.
In de Last fit-geheugentoewijzingsstrategie doorzoekt MS-DOS de beschikbare geheugenblokken van hoge naar lage adressen, waarbij de hoogste wordt toegewezen die groot genoeg is om aan het bloktoewijzingsverzoek te voldoen.
INT 21H (0x21)
Function 59H (0x59 or 89) --> Get extended error
Information
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
Hieronder vindt u een tabel met foutcodes:
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = error class
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = recommend action
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Opmerkingen:
Deze functie verkrijgt gedetailleerde foutinformatie na een eerdere mislukte INT 21H-functieaanroep, inclusief de aanbevolen herstelactie.
INT 21H (0x21)
Function 5AH (0x5A or 90) --> Create temporary
file
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie creëert een bestand met een unieke naam, in de huidige of gespecificeerde map op de standaard of gespecificeerde schijf, en retourneert een handvat dat door het programma door het programma kan worden gebruikt voor latere toegang tot het bestand. De naam die voor het bestand is gegenereerd, wordt ook geretourneerd in een buffer die door het programma is opgegeven.
Als een element van de padnaam niet bestaat of het bestand wordt aangemaakt in de hoofdmap en de hoofdmap is vol, dan mislukt de functie.
INT 21H (0x21)
Function 5BH (0x5B or 91) --> Create new file
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie maakt een bestand aan in de aangewezen of standaardmap op de aangewezen of standaardschijf en retourneert een handvat dat door het programma kan worden gebruikt voor latere toegang tot het bestand voor een bepaalde ASCIIZ-padnaam.
Als er al een bestand met dezelfde naam en hetzelfde pad bestaat of een element van het opgegeven pad niet bestaat of het bestand wordt gemaakt in de hoofdmap, en de hoofdmap is vol of de gebruiker heeft onvoldoende toegangsrechten, functie mislukt.
INT 21H (0x21)
Function 5CH (0x5C or 92) --> Lock or unlock file region
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie vergrendelt of ontgrendelt de gespecificeerde regio van een bestand. Deze functie is niet beschikbaar tenzij de module voor het delen van bestanden (zoals SHARE.EXE) is geladen.
INT 21H (0x21)
Function 5DH (0x5D or 93) --> Reserved
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 00H (0x00)
--> Get machine name
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie retourneert het adres van een ASCIIZ-tekenreeks die de lokale computer identificeert. Deze functieaanroep is alleen beschikbaar wanneer het Microsoft Network actief is.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 02H (0x02)
--> Set printer setup string
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie specificeert een string die moet worden verzonden vóór alle bestanden die naar een bepaalde netwerkprinter worden gestuurd, zodat gebruikers op verschillende netwerkknooppunten individuele bedrijfsmodi op dezelfde printer kunnen specificeren.
INT 21H (0x21)
Function 5EH (0x5E or 94), sub function 03H (0x03)
--> Get printer setup string
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie wordt gebruikt om de printerinstallatiereeks voor een bepaalde netwerkprinter te verkrijgen.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 02H (0x02)
--> Get redirection list entry
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie maakt inspectie mogelijk van de systeemomleidingslijst, die lokale logische namen associeert met netwerkbestanden, mappen of printers. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de module voor het delen van bestanden is geladen.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 03H (0x03) --> Redirect device
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Brengt omleiding over het netwerk tot stand door een lokale apparaatnaam te koppelen aan een netwerknaam. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de module voor het delen van bestanden (SHARE.EXE) is geladen.
INT 21H (0x21)
Function 5FH (0x5F or 95), sub function 04H (0x04)
--> Cancel device redirection
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze subfunctie annuleert een eerder omleidingsverzoek door de koppeling van een lokale apparaatnaam aan een netwerknaam te verwijderen. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de module voor het delen van bestanden, zoals SHARE.EXE, is geladen.
INT 21H (0x21)
Function 60H (0x60 or 96) --> Reserved
INT 21H (0x21)
Function 61H (0x61 or 97) --> Reserved
INT 21H (0x21)
Function 62H (0x62 or 98) --> Get Program Segment
Prefix (PSP) address
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Opmerkingen:
Deze functie verkrijgt het segmentadres (paragraafadres) van het Program Segment Prefix (PSP) voor het programma dat op dat moment wordt uitgevoerd.
INT 21H (0x21)
Function 64H (0x64 or 100) --> Reserved
INT 21H
Function 65H (0x65 or 101) --> Get extended
country Information
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Hiermee wordt informatie verkregen over het opgegeven land en/of de codepagina. Raadpleeg de eerder gegeven internationaliseringstabel voor informatie over informatiebytes.
INT 21H (0x21)
Function 66H (0x66 or 102) --> Get or set code
page
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie verkrijgt of selecteert de huidige codetabel.
INT 21H (0x21)
Function 67H (0x67 or 103) --> Set handle count
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie stelt het maximum aantal bestanden en apparaten in dat gelijktijdig geopend mag worden met gebruik van handvatten door het huidige proces.
INT 21H (0x21)
Function 68H (0x68 or 104) --> Commit file
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie dwingt alle gegevens in interne buffers van MS DOS die zijn gekoppeld aan een gespecificeerde handle fysiek naar het apparaat te schrijven. Als de handle naar een bestand verwijst en het bestand is gewijzigd, worden de tijd- en datumstempel en de bestandsgrootte in de hoofddirectory van het bestand bijgewerkt.
INT 21H (0x21)
Function 69H (0x69 or 105) --> Reserved
INT 21H (0x21)
Function 6AH (0x6A or 106) --> Reserved
INT 21H (0x21)
Function 6BH (0x6B or 107) --> Reserved
INT 21H (0x21)
Function 6CH (0x6C or 108) --> Extended open file
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = file attribute (bits may be combined;
if ignored if openrefer Bits Significance table.
DX = open flag
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Opmerkingen:
Deze functie opent, maakt of vervangt een bestand in de aangewezen of standaardmap op de aangewezen of standaardschijf voor een bepaalde ASCIIZ-padnaam en retourneert een handvat dat door het programma kan worden gebruikt voor latere toegang tot het bestand.
Als een element van de padnaam niet bestaat of het bestand wordt gemaakt in de hoofdmap en de hoofdmap is vol of het bestand wordt gemaakt en een bestand met dezelfde naam en het alleen-lezen-kenmerk bestaat al in de opgegeven map of de gebruiker heeft onvoldoende toegangsrechten, de functie mislukt.
Pagina aangepast op: 10/01/2022