Hoofdstuk – 6
Inleiding tot computerbeginselen
Invoering
Soms, in sommige gevallen, wanneer u probeert gegevens te herstellen of een taak uitvoert om problemen met gegevens en schijven op te lossen (of het kan een andere systeemgerelateerde taak zijn), is het erg handig om de opdracht DEBUG DOC te gebruiken.
Het is ook mogelijk dat het in sommige speciale gevallen makkelijker is om deze specifieke taak uit te voeren met DEBUG dan met programmeren. Laten we eens naar een voorbeeld kijken. De volgende debug-code is voldoende om een DBR-back-up te maken. Voer de volgende regels in:
DEBUGGEN VAN BKDBR.BIN
L 100 2 0 1
R SH
200
IN
IN
Hier ziet u dat u door slechts een paar regels hierboven te typen, het schrijven van een programma kunt vermijden. Laten we eens kijken naar een ander codevoorbeeld dat een DBR-back-up naar schijf laadt
Onthoud dit altijd! Probeer dit niet te doen zonder volledige kennis. Weet zeker wat je gaat doen. Onzorgvuldig gebruik van de volgende instructies kan leiden tot groot gegevensverlies, omdat onjuist gebruik van de instructies ertoe kan leiden dat alle informatie op de schijf ontoegankelijk wordt.
DEBUGGEN VAN BKDBR.BIN
Op 100 2 0 1
IN
Nadat u de code van dit voorbeeld hebt bekeken, kunt u zich voorstellen hoe nuttig dit programma u kan zijn wanneer u het het hardst nodig hebt. Bovendien is het onmogelijk om in elke situatie te programmeren. Bij eenvoudige problemen hoeft u alleen maar debug.exe/debug.com naar de opstartschijf te kopiëren en te beginnen met het schrijven van code om de build-instructies te gebruiken.
De functionaliteit en voorbeelden die in dit hoofdstuk en in dit boek worden beschreven, zijn alleen compatibel met de architectuur van de Intel x86-processorfamilie.
Allereerst moeten we iets weten over de basisbeginselen van computerarchitectuur, zodat we de termen kunnen begrijpen die in de volgende paragrafen worden gebruikt bij het beschrijven van de werking en voorbeelden in verschillende fasen. Laten we de basisbeginselen van computerarchitectuur eens leren:
Basisconcepten
CPU
Dit onderdeel staat ook bekend als de centrale verwerkingseenheid (CPU), die op zijn beurt bestaat uit een besturingseenheid en een reken- en logische eenheid. De functies ervan omvatten het lezen en schrijven van de inhoud van geheugencellen, het overbrengen van gegevens tussen geheugencellen en speciale registers en het decoderen en uitvoeren van programma-instructies. De processor heeft een aantal geheugencellen die zeer frequent gebruikt worden en dus onderdeel zijn van de CPU.
Deze cellen worden registers genoemd. Een processor kan één of twee dozijn van dergelijke registers hebben. De rekenkundige en logische eenheid van de CPU voert bewerkingen uit die verband houden met numerieke en symbolische berekeningen.
Normaal gesproken kunnen deze apparaten alleen heel basale bewerkingen uitvoeren, zoals het optellen en aftrekken van twee gehele getallen, het vermenigvuldigen en delen van gehele getallen, het manipuleren van registerbits en het vergelijken van de inhoud van twee registers. Personal computers kunnen worden ingedeeld op basis van hun woordgrootte. Dit is het aantal bits dat de processor tegelijk kan verwerken.
Centraal geheugen
Het is een groep cellen die gemaakt zijn van halfgeleiders en die gebruikt worden voor algemene processen, zoals het uitvoeren van programma's en het opslaan van informatie voor bewerkingen. Elk van deze cellen kan een numerieke waarde bevatten en ze hebben de eigenschap dat ze richtinggevend zijn. Dit is wat ze van elkaar kunnen onderscheiden door een uniek nummer of adres voor elke cel te gebruiken. De algemene naam voor deze opslagapparaten is random access memory of RAM.
Het grootste nadeel van dit type geheugen is dat geïntegreerde schakelingen opgeslagen informatie verliezen als de stroomtoevoer wordt onderbroken. Hierdoor ontstond er een geheugen, waarvan de informatie niet verloren gaat als het systeem wordt uitgeschakeld. Dit geheugen wordt Read Only Memory of ROM genoemd.
Om informatie te kunnen verwerken, is het noodzakelijk dat een computer deze informatie in speciale cellen, registers genaamd, opslaat. De registers bestaan uit groepen van 8 of 16 flip-flops.
Een flip-flop is een apparaat dat twee spanningsniveaus kan opslaan, een laag niveau, normaal gesproken 0,5 volt, en een ander niveau, meestal 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 worden meestal bits genoemd. Het zijn de kleinste informatie-eenheden in een computer.
Een groep van 16 bits wordt een woord genoemd. Een woord kan worden verdeeld in groepen van 8 bits, die bytes worden genoemd. Groepen van 4 bits worden nibbles genoemd.
CPU-registers
De CPU heeft 4 interne registers, elk met 16 bits. De eerste vier, AX, BX, CX en DX, zijn algemene registers en kunnen ook worden gebruikt als 8-bits registers. Als ze op die manier worden gebruikt, is het nodig om ze bijvoorbeeld te benoemen als: AH en AL, wat de hoge en lage bytes van het AX-register zijn. Deze nomenclatuur is ook van toepassing op de BX-, CX- en DX-registers.
De registers die bekend zijn onder hun specifieke namen:
Register |
Specifieke naam |
BIJL |
Accumulator |
BX |
Basisregister |
CX |
Telregister |
DX |
Gegevensregister |
DS |
Gegevenssegmentregister |
IS |
Extra segmentregister |
SS |
Batterijsegmentregister |
CS |
Codesegmentregister |
BP |
Basiswijzers registreren |
EN |
Bronindexregister |
VAN |
Bestemmingsindexregister |
SP |
Batterijwijzerregister |
IE |
Volgende instructie pointer register |
F |
Vlaggenregister |
We zullen deze registers echter in de volgende hoofdstukken uitgebreid gebruiken bij interruptprogrammering via C. Het is echter wel handig om hier eerst de basisbeginselen van assembler te leren, omdat dit ons helpt bij het programmeren van schijfbewerkingen, etc.
Het is mogelijk om de waarden van de interne registers van de CPU te visualiseren met behulp van het Debug-programma. Om te beginnen met werken met Debug, typt u de volgende prompt op uw computer:
C:/>Debuggen <Enter>
Op de volgende regel verschijnt een streepje, dit is de indicator van Debug. Op dit moment kunnen de Debug-instructies worden geïntroduceerd met behulp van de volgende opdracht:
- r <Enter>
Alle inhoud van de interne registers van de CPU worden weergegeven. Een alternatief voor het bekijken ervan is om de opdracht "r" te gebruiken met als parameter de naam van het register waarvan de waarde bekeken moet worden. Bijvoorbeeld:
-rbx <Enter>
Deze instructie geeft alleen de inhoud van het BX-register weer en de Debug-indicator verandert van "-" naar ":"
Wanneer de prompt er zo uitziet, is het mogelijk om de waarde van het register dat u zag te wijzigen door de nieuwe waarde en <Enter> in te typen. U kunt ook de oude waarde behouden door op Enter te drukken zonder een andere waarde in te typen.
Het is mogelijk om de waarde van het flagregister te wijzigen en het te gebruiken als een controlestructuur in onze programma's, zoals we later zullen zien. Elke bit van het register heeft een speciale naam en betekenis, de volgende lijst beschrijft de waarde van elke bit, aan of uit en de relatie met de bewerkingen van de processor:
Overloop
NV = er is geen overloop
OV = er is een overloop
Richting
OMHOOG = vooruit
DN = achteruit
Onderbreekt
DI = gedeactiveerd
EI = geactiveerd
Teken
PL = positief
NG = negatief
Nul
NZ = het is niet nul
ZR = het is nul
Hulpdrager
NA = er is geen hulptransport
AC = er is een hulptransport
Pariteit
PO = ongelijke pariteit
PE = even pariteit
Dragen
NC = er is geen overdracht
CY = er is sprake van overdracht
Assembler-structuur
In assemblertaalcode bestaan regels uit twee delen, het eerste deel is de naam van de instructie die moet worden uitgevoerd, en het tweede deel zijn de parameters van de opdracht. Bijvoorbeeld:
VOEG ah, bh toe
Hierbij is "ADD" de uit te voeren opdracht; in dit geval een optelling, en zowel "ah" als "bh" zijn de parameters.
De naam van de instructies in taal bestaat uit twee, drie of vier letters. Deze instructies worden ook wel mnemonische namen of bewerkingscodes genoemd, omdat ze een functie vertegenwoordigen die de processor zal uitvoeren. Er zijn enkele opdrachten die geen parameters nodig hebben voor hun werking, en andere die slechts één parameter nodig hebben.
Soms worden instructies als volgt gebruikt:
VOEG al toe,[170]
De haakjes in de tweede parameter geven aan dat we gaan werken met de inhoud van geheugencelnummer 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 illustreert wat we hebben gezien, en wat we gaan doen is twee waarden toevoegen die we direct in het programma zullen introduceren.
De eerste stap is het starten van de debug-opdracht. Deze stap bestaat alleen uit het typen van debug <Enter> op de prompt van het besturingssysteem.
Om een programma op Debug te assembleren, wordt de opdracht "a" (assemble) gebruikt. Wanneer deze opdracht wordt gebruikt, kan het adres waar u wilt dat de assemblage begint, worden opgegeven als een parameter. Als de parameter wordt weggelaten, wordt de assemblage gestart op de locatie die is opgegeven door CS:IP, meestal 0100h, wat de locatie is waar programma's met de extensie .COM moeten worden gestart. En dit is de plaats die we zullen gebruiken, aangezien alleen Debug dit specifieke type programma's kan maken.
Ook al is het op dit moment nog niet nodig om de "a"-opdracht een parameter te geven, het is wel aan te raden dit te doen om problemen te voorkomen zodra de CS:IP-registers worden gebruikt. Daarom typen we:
-a0100 <Enter>
Wanneer dit is gedaan, verschijnt er zoiets op het scherm: 0C1B:0100 en de cursor staat rechts van deze getallen, let op dat de eerste vier cijfers, in het hexadecimale systeem, verschillend kunnen zijn, maar de laatste vier moeten 0100 zijn, omdat dit het adres is dat we als begin hebben aangegeven. Nu kunnen we de instructies introduceren:
0C1B:0100 mov ax,0002; plaatst de waarde 0002 in het ax-register
0C1B:0103 mov bx,0004; zet de 0004 waarde op het bx register
0C1B:0106 voeg ax,bx toe; de inhoud van bx wordt toegevoegd aan de inhoud van ax
0C1B:0108 int 20; veroorzaakt de beëindiging van het programma.
0C1B:010A
Het is niet nodig om de opmerkingen te schrijven die na de ";" komen. Nadat de laatste opdracht is getypt, int 20, wordt <Enter> ingedrukt zonder dat er nog iets wordt geschreven, om de Debugger-prompt opnieuw te zien.
De laatste geschreven regel is eigenlijk geen assembler-instructie, maar een oproep voor een onderbreking van het besturingssysteem. Deze onderbrekingen besparen ons een hoop regels en zijn erg handig om toegang te krijgen tot de functies van het besturingssysteem.
Om het programma uit te voeren dat we schreven, gebruiken we de opdracht "g". Wanneer we deze gebruiken, zien we het volgende bericht:
"Programma normaal beëindigd". Met een bericht als dit kunnen we natuurlijk niet zeker weten of het programma de toevoeging heeft gedaan, maar er is een eenvoudige manier om dit te verifiëren. Door de opdracht "r" van Debug te gebruiken, kunnen we de inhoud van alle registers van de processor zien. Typ gewoon:
-r <Enter>
Elk register met de bijbehorende actuele waarde verschijnt op het scherm zoals hieronder:
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 OMHOOG EI PL NZ NA PO NC
0C1B:010A VAN DB
Het is mogelijk dat de registers verschillende waarden bevatten, maar AX en BX moeten hetzelfde zijn, aangezien we deze waarden zojuist hebben aangepast.
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 weer te geven als parameter voor "g". In dit geval zou dat zijn: g108. Deze instructie voert het programma uit, stopt op adres 108 en geeft de inhoud van de registers weer.
Met behulp van de opdracht "t" (trace) kunt u nagaan wat er in de registers gebeurt. Deze opdracht voert regel voor regel uit wat er is samengesteld en toont telkens de inhoud van de registers.
Om Debug te verlaten, gebruikt u de opdracht "q" (quit).
Voordelen van de Assembler
De eerste reden om met Assembler te werken is dat het u de mogelijkheid biedt om meer inzicht te krijgen in de werking van uw PC, waardoor u op een consistentere manier software kunt ontwikkelen.
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 assembly gebaseerde programma's sneller zijn en in sommige gevallen kleiner zijn, en een grotere capaciteit hebben dan programma's die met andere talen zijn gemaakt.
Laat mij mijn belofte nakomen!!
In het eerdere deel van dit hoofdstuk gebruikten we enkele instructies als voorbeeld, om de back-up van DBR te maken en de back-up van DBR te laden naar de oorspronkelijke locatie wanneer dat nodig is. Eerst bekijken we de instructie om de back-up te maken.
C:\>DEBUG A:\BKDBR.BIN <Enter>
Bestand niet gevonden
- L 100 2 0 1 < Invoeren>
- R CX < Invoeren >
CX 0000
: 200 < Invoeren>
- W <Enter>
Schrijven van 00200 bytes
- V < Enter>
Laten we in dit voorbeeld beginnen met studeren vanaf de eerste regel. De opdracht DEBUG A:\BKDBR.BIN Initialiseert de debugopdracht door een bestand te maken in A: floppy drive met de naam BKDBR.BIN als het daar nog niet aanwezig is. Daarom kregen we de melding "Bestand niet gevonden" bij het starten.
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 nummer 100 het adres van de buffer, waar de DBR zal worden opgeslagen, het volgende nummer 2 wordt gebruikt voor de drive C(C :). De drive nummers worden als volgt gegeven:
Schijfletter |
Aantal gebruikt |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
en zo verder |
. |
Het volgende nummer 0 is het beginsectornummer van het aantal te lezen sectoren. Hier gebruiken we 0 om de 1e sector te lezen, d.w.z. DBR-sector. Het volgende nummer, 1, wordt gebruikt om het aantal te lezen sectoren te informeren.
Hier hebben we 1 gegeven omdat we maar één sector willen lezen. We kunnen echter de nummers en locaties van de begin- en eindsectoren gebruiken volgens onze behoeften in verschillende soorten andere bewerkingen. Daarom zal het één sector laden, beginnend bij de 1e sector van de schijf C: naar de geheugenlocatie 100.
En R CX Instructie wordt gebruikt om de lengte van de data die we willen schrijven in het BKDBR.BIN bestand te wijzigen of te definiëren. Deze Instructie zal de huidige waarde van het CX register tonen en u toestaan om elke verandering te maken. We hebben hier 200 getypt omdat de DEBUG opdracht het hexadecimale systeem gebruikt en de grootte van DBR in hexadecimaal is 200(h) bytes, dat is 512 bytes in het Decimale systeem.
De W-opdracht 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 te verlaten en terug te gaan naar de DOS-prompt.
Waarschuwing!!! Waarschuwing!!! Waarschuwing!!!
Het wordt ten zeerste 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, namelijk:
DEBUG A:\BKDBR.BIN <Enter>
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 de opdracht Q (quit). Omdat dit betekent dat het bestand BKDBR.BIN niet kon worden gevonden of geopend door het DEBUG-programma en als u dit proces voortzet, wordt er wat ongewenste informatie op DBR geschreven en wordt de volledige partitie ontoegankelijk. |
Laten we nu eens kijken wat we hebben gedaan in de codering van de instructies voor het herstellen van de DBR van 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>
- V < Enter >
|
Met deze instructie wordt 1 sector met informatie uit het bestand BKDBR.BIN in floppy drive (a:) op geheugenlocatie 100 geschreven naar de eerste sector, sector 0, van de 2e drive, namelijk drive (C:).
Opslaan en laden van de programma's
Het lijkt niet praktisch om elke keer dat u een heel programma nodig hebt, een heel programma te typen. Om dit te voorkomen, kunt u een programma op schijf opslaan. Het grote voordeel hiervan is dat u het programma, omdat het al is samengesteld, niet opnieuw met Debug hoeft uit te voeren.
De stappen om een programma op te slaan dat al in het geheugen is opgeslagen, zijn:
- Bepaal de lengte van het programma door het eindadres af te trekken van het beginadres, uiteraard in het hexadecimale stelsel.
- Geef het programma een naam en extensie.
- Zet de lengte van het programma in het CX-register.
- Geef Debug de opdracht om het programma naar de schijf te schrijven.
Met het volgende programma als voorbeeld, krijgen we een duidelijker idee van hoe we deze stappen moeten nemen. Wanneer het programma uiteindelijk is samengesteld, ziet het er zo uit:
0C1B:0100 beweeg as,0002
0C1B:0103 beweging bx,0004
0C1B:0106 voeg ax,bx toe
0C1B:0108 je bent 20
0C1B:010A
-u 10a 100
020a 000a
-n test.com
-rcx
CX-0000
:000 uur
-In
Schrijven van 000A bytes
Om de lengte van een programma te verkrijgen, wordt de opdracht "h" gebruikt, omdat deze ons de optelling en aftrekking van twee getallen in hexadecimaal laat zien. Om de lengte van de onze te verkrijgen, geven we 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 de optelling van de parameters en het tweede is de aftrekking.
Met de opdracht "n" kunnen we het programma een naam geven. Met de opdracht "rcx" kunnen we de inhoud van het CX-register wijzigen naar de waarde die we hebben verkregen uit de bestandsgrootte met "h", in dit geval 000a, aangezien het resultaat is van de aftrekking van het eindadres van het beginadres.
Ten slotte schrijft de "w"-opdracht ons programma op de schijf, waarbij wordt aangegeven hoeveel bytes het heeft geschreven. Om een reeds geladen bestand op te slaan, zijn er twee stappen nodig:
- Geef de naam op van het bestand dat geladen moet worden.
- Laad het met de opdracht "l" (load).
Om het juiste resultaat van de volgende stappen te verkrijgen, is het noodzakelijk dat het bovenstaande programma al is aangemaakt.
In Debug schrijven we het volgende:
-n test.com
-l
-in 100 109
0C3D:0100 B80200 MOV-AX,0002
0C3D:0103 BB0400 MOV-BX,0004
0C3D:0106 01D8 AX,BX TOEVOEGEN
0C3D:0108 CD20 INT 20
De laatste "u"-opdracht wordt gebruikt om te verifiëren dat het programma in het geheugen is geladen. Wat het doet, is dat het de code demonteert en deze demonteert. De parameters geven aan waar en waarheen DEBUG moet worden gedemonteerd. DEBUG laadt de programma's altijd in het geheugen op 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 bedraagt 64 kB.
De reden voor het bestaan van deze segmenten is dat, aangezien de maximale grootte van een getal dat de processor kan verwerken, wordt gegeven door een woord van 16 bits of register, het niet mogelijk zou zijn om meer dan 65536 geheugenlocaties te benaderen met slechts één van deze registers. Maar nu, als het geheugen wordt verdeeld in groepen of segmenten, elk van 65536 locaties, en we gebruiken een adres op een exclusief register om elk segment te vinden, en vervolgens maken we elk adres van een specifieke sleuf met twee registers, dan is het voor ons mogelijk om toegang te krijgen tot een hoeveelheid van 4294967296 bytes geheugen.
Om de assembler in staat te stellen de data te beheren, is het noodzakelijk dat elk stukje informatie of instructie wordt gevonden in het gebied dat overeenkomt met de respectieve segmenten. De assembler benadert deze informatie door rekening te houden met de lokalisatie van het segment, gegeven door de DS-, ES-, SS- en CS-registers en binnen het register het adres van het opgegeven stukje informatie. Het is om deze reden dat wanneer we een programma maken met behulp van Debug op elke regel die we assembleren, er zoiets als dit verschijnt:
1CB0:0102 MOV-AX,BX
Het eerste nummer, 1CB0, komt overeen met het geheugensegment dat wordt gebruikt, het tweede nummer verwijst naar het adres binnen dit segment. Hierna volgen de instructies die vanaf dat adres worden opgeslagen.
De assembler past de grootte van de segmenten aan door als basis het aantal bytes te nemen dat elke geassembleerde instructie nodig heeft, aangezien het een verspilling van geheugen zou zijn om de hele segmenten te gebruiken. Bijvoorbeeld, als een programma slechts 10 kb nodig heeft om data op te slaan, zal het datasegment slechts 10 kb zijn en niet de 64 kb die het aankan.
Gegevensverplaatsing
Ik geef hier een aantal instructies voor gegevensbewerkingen in assemblertaal, zodat u ze beter kunt begrijpen en begrijpen. Wanneer we programmeren met behulp van interrupts en andere BIOS-bewerkingen, hebben we de basisbeginselen nodig.
Gedetailleerde introductie en grondige studie van assemblertaal gaat de limiet van dit boek te boven. Hoewel de basiskennis van assembler noodzakelijk is om verder te gaan met de verdere belangrijke programmeerhoofdstukken, hoeft u zich geen zorgen te maken als u het moeilijk vindt om alle instructies te begrijpen, maar het is aan te raden dat u het basisidee van instructies leert.
In elk programma is het nodig om gegevens in het geheugen en in de CPU-registers te verplaatsen. Er zijn verschillende manieren om dit te doen. Het kan gegevens in het geheugen kopiëren naar een register, van register naar register, van een register naar een stack, van een stack naar een register, om gegevens naar externe apparaten te verzenden en vice versa.
Deze verplaatsing van gegevens is onderhevig aan regels en beperkingen. Hieronder volgen er enkele:
- Het is niet mogelijk om data rechtstreeks van de ene geheugenlocatie naar de andere te verplaatsen. Het is noodzakelijk om eerst de data 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. De constante moet eerst naar een register in de CPU worden verplaatst.
- Het is mogelijk om datablokken te verplaatsen met behulp van de MOVS-instructies, die een keten van bytes of woorden kopiëren. MOCSB kopieert n bytes van de ene locatie naar de andere 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 te verplaatsen data en ES:DI als de nieuwe lokalisatie van de data.
Om data te verplaatsen zijn er ook structuren genaamd batterijen, waar de data wordt geïntroduceerd met de push-instructie en wordt geëxtraheerd met de pop-instructie. In een stapel is de eerste data die wordt geïntroduceerd de laatste die we kunnen nemen, dit is, als we in ons programma deze instructies gebruiken:
DUW BIJL
DUW BX
DUW CX
Om de juiste waarden aan elk register terug te geven op het moment dat u ze uit de stapel haalt, moet u dit in de volgende volgorde doen:
POP-CX
POP-BX
POP-BIJL
Voor de communicatie met externe apparaten wordt de opdracht out gebruikt om informatie naar een poort te sturen en de opdracht in om de informatie die van een poort is ontvangen te lezen.
De syntaxis van de OUT-opdracht is:
UIT DX,AX
Waarbij DX de waarde bevat van de poort die voor de communicatie wordt gebruikt en AX de informatie bevat die wordt verzonden.
De syntaxis van de IN-opdracht is:
IN AX,DX
Hierbij is AX het register waar de binnenkomende informatie wordt bewaard en DX bevat het adres van de poort waarlangs de informatie aankomt.
MOV-instructie
Wordt gebruikt voor gegevensoverdracht tussen geheugencellen, registers en de accumulator. De syntaxis is als volgt:
MOV Bestemming, Bron
De verschillende gegevensbewegingen die voor deze instructie zijn toegestaan, worden in de onderstaande tabel weergegeven:
S. Nee. |
Bestemming |
Bron |
1. |
geheugen |
accumulator |
2. |
accumulator |
geheugen |
3. |
segmentregister |
geheugen/register |
4 |
geheugen/register |
segmentregister |
5. |
Register |
register |
6. |
Register |
geheugen |
7. |
geheugen |
register |
8. |
Register |
onmiddellijke gegevens |
9. |
geheugen |
onmiddellijke gegevens |
Laten we eens een voorbeeld bekijken:
MOV-AX,0006
MOV BX,AX
MOV-AX,4C00
INHOUD 21
Dit programma verplaatst de waarde van 0006H naar het AX-register, verplaatst vervolgens de inhoud van AX (0006h) naar het BX-register en verplaatst ten slotte de waarde 4C00h naar het AX-register om de uitvoering te beëindigen met de 4C-optie van de 21h-onderbreking. We zullen later een korte introductie geven van interrupt 13H en interrupt 21H.
Onderbrekingen
Een interrupt is een hardwarefaciliteit die ervoor zorgt dat de CPU de uitvoering opschort, de status opslaat en overdraagt naar een specifieke locatie. De overdrachtslocatie specificeert het adres van een programma dat actie moet ondernemen als reactie op de interrupt. Het programma dat wordt uitgevoerd als gevolg van de interrupt wordt een interrupt-handling-programma 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. Wanneer een interrupt wordt gegenereerd, onderbreekt de computer alles wat hij aan het doen is en handelt eerst de bewerking af die de interrupt heeft gegenereerd.
Elk apparaat dat interrupts kan genereren, krijgt een uniek interruptnummer om te identificeren welk apparaat deze interrupts genereert. We zullen alle functies en subfuncties van interrupt 13H, Extensions van interrupt 13H en interrupt 21H in dit boek bespreken.
In principe kunnen er drie soorten onderbrekingen zijn:
- Interne hardwareonderbrekingen
- Externe hardwareonderbrekingen
- Software-onderbrekingen
Interne hardwareonderbrekingen
Interne onderbrekingen worden gegenereerd door bepaalde gebeurtenissen die optreden tijdens de uitvoering van een programma. Dit type onderbrekingen wordt in zijn totaliteit beheerd door de hardware en het is niet mogelijk om ze te wijzigen.
Een duidelijk voorbeeld van dit type onderbreking is de onderbreking waarbij de teller van de interne klok van de computer wordt geactualiseerd. De hardware doet binnen een seconde meerdere malen een beroep op deze onderbreking om de tijd actueel te houden.
Hoewel we deze onderbreking niet rechtstreeks kunnen beheren, omdat we de tijdsupdate niet softwarematig kunnen regelen, kunnen we de effecten ervan op de computer wel in ons voordeel gebruiken.
Bijvoorbeeld: om een virtuele klok te creëren die continu wordt bijgewerkt, hoeven we alleen maar een programma te schrijven dat de actuele waarde van de teller uitleest en deze vertaalt naar een voor de gebruiker begrijpelijk formaat.
Externe hardwareonderbrekingen
Externe onderbrekingen worden gegenereerd door randapparatuur, zoals toetsenborden, printers, communicatiekaarten, etc. 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 naar een geïntegreerd circuit dat uitsluitend dit soort onderbrekingen moet verwerken.
Software-onderbrekingen
Softwareonderbrekingen kunnen rechtstreeks door de assembler worden geactiveerd door het nummer van de gewenste onderbreking aan 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 hebben meestal een betere prestatie, vooral 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, omdat deze onderbrekingen gebruik maken van het BIOS om hun doel te bereiken. Aan de andere kant zijn de BIOS-onderbrekingen veel sneller, maar ze hebben het nadeel dat ze deel uitmaken van de hardware, zeer specifiek zijn en kunnen variëren, zelfs afhankelijk van het merk van de fabrikant van het circuit.
De keuze van het type onderbreking hangt uitsluitend af van de kenmerken die u aan uw programma wilt meegeven.
Omdat we interrupts zullen gebruiken voor data recovery programmering met behulp van C taal via Interrupt handling met C, zullen we alleen Interrupt 13H, Interrupt 13H Extensions en Interrupt 21H routines bespreken. Het is niet zo belangrijk om alle andere interrupts en hun functies te bespreken omdat in C taal, makkelijkere functies beschikbaar zijn om de meeste van die taken uit te voeren. Echter, de kennis van Interrupt 13H en zijn Extensions is een must, voor data recovery programmering. |
Laten we een korte introductie van Interrupt 20H en Interrupt 21H nemen. De waarde geschreven tussen haakjes (zoals 0x20) geeft aan hoe je Interrupt 20H moet gebruiken.
INT 20H ( 0x20) --> Proces beëindigen
Bellen met: CS = segmentadres van programma-segmentprefix
Retourneren: Niets
Reacties:
Het beëindigt het huidige proces. Dit is een van de verschillende 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 definitieve exit uit te voeren, waarbij functies 31H en 4CH van INT 21H over het algemeen de voorkeur hebben, omdat ze toestaan dat een retourcode wordt doorgegeven aan het bovenliggende proces.
Als u File Control Blocks (FCB's) hebt gebruikt om een bestand te schrijven, raden wij u aan om het bestand eerst te sluiten. Anders loopt u het risico dat de gegevens verloren gaan. Bij het definitief afsluiten wordt namelijk al het geheugen dat door het proces in beslag werd genomen, vrijgegeven. Bestandsbuffers worden gewist en alle open handles voor bestanden of apparaten die eigendom zijn van het proces, worden gesloten.
Als u dus open bestandsingangen hebt, bestaat de kans dat u gegevens verliest.
INT 21U (0x21)
Functie 00H (0x00) --> Proces beëindigen
Bellen met: AH = 00H
CS = segmentadres van programma-segmentprefix
Retourneren: Niets
Reacties:
Deze interrupt beëindigt het huidige proces. Dit is een van de verschillende methoden die een programma kan gebruiken om een definitieve exit uit te voeren. Zie INT 20H voor meer informatie.
INT 21U (0x21)
Functie 01H (0x01) --> Karakterinvoer met echo
Bellen met: AH = 01H
Retourneert: AL = 8-bits invoergegevens
Reacties:
Deze interrupt leest een teken van het standaard invoerapparaat zoals toetsenbord en echoot het naar het standaard uitvoerapparaat. Als er geen teken klaar is, wacht het tot er een beschikbaar is.
INT 21U (0x21)
Functie 02H (0x02) --> Karakteruitvoer
Bellen met: AH = 02H
DL = 8-bits gegevens voor uitvoer
Retourneren: Niets
Reacties:
Het stuurt een teken naar het standaard uitvoerapparaat. Uitvoer kan worden omgeleid. Als uitvoer wordt omgeleid, is er geen manier om een volle schijf te detecteren.
Strings kunnen ook naar het display worden verzonden door een schrijfbewerking uit te voeren (INT 21H, Functie 40H) met behulp van de vooraf gedefinieerde handle voor de standaarduitvoer (0001H), als de uitvoer niet is omgeleid of als een handle is verkregen van het logische apparaat CON.
INT 21U (0x21)
Functie 03H (0x03) --> Hulpingang
Bellen met: AH = 03H
Retourneert: AL = 8-bits invoergegevens
Reacties:
Het leest een teken van het standaard hulpapparaat. De standaard is de eerste seriële poort (COM1).
Als het hulpapparaat gegevens sneller verstuurt dan uw programma deze kan verwerken, kunnen er tekens verloren gaan. Er is geen manier voor een gebruikersprogramma om de status van het hulpapparaat te lezen of I/O-fouten zoals verloren tekens te detecteren via deze functieaanroep.
INT 21U (0x21)
Functie 04H (0x04) --> Hulpuitgang
Bellen met: AH = 04H
DL = 8-bits gegevens voor uitvoer
Retourneren: Niets
Reacties:
Deze functie van INT 21H stuurt een teken naar het standaard hulpapparaat. De standaard is de eerste seriële poort (COM1). Strings kunnen ook naar het hulpapparaat worden verzonden door een schrijfbewerking uit te voeren (INT 21H Functie 40H) met behulp van de vooraf gedefinieerde handle voor het standaard hulpapparaat (00034) of met behulp van een handle die is verkregen door het openen van het logische apparaat AUX.
INT 21U (0x21)
Functie 05H (0x05) --> Printeruitvoer
Bellen met: AH = 05H
DL = 8-bits gegevens voor uitvoer
Retourneren: Niets
Reacties:
Deze functie stuurt een teken naar het standaardlijstapparaat. 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 handle voor het standaardprinterapparaat (0004H) of met behulp van een handle die is verkregen door het openen van het logische apparaat PRN of LPT1.
INT 21U (0x21)
Functie 06H (0x06) --> Directe console I/O
Bellen met: AH = 06H
DL = gevraagde functie zodat,
Als uitvoerverzoek, 00H-FEH
Als invoerverzoek, 0FFH
Retourneert: Niets, indien aangeroepen met DL = 00H-0FEH
Als aangeroepen met DL = FFH en een karakter is klaar
Nul vlag = vrij
AL = 8-bits invoergegevens
Als aangeroepen met DL = FFH en er is geen enkel teken gereed
Nul vlag = ingesteld
Reacties:
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 tekens en besturingscodes moeten lezen en schrijven zonder enige interferentie van het besturingssysteem.
INT 21U (0x21)
Functie 07H (0x07) --> Ongefilterde tekeninvoer zonder echo
Bellen met: AH = 07H
Retourneert: AL = 8-bits invoergegevens
Reacties:
Met deze functie wordt een teken van het standaardinvoerapparaat gelezen zonder het naar het standaarduitvoerapparaat te echoën.
INT 21U (0x21)
Functie 08H (0x08) --> Karakterinvoer zonder echo
Bellen met: AH = 08H
Retourneert: AL = 8-bits invoergegevens
Reacties:
Met deze functie wordt een teken van het standaardinvoerapparaat gelezen zonder het naar het standaarduitvoerapparaat te echoën.
INT 21U (0x21)
Functie 09H (0x09) --> Tekenreeks weergeven
Bellen met: AH = 09H
DS:DX = segment: offset van string
Retourneren: Niets
Reacties:
Het stuurt een tekenreeks naar het standaarduitvoerapparaat. Uitvoer kan worden omgeleid. Als uitvoer is omgeleid, is er geen manier om te detecteren dat de schijf vol is. String kan ook naar het display worden gestuurd door een schrijfbewerking uit te voeren (INT 21H Functie 40H) met behulp van de vooraf gedefinieerde handle voor de standaarduitvoer (0001H), als deze niet is omgeleid, of een handle die is verkregen door het openen van het logische apparaat CON.
INT 21U (0x21)
Functie 0AH (0x0A of 10) --> Gebufferde toetsenbordinvoer
Bellen met: AH = 0AH
DS:DX = segment: offset van buffer
Retourneert: Gegevens in buffer geplaatst, retourneert niets
Reacties:
Het leest een reeks bytes van het standaard invoerapparaat, tot en met een ASCII carriage return (0DH), en plaatst ze in een door de gebruiker aangewezen buffer. De tekens worden naar het standaard uitvoerapparaat ge-echod. De buffer die door de functie wordt gebruikt, heeft de volgende indeling:
Byte |
Inhoud |
0 |
Maximaal aantal te lezen tekens, ingesteld door programma |
1 |
Aantal daadwerkelijk gelezen tekens (exclusief wagenretour), ingesteld door MS-DOS |
2+ |
String gelezen van toetsenbord of standaardinvoer, beëindigd door een carriage return (0DH) |
INT 21U (0x21)
Functie 0BH (0x0B of 11) --> Controleer invoerstatus
Aanroepen met: AH = 0BH
Retourneert: AL = 00H (als er geen teken beschikbaar is)
FFH (als er minstens één personage beschikbaar is)
Reacties:
Controleert of een teken beschikbaar is vanaf het standaard invoerapparaat zoals toetsenbord. Deze functie is equivalent aan IOCTL INT 21H Functie 44H Subfunctie 06H.
INT 21U (0x21)
Functie 0CH (0x0C of 12) --> Spoel invoerbuffer en vervolgens invoer
Bellen met: AH = 0CH
AL = aantal ingangen dat moet worden aangeroepen na het resetten
buffer (moet 01H, 06H, 07H, 08H of 0AH zijn)
Als AL = 0AH
DS: DX = segment: offset van invoerbuffer
Retourneert: Als aangeroepen met AL = 01H, 06H, 07H of 08H,
AL = 8-bits invoergegevens
Indien aangeroepen met AL= 0AH,
Niets (gegevens in buffer geplaatst)
Reacties:
Wist de standaard invoerbuffer en roept vervolgens een van de tekeninvoerfuncties aan. 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 aanroepende programma.
INT 21U (0x21)
Functie 0DH (0x0D of 13) -> Schijf resetten
Aanroepen met: AH = 0DH
Retourneren:Niets
Reacties:
Deze functie flusht alle bestandsbuffers. De functie werkt de schijfdirectory niet bij voor bestanden die nog open zijn.
INT 21U (0x21)
Functie 0EH (0x0E of 14) -> Selecteer schijf
Bellen met: AH = 0EH
DL = schijfcode (0 = A, 1 = B, enz.)
Retourneert: AL = aantal logische schijven in het systeem
Reacties:
Selecteert het opgegeven station als huidig of standaard schijfstation en retourneert het totale aantal logische stations in het systeem.
De toepassingen moeten zich beperken tot de stationsletters AZ (0 = A, 1 = B, enz.). Logische stations betekent het totale aantal blokapparaten zoals floppydisk- en harde-schijfstations enz. Over het algemeen wordt één fysieke harde schijf gepartitioneerd in twee of meer logische stations.
INT 21U (0x21)
Functie 0FH (0x0F of 15) -> Open bestand
Aanroepen met: AH = 0FH
S: DX = segment: offset van bestandsbesturingsblok
Retourneert: Als de functie succesvol is en het bestand is gevonden
AL = 00H
En FCB ingevuld door MS-DOS ziet er als volgt uit:
Aandrijfveld (offset 00H) = 1 voor aandrijving A, 2 voor aandrijving B, enz. Huidig blokveld (offset 0CH) = 00H
Recordgrootteveld (offset 0EH) = 0080H
Grootteveld (offset 10H) = bestandsgrootte van map
Gegevensveld (offset 14H) = datumstempel uit directory
Tijdveld (offset 16H) = tijdstempel van directory
Als de functie niet succesvol is en het bestand niet gevonden is
AL = 0FFH
Reacties:
Opent een bestand en maakt het beschikbaar voor een volgende lees-/schrijfbewerking. Als het programma een andere recordgrootte dan 128 bytes gaat gebruiken, moet het het recordgrootteveld op FCB-offset 0EH instellen nadat het bestand succesvol is geopend en vóór elke andere schijfbewerking.
INT 21U (0x21)
Functie 10H (0x10 of 16) -> Bestand sluiten
Bellen met: AH = 10H
DS: DX = segment: offset van bestandsbesturingsblok
Retourneert: Als de functie succesvol is (directory-update succesvol)
AL = 00H
Als de functie niet succesvol is (bestand niet gevonden in de map)
AL = FFH
Reacties:
Het wordt gebruikt om een bestand te sluiten. Het sluit een bestand, spoelt alle MS-DOS interne diskbuffers die aan het bestand zijn gekoppeld naar disk en werkt de diskdirectory bij als het bestand is gewijzigd of uitgebreid.
INT 21U (0x21)
Functie 11H (0x11 of 17) -> Zoek eerste bestand
Bellen met: AH = 11H
DS: DX = segment: offset van bestandsbesturingsblok
Retourneert: Als de functie succesvol is en het overeenkomende bestand is gevonden
AL = 00H
En de buffer op het huidige schijfoverdrachtsadres (DTA) wordt ingevuld als een ongeopende normale FCB of uitgebreide FCB, afhankelijk van welk type FCB werd ingevoerd om te functioneren.
Als de functie niet succesvol is (geen overeenkomende bestandsnaam gevonden)
AL = FFH
Reacties:
Het doorzoekt de huidige directory op de aangewezen schijf naar een overeenkomende bestandsnaam. U kunt jokers (? en *) gebruiken. Deze functie retourneert de eerste overeenkomende bestandsnaam.
INT 21U (0x21)
Functie 12H (0x12 of 18) -> Zoek volgend bestand
Bellen met: AH = 12H
DS: DX = segment: offset van bestandsbesturingsblok
Retourneert: Als de functie succesvol is en de overeenkomende bestandsnaam is gevonden
AL = 00H
En buffer op het huidige disk transfer area (DTA) adres ingesteld als een ongeopende normale FCB of uitgebreide FCB, afhankelijk van welk type FCB oorspronkelijk werd ingevoerd in de INT21H functie 11H
Als de functie niet succesvol is en er geen overeenkomende bestandsnamen gevonden zijn
AL = FFH
Reacties:
Dit is de metgezel van de vorige functie. Als INT 21H Functie 11H succesvol is geweest, retourneert het de volgende overeenkomende bestandsnaam, indien aanwezig. Deze functie gaat ervan uit dat de FCB die als invoer is gebruikt, correct is geïnitialiseerd door een eerdere aanroep van INT 21H Functie 11H en mogelijke daaropvolgende aanroepen van INT 21H Functie 12H en dat de bestandsnaam of extensie waarnaar wordt gezocht ten minste één jokerteken bevatte.
INT 21U (0x21)
Functie 13H (0x13 of 19) -> Bestand verwijderen
Bellen met: AH = 13H
DS: DX = segment: offset van bestandsbesturingsblok
Retourneert: Als de functie succesvol is en het bestand of de bestanden zijn verwijderd
AL = 00H
Als de functie niet succesvol is en er geen overeenkomende bestanden zijn gevonden of als ten minste één overeenkomend bestand alleen-lezen is,
AL = FFH
Reacties:
Het verwijdert alle overeenkomende bestanden uit de huidige directory op de standaard of opgegeven schijf. U kunt ook jokers (? en *) gebruiken.
INT 21U (0x21)
Functie 14H (0x14 of 20) -> Sequentieel lezen
Bellen met: AH = 14H
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL = 00H als het lezen succesvol is
01H als einde van bestand
02H als segment wrap
03H als gedeeltelijk record aan het einde is gelezen
bestand
Reacties:
Deze functie leest het volgende sequentiële blok met gegevens uit een bestand en verhoogt vervolgens de bestandspointer op de juiste manier. Het aantal bytes aan gegevens dat moet worden gelezen, wordt gespecificeerd door het record-size-veld (offset 0EH) van het bestandsbesturingsblok (FCB).
Het record wordt in het geheugen gelezen op het huidige disk transfer area (DTA)-adres, opgegeven 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 wraparound zou optreden, mislukt de functie met een retourcode van 02H.
INT 21U (0x21)
Functie 15H (0x15 of 21) --> Sequentieel schrijven
Bellen met: AH = 15H
DS: DX = segment: offset van eerder geopend bestandsbesturingsblok
Retourneert: AL = 00H, indien schrijven succesvol
01H, als schijf een bestand is
02H, indien segment wrap
Reacties:
Deze functie schrijft het volgende sequentiële blok met gegevens naar een bestand en verhoogt vervolgens de bestandspointer op de juiste manier. Het aantal bytes met gegevens dat moet worden geschreven, wordt gespecificeerd door het recordgrootteveld (offset 0EH) van het bestandsbesturingsblok (FCB).
INT 21U (0x21)
Functie 16H (0x16 of 22) --> Bestand maken
Bellen met: AH = 16H
DS: DX = segment: offset van ongeopend bestandsbesturingsblok
Retourneert: Als de functie succesvol is en het bestand is gemaakt of afgekapt
AL = 00H
En FCB wordt door MS-DOS als volgt ingevuld:
Aandrijfveld (offset 00H) = 1 voor aandrijving A, 2 voor aandrijving B, enz.
Huidig blokveld (offset0CH) = 00H
Recordgrootteveld (offset 0EH) = 0080H
Grootteveld (offset 10H) = bestandsgrootte van map
Datumveld (offset 14H) = datumstempel uit de directory
Tijdveld (offset 16H = tijdstempel van directory
Als de functie niet succesvol is (directory vol)
AL = FFH
Reacties:
Deze functie maakt een nieuwe directory-invoer in de huidige directory of kort elk bestaand bestand met dezelfde naam af tot een lengte van nul. Opent het bestand ook voor volgende lees-/schrijfbewerkingen. Deze functie moet met 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 21U (0x21)
Functie 17H (0x17 of 23) --> Bestand hernoemen
Bellen met: AH = 17H
DS: DX = segment: offset van speciaal bestandsbesturingsblok
Retourneert: Als de functie succesvol is en een of meer bestanden zijn hernoemd
AL = 00H
Als de functie niet succesvol is en er geen overeenkomende bestanden zijn, of als de nieuwe bestandsnaam overeenkomt met een bestaand bestand
AL = FFH
Reacties:
Met deze functie wijzigt u de naam van alle overeenkomende bestanden in de huidige map op de schijf in het opgegeven station.
U kunt hier ook jokers mee gebruiken. Het speciale bestandscontroleblok heeft een drivecode, 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 21U
Functie 18H (0x18 of 24) --> Gereserveerd
INT 21U (0x21)
Functie 19H (0x19 of 25) --> Huidige schijf ophalen
Bellen met: AH = 19H
Retourneert: AL = schijfcode (0 voor schijf A, 1 voor schijf B enz.)
Reacties:
Deze functie retourneert de schijfcode van het huidige of standaard schijfstation.
INT 21U (0x21)
Functie 1AH (0x1A of 26) --> DTA-adres instellen
Bellen met: AH = 1AH
DS: DX = segment: offset van het schijfoverdrachtsgebied.
Retourneren: Niets
Reacties:
Met deze functie wordt het adres van het schijfoverdrachtsgebied (DTA) opgegeven dat moet worden gebruikt voor daaropvolgende FCB-gerelateerde functieaanroepen.
INT 21U (0x21)
Functie 1BH (0x1B of 27) --> Standaard schijfgegevens ophalen
Bellen met: AH = 1BH
Retourneert: Als de functie succesvol is
AL = sectoren per cluster
DS: DX = segmentoffset van media-ID-byte
CX = grootte van fysieke sector in bytes
DX = aantal clusters voor standaardschijf
Als de functie niet succesvol is (ongeldige schijf of kritieke fout)
AL = FFH
Reacties:
Met deze functie worden geselecteerde gegevens over het standaardschijfstation en een verwijzing naar de media-identificatiebyte uit de bestandstoewijzingstabel opgehaald.
De media-ID-byte heeft de volgende betekenissen:
Media-descriptor-ID |
Medium |
0F0H |
3,5-inch floppydisk, dubbelzijdig, 18 sectoren (of anders) |
0F8H |
vaste schijf |
0F9H |
5,25-inch floppydisk, dubbelzijdig, 15 sectoren |
0F9H |
3,5-inch floppydisk, dubbelzijdig, 9 sectoren |
0FCH |
5,25-inch floppydisk, enkelzijdig, 9 sectoren |
0FDH |
5,25-inch floppydisk, dubbelzijdig, 9 sectoren |
0FDH |
8-inch floppy disk, enkelzijdig, enkele dichtheid |
0FEH |
5,25-inch floppydisk, enkelzijdig, 8 sectoren |
0FEH |
8-inch floppy disk, enkelzijdig, enkele dichtheid |
0FEH |
8-inch floppy disk, dubbelzijdig, dubbele dichtheid |
0FFH |
5,25-inch floppydisk, dubbelzijdig, 8 sectoren |
INT 21U (0x21)
Functie 1CH (0x1C of 28) --> Haal schijfgegevens op
Bellen met: AH = 1CH
DL = Rijcode
Retourneert: Als de functie succesvol is
AL = sectoren per cluster
DS: BX = segment: offset van media-ID-byte
CX = grootte van fysieke sector in bytes
DX = aantal clusters voor standaard- of opgegeven schijf
Als de functie niet succesvol is en er sprake is van een ongeldige schijf of een kritieke fout
AL = FFH
Reacties:
Deze functie verkrijgt toewijzingsinformatie over de opgegeven schijfeenheid en een pointer naar de media-identificatiebyte uit de bestandstoewijzingstabel. Raadpleeg de media-descriptor-ID-bytetabel, gegeven in INT 21H, Functie 1BH, voor Media-ID-informatie.
INT 21U (0x21)
Functie 1DH (0x1D of 29) --> Gereserveerd
INT 21U (0x21)
Functie 1EH (0x1E of 30) --> Gereserveerd
INT 21U (0x21)
Functie 1FH (0x1F of 31) --> Gereserveerd
INT 21U (0x21)
Functie 20H (0x20 of 32) --> Gereserveerd
INT 21U (0x21)
Functie 21H (0x21 of 33) --> Willekeurig lezen
Bellen met: AH = 21H
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL = 00H als het lezen succesvol is
01H als einde van bestand
02H als segment wrap, lezen geannuleerd
03H als gedeeltelijk record aan het einde is gelezen
bestand
Reacties:
Deze functie leest een geselecteerde record uit een bestand in het geheugen. De record wordt in het geheugen gelezen op het huidige disk transfer area-adres, opgegeven door de meest recente aanroep van INT 21H Functie 1AH.
INT 21U (0x21)
Functie 22H (0x22 of 34) --> Willekeurig schrijven
Bellen met: AH = 22H
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL = 00H als het schrijven succesvol is
01H als schijf vol is
02H als segment wrap, schrijven geannuleerd
Reacties:
Deze functie schrijft de gegevens uit het geheugen naar een geselecteerde record in een bestand.
INT 21U (0x21)
Functie 23H (0x23 of 35) --> Bestandsgrootte ophalen
Bellen met: AH = 23H
DS: DX = segment: offset van ongeopend bestand
besturingsblok
Retourneert: Als de functie succesvol is en de overeenkomende bestandsnaam is gevonden
AL = 00H
En het FCB relatieve-recordveld (offset 21H) wordt ingesteld op het aantal records in het bestand, indien nodig afgerond naar het eerstvolgende volledige record
Als de functie niet succesvol is en er geen overeenkomend bestand is gevonden
AL = FFH
Reacties:
Deze functie zoekt naar een overeenkomend bestand in de huidige directory; als er een wordt gevonden, wordt de FCB bijgewerkt met de grootte van het bestand in termen van het aantal records. Er is geen standaard recordgrootte voor deze functie, daarom moet er een geschikte waarde worden geplaatst in het veld FCB recordgrootte (offset 0EH) voordat deze functie wordt aangeroepen.
INT 21U (0x21)
Functie 24H (0x24 of 36) --> Relatief recordnummer instellen
Bellen met: AH = 24H
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL is vernietigd (andere registers niet beïnvloed)
FCB relatief-recordveld (offset 21H) bijgewerkt
Reacties:
Met deze functie wordt het relatieve-recordnummerveld van een bestandsbesturingsblok (FCB) ingesteld op de huidige bestandspositie zoals vastgelegd in het geopende FCB.
INT 21U (0x21)
Functie 25H (0x25 of 37) --> Interruptvector instellen
Bellen met: AH = 25H
AL = onderbrekingsnummer
DS: DX = segment: offset van interrupt-afhandeling
routine
Retourneren: Niets
Reacties:
Deze functie Initialiseert een CPU-interruptvector om te verwijzen naar een interruptverwerkingsroutine. Deze functie zou bij voorkeur moeten worden gebruikt in plaats van directe bewerking van de interruptvectortabel door goed gedragende toepassingen.
INT 21U (0x21)
Functie 26H (0x26 of 38) --> Nieuw programma-segmentprefix (PSP) maken
Bellen met: AH = 26H
DX = segment: van nieuw programmasegment
voorvoegsel (PSP)
Retourneren: Niets
Reacties:
Met deze functie kopieert u het programmasegmentprefix (PSP) van het programma dat op dat moment wordt uitgevoerd naar een opgegeven segmentadres in het vrije geheugen. Vervolgens werkt u de nieuwe PSP bij, zodat deze door een ander programma kan worden gebruikt.
INT 21U (0x21)
Functie 27H (0x27 of 39) --> Willekeurig blok lezen
Bellen met: AH = 27H
CX = aantal records om te lezen
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL = 00H als alle gevraagde records zijn gelezen
01H als einde van bestand
02H als segment wrap
03H als gedeeltelijk record aan het einde is gelezen
bestand
CX = werkelijk aantal gelezen records
Reacties:
Deze functie leest een of meer opeenvolgende records uit een bestand in het geheugen, beginnend bij een aangewezen bestandslocatie. Als de grootte en locatie van de buffer zodanig zijn dat een segmentoverloop of wraparound 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 21U (0x21)
Functie 28H (0x28 of 40) --> Willekeurig blok schrijven
Bellen met: AH = 28H
CX = aantal records om te schrijven
DS: DX = segment: offset van eerder geopend
bestand controle blok
Retourneert: AL = 00H als alle gevraagde records zijn geschreven
01H als schijf vol is
02H als segment wrap
CX = werkelijk aantal geschreven records
Reacties:
Deze functie schrijft een of meer sequentiële records van het geheugen naar een bestand, beginnend bij een aangewezen bestandslocatie. Als de grootte en locatie van de buffer zodanig zijn dat een segmentoverloop of wraparound zou optreden, mislukt de functie met een retourcode 02H.
INT 21U (0x21)
Functie 29H (0x29 of 41) --> Bestandsnaam parseren
Bellen met: AH = 29H
AL = vlaggen om het parsen te regelen
Bit 0 = 1, als er voorloopscheidingstekens worden gebruikt
gescand (genegeerd).
= 0, als er geen voorloopscheidingstekens worden gebruikt
gescand
Bit 1 = 1, als de drive-ID-byte in FCB zal zijn
alleen gewijzigd als een schijf is
gespecificeerd in de tekenreeks die wordt geparseerd.
= 0, als de schijf-ID-byte in FCB zal zijn
gewijzigd ongeacht, als er geen schijf is
specificatie is aanwezig in de geparseerde string, FCB-drivecodeveld is ingesteld op 0 (standaard)
Bit 2 = 1, als het bestandsnaamveld in FCB wordt
alleen gewijzigd als een bestandsnaam is
gespecificeerd in de tekenreeks die wordt geparseerd.
= 0, als het bestandsnaamveld in FCB hoe dan ook wordt gewijzigd. Als er geen bestandsnaam is die de geparseerde tekenreeks bevat, wordt de FCB-bestandsnaam ingesteld op ASCIIZ-spaties.
Bit 3 = 1, als het extensieveld in FCB wordt
gewijzigd, alleen als er een extensie is
gespecificeerd in de tekenreeks die wordt geparseerd.
= 0, als het extensieveld in FCB zal zijn
ongeacht gewijzigd, indien geen extensie
is aanwezig in de geparseerde string, FCB
extensie is ingesteld op ASCIIZ-spaties
DS: SI = segment: offset van string
ES: DI = segment: offset van bestandsbesturingsblok
Retourneert: AL = 00H, indien geen jokertekens
01H aangetroffen, indien geparseerde string
bevatte jokertekens FFH,
als de schijfspecificatie ongeldig is
DS: SI = segment: offset van eerste teken
na het parseren van de bestandsnaam
ES: DI = segment: offset van geformatteerd
ongeopende bestandsbeheerblok
Reacties:
Deze functie parseert een tekstreeks in de verschillende velden van een bestandsbeheerblok (FCB).
Deze functie beschouwt de tekens (: . ; , = + tab spatie ) als scheidingstekens en beschouwt alle besturingstekens en tekens (: . ; , = + tab spatie < > | / “ [ ]) als afsluittekens.
INT 21U (0x21)
Functie 2AH (0x2A of 42) --> Dag en datum ophalen
Bellen met: AH = 2AH
Retourneert: CX = jaar (1980 tot en met 2099)
DH = maand (1 t/m 12)
DL = dag (1 t/m 31)
AL = dag van de week (0 = zondag,
1= maandag, enz.)
Reacties:
Met deze functie worden de systeemdag van de maand, dag van de week, maand en jaar opgehaald.
INT 21U (0x21)
Functie 2BH (0x2B of 43) --> Datum instellen
Bellen met: AH = 2BH
CX = jaar (1980 tot en met 2099)
DH = maand (1 t/m 12)
DL = dag (1 t/m 31)
Retourneert: AL = 00H als de datum succesvol is ingesteld
FFH als datum niet geldig is (genegeerd)
Reacties:
Met deze functie wordt de systeemklokdriver op een specifieke datum geïnitialiseerd, maar de systeemtijd blijft ongewijzigd.
INT 21U (0x21)
Functie 2CH (0x2C of 44) --> Tijd ophalen
Bellen met: AH = 2CH
Retourneert: CH = uren (0 tot en met 23)
CL = minuten (0 tot en met 59)
DH = seconden (0 tot en met 59)
DL = honderdsten van seconden (0 tot en met 99)
Reacties:
Hiermee wordt de tijd van de dag verkregen uit de realtimeklokdriver van het systeem, omgezet in uren, minuten, seconden en honderdsten van seconden.
INT 21U (0x21)
Functie 2DH (0x2D of 45) --> Tijd instellen
Aanroepen met: AH = 2DH
CH = uren (0 tot en met 23)
CL = minuten (0 tot en met 59)
DH = seconden (0 tot en met 59)
DL = honderdsten van seconden (0 tot en met 99)
Retourneert: AL = 00H, als de tijd succesvol is ingesteld
FFH, indien tijd niet geldig (genegeerd)
Reacties:
Deze functie initialiseert de real-time klok van het systeem op een opgegeven uur, minuut, seconde en honderdste van een seconde. De systeemdatum wordt niet beïnvloed.
INT 21U (0x21)
Functie 2EH (0x2E of 46) --> Verificatievlag instellen
Bellen met: AH = 2EH
AL = 00H, als de verificatievlag wordt uitgeschakeld
01H, als de verificatievlag is ingeschakeld
DL = 00H
Retourneren: Niets
Reacties:
Deze functie schakelt de vlag van het besturingssysteem voor automatische read-after-write verificatie van gegevens in of uit. De standaardinstelling van de verify-vlag is UIT omdat read-after-write verificatie de schijfbewerkingen vertraagt.
INT 21U (0x21)
Functie 2FH (0x2F of 47) --> DTA-adres ophalen
Bellen met: AH = 2FH
Retourneert: ES: BX = segment: offset van schijfoverdrachtsgebied
Reacties:
Met deze functie wordt het huidige adres van het schijfoverdrachtsgebied (DTA) opgehaald voor lees-/schrijfbewerkingen van FCB-bestanden.
INT 21U (0x21)
Functie 30H (0x30 of 48) --> MS-DOS-versienummer ophalen
Bellen met: AH = 30H
AL = 00H
Retourneert: AL = hoofdversienummer (MS-DOS 3.10=3, enz.)
AH = klein versienummer (MS-DOS 3.10 = 0AH, enz.)
BH = Original Equipment Manufacturer's
(OEM's) serienummer (OEM-afhankelijk - meestal 00H voor IBM's
PC-DOS, 0FFH of andere waarden voor MS-DOS)
BL: CX = 24-bits gebruikersserienummer (optioneel, OEM-afhankelijk)
Reacties:
Het retourneert het versienummer van het MS-DOS-besturingssysteem van de host.
INT 21U (0x21)
Functie 31H (0x31 of 49) --> Beëindigen en Resident blijven (TSR)
Bellen met: AH = 31H
AL = retourcode
DX = hoeveelheid geheugen in paragrafen, te reserveren
Geeft niets terug
Reacties:
Deze functie beëindigt de uitvoering van het momenteel uitgevoerde programma door een retourcode door te geven aan het bovenliggende proces, maar reserveert een deel of al het geheugen van het programma, zodat het wordt overschreven door het volgende tijdelijke programma dat moet worden geladen. Deze functie moet bij voorkeur worden gebruikt in plaats van INT 27H, omdat het CS ondersteunt om het segment van het programmasegmentprefix te bevatten.
INT 21U (0x21)
Functie 32H (0x32 of 50) --> Gereserveerd
INT 21U (0x21)
Functie 33H (0x33 of 51) --> Break-vlag ophalen of instellen, boot-drive ophalen
Bellen met: Als je een break-vlag krijgt
AH = 33H
AL = 00H
Als u de break-vlag instelt
AH = 33H
AL = 01H
DL = 00H als de break-vlag UIT staat
01H als de remvlag AAN staat
Als u een opstartschijf krijgt
AH = 33H
AL = 05H
Retourneert: Als aangeroepen met AL = 00H of 01H
DL = 00H break-vlag is UIT
01H pauze vlag is AAN
Indien aangeroepen met AL = 05H
DL = opstartschijf (1 = A, 2 = B, enz.)
Reacties:
Met deze functie kunt u de status van de break-vlag van het besturingssysteem opvragen of wijzigen, wat van invloed is op de Ctrl-C-controle tijdens functieaanroepen.
INT 21U (0x21)
Functie 34H (0x34 of 52) --> Gereserveerd
INT 21U (0x21)
Functie 35H (0x35 of 53) --> Interruptvector ophalen
Bellen met: AH = 35H
AL = onderbrekingsnummer
Retourneert: ES: BX = segment: offset van interrupt-handler
Reacties:
Met deze functie wordt het adres van de huidige interrupt-handlerroutine voor de opgegeven machine-interrupt verkregen.
INT 21U (0x21)
Functie 36H (0x36 of 54) --> Informatie over schijftoewijzing ophalen
Bellen met: AH = 36H
DL = aandrijfcode (standaard 0, 1 = A, enz.)
Retourneert: Als de functie succesvol is
AX = sector per cluster
BX = aantal beschikbare clusters
CX = bytes per sector
DX = cluster per schijf
Als de functie niet succesvol is (schijf ongeldig)
AX = FFFFH
Reacties:
Met deze functie wordt geselecteerde informatie over een schijfstation verkregen.
Deze functie is erg belangrijk bij het programmeren van gegevensherstel en het oplossen van schijfproblemen. Hiermee kunnen de capaciteit van de schijf, de resterende vrije ruimte en vele andere belangrijke zaken worden berekend.
INT 21U (0x21)
Functie 37H (0x37 of 55) --> Gereserveerd
INT 21U (0x21)
Functie 38H (0x38 of 56) --> Landinformatie ophalen of instellen
Bellen met: Als u landinformatie wilt
AH = 38H
AL = 0, om actuele landinformatie te verkrijgen
1-FEH, om informatie te krijgen voor
landen met code <255
FFH, om informatie te krijgen voor landen
met code >=255
BX = landcode, indien AL = FFH
DS:DX = segment: offset van buffer voor geretourneerde informatie
Als u de huidige landcode instelt
AH = 38H
AL = 1-FEH, landcode voor landen met code <255
FFH, voor landen met code >=255
BX = landcode, indien AL = 0FFH
DX = FFFFH
Retourneren:
Als de functie succesvol is
Vlag dragen = vrij
En als u informatie over internationalisering wilt krijgen
BX = landcode
DS: DX = segment: offset van buffer met internationalisatie-informatie.
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie verkrijgt u internationale informatie voor het huidige of opgegeven land of stelt u de huidige landcode in.
INT 21U (0x21)
Functie 39H (0x39 of 57) --> Directory aanmaken
Bellen met: AH = 39H
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie wordt een directory gemaakt met behulp van het opgegeven station en pad.
ASCIIZ staat bekend als de reeks ASCII-tekens die eindigen op Null of Zero, Byte. |
INT 21U (0x21)
Functie 3AH (0x3A of 58) --> Directory verwijderen
Bellen met: AH = 3AH
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie verwijdert een directory met behulp van de opgegeven drive en het opgegeven pad. Als een element van de padnaam niet bestaat of de directory niet leeg is of de toegang is geweigerd of de opgegeven directory ook de huidige directory is, mislukt de functie voor het verwijderen van de directory.
INT 21U (0x21)
Functie 3BH (0x3B of 59) --> Huidige directory instellen
Bellen met: AH = 3BH
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie stelt de huidige of standaarddirectory in met behulp van het opgegeven station en pad. Als het opgegeven pad of een element van het pad niet bestaat, mislukt de functie.
INT 21U (0x21)
Functie 3CH (0x3C of 60) --> Bestand aanmaken
Bellen met: AH = 3CH
CX = bestandsattribuut, waarbij attribuut
significantiebits kunnen worden gecombineerd.
De betekenis van bits wordt weergegeven in de volgende tabel:
Beetje(s) |
Betekenis (indien ingesteld) |
0 |
Alleen-lezen |
1 |
Verborgen |
2 |
Systeem |
3 |
Volume-etiket |
4 |
Gereserveerd (0) |
5 |
Archief |
6 – 15 |
Gereserveerd (0) |
DS: DX = segment: offset van ASCIIZ
padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = handvat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Als een ASCIIZ-padnaam wordt opgegeven, maakt deze functie een nieuw bestand in de aangewezen of standaarddirectory 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 handle geretourneerd die door het programma kan worden gebruikt voor latere toegang tot het bestand.
Als een element van de padnaam niet bestaat of als er een bestand wordt gemaakt in de hoofdmap terwijl de hoofdmap vol is of als de toegang is geweigerd of als er zich al een bestand met het kenmerk Alleen-lezen in de opgegeven map bevindt, mislukt de functie voor het maken van een bestand.
INT 21U (0x21)
Functie 3DH (0x3D of 61) --> Open bestand
Bellen met: AH = 3DH
AL = toegangsmodus
De betekenis van de toegangsmodusbits wordt in de volgende tabel weergegeven:
Beetjes |
Betekenis |
0 – 2 |
Toegangsmodus
000 = leestoegang
001 = schrijftoegang
010 = lees-/schrijftoegang |
3 |
Gereserveerd (0) |
4 – 6 |
Deelmodus
000 = compatibiliteitsmodus
001 = alles weigeren
010 = schrijven weigeren
011 = lezen weigeren
100 = niets weigeren |
7 |
Erfenisvlag
0 = onderliggend proces erft handle
1 = onderliggend proces erft handle niet |
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = handvat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Als een ASCIIZ-padnaam wordt opgegeven, opent deze functie het opgegeven 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 21U (0x21)
Functie 3EH (0x3E of 62) --> Bestand sluiten
Bellen met: AH = 3EH
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie spoelt alle interne buffers die aan het bestand zijn gekoppeld naar schijf, sluit het bestand en geeft de handle vrij voor hergebruik, van eerder geopende of met succes gemaakte handle van een bepaalde handle. Als het bestand is gewijzigd, worden de tijd- en datumstempel en de bestandsgrootte bijgewerkt in de directory-invoer van het bestand.
INT 21U (0x21)
Functie 3FH (0x3F of 63) --> Lees bestand of apparaat
Bellen met: AH = 3FH
BX = handvat
CX = aantal bytes om te lezen
DS: DX = segment: offset van buffer
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = byte overgedragen
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie worden gegevens op de huidige bestandspointerpositie overgebracht van het bestand naar de buffer en worden vervolgens de bestandspointerpositie bijgewerkt voor een gegeven geldige bestands-handle van een eerdere open- of aanmaakbewerking, een bufferadres en een lengte in bytes.
INT 21U (0x21)
Functie 40H (0x40 of 64) --> Schrijf bestand of apparaat
Bellen met: AH = 40H
BX = handvat
CX = aantal bytes om te schrijven
DS: DX = segment: offset van buffer
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = byte overgedragen
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie brengt gegevens over van de buffer naar het bestand en werkt vervolgens de positie van de bestandspointer bij voor een gegeven geldige bestandshandle van een eerdere open- of create-bewerking, 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 bestandspointer.
INT 21U (0x21)
Functie 41H (0x41 of 65) --> Bestand verwijderen
Bellen met: AH = 41H
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie verwijdert een bestand van de standaard of opgegeven schijf en directory. De functie verwijdert een bestand door het eerste teken van de bestandsnaam in de root directory 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 werkelijke gegevens die in die clusters zijn opgeslagen niet overschreven.
INT 21U (0x21)
Functie 42H (0x42 of 66) --> Bestandspointer instellen
Bellen met: AH = 42H
AL = methodecode
00H absolute offset vanaf het begin van het bestand
01H getekende offset van huidig bestand
wijzer
02H getekende offset vanaf einde bestand
BX = handvat
CX = meest significante helft van offset
DX = minst significante helft van offset
Retourneert: als de functie succesvol is
Vlag dragen = vrij
DX = meest significante helft van het resulterende bestand
wijzer
AX = minst significante helft van het resulterende bestand
wijzer
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie stelt u de locatie van de bestandsaanwijzer in ten opzichte van het begin van het bestand, het einde van het bestand of de huidige positie van het bestand.
INT 21U (0x21)
Functie 43H (0x43 of 67) --> Bestandskenmerken ophalen of instellen
Bellen met: AH = 43H
AL = 00H om kenmerken te verkrijgen
01H om kenmerken in te stellen
CX = bestandskenmerk, als AL=01H. Bits kunnen worden gecombineerd
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
CX = bestandskenmerk
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie verkrijgt of wijzigt de kenmerken van een bestand (alleen-lezen, verborgen, systeem of archief) of directory. Voor de betekenis van bits voor verschillende kenmerken, zie de tabel met bits-betekenis die eerder is gegeven.
INT 21U (0x21)
Functie 44H (0x44 of 68) --> Input/Output Control (I/O Ctrl)
Deze functie biedt een direct communicatiepad tussen een toepassingsprogramma en een apparaatstuurprogramma. Hiermee kan een programma hardware-afhankelijke informatie verkrijgen en bewerkingen aanvragen die niet worden ondersteund door andere MS-DOS-functieaanroepen.
De subfuncties van Input- en outputbesturing zijn weergegeven in de volgende tabel:
Subfunctie |
Operatie Naam |
00U |
Apparaatinformatie ophalen |
01U |
Apparaatinformatie instellen |
02U |
Ontvang besturingsgegevens van het karakterapparaatstuurprogramma |
03U |
Stuur besturingsgegevens naar karakterapparaatstuurprogramma |
04U |
Ontvang besturingsgegevens van blokapparaatstuurprogramma |
05U |
Stuur besturingsgegevens naar het stuurprogramma van het blokapparaat |
06U |
Controleer invoerstatus |
07U |
Controleer de uitvoerstatus |
08U |
Controleer of het blokapparaat verwijderbaar is |
09U |
Controleer of het blokapparaat extern is |
0AH (10) |
Controleer of de handgreep op afstand is |
0BH (11) |
Wijzig het aantal pogingen om te delen |
0CH (12)
|
Generieke I/O-besturing voor karakterapparaten
Waarde |
Beschrijving |
KL = 45H |
Iteratietelling instellen |
KL = 4Ah |
Selecteer Codepagina |
CL = 4CH |
Start Codepagina Voorbereiding |
4DH = 0,50 ... |
Einde van de voorbereiding van de codepagina |
CL = 5FH |
Weergave-informatie instellen |
KL = 65H |
Iteratietelling ophalen |
KL = 6AH |
Query Geselecteerde Code Pagina |
6BH = 6BH |
Query Lijst voorbereiden |
CL = 7FH |
Weergave-informatie ophalen |
|
0DH (13)
|
Generieke I/O-besturing voor blokapparaten
Waarde |
Beschrijving |
KL = 40H |
Apparaatparameters instellen |
CL = 41H |
Schrijf Track |
KL = 42H |
Track formatteren en verifiëren |
KL = 47H |
Toegangsvlag instellen |
KL = 60H |
Apparaatparameters ophalen |
CL = 61H |
Lees het spoor |
KL = 62H |
Track verifiëren |
CL = 67H |
Toegang verkrijgen Vlag |
|
0EH (14) |
Logische schijfkaart ophalen |
0FH (15) |
Logische stationskaart instellen |
INT 21U (0x21)
Functie 44H (0x44 of 68), subfunctie 00H (0x00) I/O Ctrl --> apparaatgegevens ophalen
Bellen met: AH = 44H
AL = 00H
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
DX = apparaatinformatiewoord
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie retourneert een apparaatinformatiewoord voor het bestand of apparaat dat aan de opgegeven handle is gekoppeld.
INT 21U (0x21)
Functie 44H (0x44 of 68), subfunctie 01H (0x01) I/O Ctrl --> apparaatgegevens instellen
Bellen met: AH = 44H
AL = 01H
BX = handvat
DX = apparaatinformatiewoord
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie van functie 44H van INT 21H, stelt bepaalde vlaggen in voor een handle die is gekoppeld aan een character device. Deze subfunctie mag niet worden gebruikt voor een handle die is gekoppeld aan een bestand.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 02H (0x02) I/O Ctrl --> lees besturingsgegevensteken apparaatstuurprogramma
Bellen met: AH = 44H
AL = 02H
BX = handvat
CX = aantal bytes om te lezen
DS: DX = segment: offset van buffer
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = gelezen bytes
En de buffer bevat besturingsgegevens van de driver
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Het leest besturingsgegevens van een character-device driver. De lengte en inhoud van de gegevens worden gespecificeerd voor elke device driver en volgen geen standaardformaat. Deze functie resulteert niet noodzakelijkerwijs in invoer van het fysieke apparaat.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 03H (0x03) I/O Ctrl --> schrijf besturingsgegevens teken-apparaatstuurprogramma
Bellen met: AH = 44H
AL = 03H
BX = handvat
CX = aantal bytes om te schrijven
DS: DX = segment: offset van gegevens
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = overgedragen bytes
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie brengt besturingsgegevens over van een toepassing naar een character-device driver. De lengte en inhoud van de gegevens zijn specifiek voor elke device driver en volgen geen standaardformaat. Deze functie resulteert niet noodzakelijkerwijs in een uitvoer naar het fysieke apparaat.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 04H (0x04) I/O Ctrl --> Lees besturingsgegevensblok - apparaatstuurprogramma
Bellen met: AH = 44H
AL = 04H
BL = apparaatcode (0= standaard, 1=A, 2=B, enz.)
CX = aantal bytes om te lezen
DS: DX = segment: offset van buffer
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = overgedragen bytes
En de buffer bevat besturingsgegevens van het apparaatstuurprogramma
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie brengt besturingsgegevens van een blok-apparaatstuurprogramma rechtstreeks over naar de buffer van een toepassingsprogramma. De lengte en inhoud van de gegevens zijn specifiek voor elk apparaatstuurprogramma en volgen geen standaardformaat. Deze functie resulteert niet noodzakelijkerwijs in invoer van het fysieke apparaat.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 05H (0x05) I/O Ctrl --> schrijf besturingsgegevensblok-apparaatstuurprogramma
Bellen met: AH = 44H
AL = 05H
BL = apparaatcode (0= standaard, 1=A, 2=B, enz.)
CX = aantal bytes om te schrijven
DS: DX = segment: offset van gegevens
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = overgedragen bytes
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie brengt besturingsgegevens over van een toepassingsprogramma rechtstreeks naar een blokapparaatstuurprogramma. De lengte en inhoud van de besturingsgegevens zijn specifiek voor elk apparaatstuurprogramma en volgen geen standaardformaat. Deze functie resulteert niet noodzakelijkerwijs in een uitvoer naar het fysieke apparaat.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 06H (0x06) I/O Ctrl --> controleer invoerstatus
Bellen met: AH = 44H
AL = 06H
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En voor een apparaat:
AL = 00H, als apparaat niet gereed is
FFH, als het apparaat gereed is
Voor een bestand:
AL = 00H, als bestandspointer bij EOF
FFH, als de bestandspointer niet op EOF staat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Het retourneert een code die aangeeft of het apparaat of de bestanden die aan een handle zijn gekoppeld, gereed zijn voor invoer.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 07H (0x07) I/O Ctrl --> controleer uitvoerstatus
Bellen met: AH = 44H
AL = 07H
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En voor een apparaat:
AL = 00H, als apparaat niet gereed is
FFH, als het apparaat gereed is
Voor een bestand:
AL = FFH
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Het retourneert een code die aangeeft of het apparaat dat aan een handvat is gekoppeld, gereed is voor uitvoer.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 08H (0x08) I/O Ctrl --> controleren of blokapparaat verwijderbaar is
Bellen met: AH = 44H
AL = 08H
BL = stationsnummer (0 = standaard, 1=A, 2=B, enz.)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AL = 00H, als het medium verwijderbaar is
01H, als medium niet verwijderbaar is
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie controleert of het opgegeven blokapparaat een verwijderbaar opslagmedium bevat, zoals een floppydisk. Als een bestand niet zoals verwacht op een bepaald station wordt gevonden, kan een programma deze subfunctie gebruiken om te bepalen of de gebruiker moet worden gevraagd een andere disk te plaatsen.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 09H (0x09) I/O Ctrl --> controleren of blokapparaat op afstand is
Bellen met: AH = 44H
AL = 09H
BL = stationsnummer (0 = standaard, 1=A, 2=B, enz.)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
DX = apparaatkenmerkwoord
bit 12 = 0, als de schijf lokaal is
= 1, als de schijf op afstand is
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie controleert of het opgegeven blokapparaat lokaal is (aangesloten op de computer waarop het programma draait) of extern (omgeleid naar een netwerkserver).
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0AH (0x0A of 10) I/O Ctrl --> controleren of de handle extern is
Bellen met: AH = 44H
AL = 0AH
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
DX = kenmerkwoord voor bestand of apparaat
bit 15 = 0 indien lokaal
1 indien op afstand
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Hiermee wordt gecontroleerd of de opgegeven handle verwijst naar een bestand of apparaat dat lokaal is (op de pc waarop het programma wordt uitgevoerd) of extern (op een netwerkserver).
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0BH (0x0B of 11) I/O Ctrl --> wijzig het aantal pogingen om te delen
Bellen met: AH = 44H
AL = 0BH
CX = vertragingen per nieuwe poging (standaard = 1)
DX = aantal nieuwe pogingen (standaard = 3)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie stelt het aantal keren in dat MS-DOS een schijfbewerking opnieuw probeert uit te voeren na een fout die is veroorzaakt door een schending van de bestandsdeling voordat er een fout wordt geretourneerd aan het aanvragende proces. Deze subfunctie is niet beschikbaar tenzij de bestandsdelingsmodule is geladen.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0CH (0x0C of 12) I/O Ctrl generieke I/O-besturing voor karakterapparaten
Bellen met: AH = 44H
AL = 0CH
BX = handvat
CH =categorie (hoofd)code:
00H = onbekend
01H = COM1, COM2, COM3, OF COM4
03H = CON (toetsenbord en beeldscherm)
05H = LPT1, LPT2, OF LPT3
CL = functie (klein) code:
45H = Iteratietelling instellen
4AH = Selecteer codepagina
4CH = Start Codepagina Voorbereiding
4DH = Einde voorbereiding codepagina
5FH = Weergave-informatie instellen
65H = Iteratietelling ophalen
6AH = Query geselecteerde codepagina
6BH = Query voorbereiden lijst
7FH = Weergave-informatie ophalen
DS: DX = segment: offset van parameterblok
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En als aangeroepen met CL = 65H, 6AH, 6BH of 7FH
DS: DX = segment: offset van parameterblok
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Het biedt een algemeen mechanisme voor communicatie tussen toepassingsprogramma's en stuurprogramma's voor tekenapparaten.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0DH (0x0D of 13) I/O Ctrl --> generieke I/O-besturing voor blokapparaten
Bellen met: AH = 44H
AL = 0DH
BL = aandrijfcode (0 = standaard, 1 = A, 2 = B, enz.)
CH = categorie (hoofd)code:
08H = schijfstation
CL = functie (klein) code:
40H = Stel aandrijfparameters in
41H = Schrijf spoor
42H = Track formatteren en verifiëren
47H = Toegangsvlag instellen
60H = Apparaatparameters ophalen
61H = Lees spoor
62H = Track verifiëren
67H = Toegangsvlag verkrijgen
DS: DX = segment: offset van parameterblok
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En als aangeroepen met CL = 60H of 61H
DS: DX = segment: offset van parameterblok
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie biedt een algemeen mechanisme voor communicatie tussen toepassingsprogramma's en blokapparaatstuurprogramma's. Hiermee kan een programma apparaatparameters voor een logische schijf inspecteren of wijzigen en schijftracks op een hardware-onafhankelijke manier lezen, schrijven, formatteren en verifiëren.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0EH (0x0E of 14) I/O Ctrl -->> logische stationskaart ophalen
Bellen met: AH = 44H
AL = 0EH
BL = aandrijfcode (0 = standaard, 1=A, 2=B, enz.)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AL = toewijzingscode
00H, indien er slechts één logische schijfcode is
toegewezen aan het blokapparaat
01H-1AH logische schijfcode (1=A,
2=B, enz.) toegewezen aan het blokapparaat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Hiermee wordt de logische schijfcode geretourneerd die het laatst is gebruikt om toegang te krijgen tot het opgegeven blokstation.
INT 21U (0x21)
Functie 44H (0x44 of 68), Subfunctie 0FH (0x0F of 15) I/O Ctrl --> logische stationskaart instellen
Bellen met: AH = 44H
AL = 0FH
BL = aandrijfcode (0 = standaard, 1=A, 2=B, enz.)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AL = toewijzingscode
00H, indien er slechts één logische schijfcode is
toegewezen aan het blokapparaat
01H-1AH, logische schijfcode (1=A,
2=B, enz.) toegewezen aan de
blok apparaat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze subfunctie wordt de volgende logische schijfcode ingesteld die wordt gebruikt om naar een blokapparaat te verwijzen.
INT 21U (0x21)
Functie 45H (0x45 of 69) --> Duplicaat handvat
Bellen met: AH = 45H
BX = handvat dat gedupliceerd moet worden
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = nieuwe handgreep
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie retourneert een nieuwe handle die verwijst naar hetzelfde apparaat of bestand op dezelfde positie voor de opgegeven handle voor een momenteel geopend apparaat of bestand.
INT 21U (0x21)
Functie 46H (0x46 of 70) --> Omleidingshandvat
Bellen met: AH = 46H
BX = handvat voor bestand of apparaat
CX = handvat dat omgeleid moet worden
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Als er twee gegeven handles 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 21U (0x21)
Functie 47H (0x47 of 71) --> Huidige directory ophalen
Bellen met: AH = 47H
DL = aandrijfcode (0 = standaard, 1 = A,
2=B, enz.)
DS: SI = segment: offset van 64-byte buffer
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En de buffer wordt gevuld met het volledige pad vanaf de root van de huidige directory.
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie verkrijgt een ASCIIZ-tekenreeks die het pad van de hoofdmap naar de huidige map beschrijft, en de naam van die map.
INT 21U (0x21)
Functie 48H (0x48 of 72) --> Geheugenblok toewijzen
Bellen met: AH = 48H
BX = aantal paragrafen van het geheugen
nodig
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Ax = basissegmentadres van toegewezen
blok
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
BX = grootte van het grootste beschikbare blok
(alinea's)
Reacties:
Er wordt een geheugenblok toegewezen en er wordt een aanwijzer naar het begin van het toegewezen gebied geretourneerd.
INT 21U (0x21)
Functie 49H (0x49 of 73) --> Geheugenblok vrijgeven
Bellen met: AH = 49H
ES = segment van het blok dat vrijgegeven moet worden
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
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 21U (0x21)
Functie 4AH (0x4A of 74) --> Geheugenblok formaat wijzigen
Bellen met: AH = 4AH
BX = gewenste nieuwe blokmaat in alinea's
ES = segment van het blok dat moet worden gewijzigd
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
BX = maximaal beschikbare blokmaat
(alinea's)
Reacties:
Met deze functie wordt een geheugenblok dynamisch verkleind of uitgebreid, afhankelijk van de behoeften van een toepassingsprogramma.
INT 21U (0x21)
Functie 4BH (0x4B of 75) --> Programma uitvoeren (EXEC)
Bellen met: AH = 4BH
AL = subfunctie
00H = Programma laden en uitvoeren
03H = Overlay laden
ES: BX = segment: offset van parameterblok
DS: DX = segment: offset van ASCIIZ-programma
padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Registers worden op de gebruikelijke wijze bewaard.
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie laat een applicatieprogramma een ander programma uitvoeren, en krijgt de controle terug wanneer het klaar is. Kan ook worden gebruikt om overlays te laden, hoewel dit gebruik ongebruikelijk is.
INT 21U (0x21)
Functie 4CH (0x4C of 76) --> Proces beëindigen met retourcode
Bellen met: AH = 4CH
AL = retourcode
Retourneren: Niets
Reacties:
Deze functie beëindigt het huidige proces en geeft een retourcode door aan het bovenliggende proces. Dit is een van de verschillende methoden die een programma kan gebruiken om een definitieve exit uit te voeren.
INT 21U (0x21)
Functie 4DH (0x4D of 77) --> Retourcode ophalen
Aanroepen met: AH = 4DH
Retourneert: AH = exit-type
00H, indien normale beëindiging door INT 20H, INT 21H
Functie 00H, of INT 21H Functies 4CH
01H indien beëindiging door invoer van Ctrl-C door de gebruiker
02H indien beëindiging door afhandeling van kritieke fouten
03H indien beëindiging door INT21H Functie 31H of
INT 27H |
AL = retourcode doorgegeven door onderliggend proces
(0 indien kind beëindigd door INT 20H,
INT 21H Functie 00H, of INT 27H)
Reacties:
Deze functie wordt door een bovenliggend proces gebruikt, 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 21U (0x21)
Functie 4EH (0x4E of 78) --> Zoek eerste bestand
Bellen met: AH = 4EH
CX = zoekattribuut (bits kunnen worden gecombineerd)
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is en het overeenkomende bestand is gevonden
Vlag dragen = vrij
En de zoekresultaten worden als volgt weergegeven in het huidige schijfoverdrachtsgebied:
Verandering(en) |
Beschrijving |
00.00-14.00 uur |
Gereserveerd (0) |
15 uur |
Kenmerk van overeenkomend bestand of map |
16.00-17.00 uur |
Bestandstijdbits
00H-04H = stappen van 2 seconden (0-29)
bits 05H-0AH = minuten (0-59)
bits 0BH-0FH = uren (0-23) |
18.00-19.00 uur
|
Bestandsdatum
bits 00H-04H = dag (1-31)
bits 05H-08H = maand (1-12)
bits 09H-0FH = jaar (relatief ten opzichte van 1980) |
1AH-1DH |
Bestandsgrootte |
1EH-2AH |
ASCIIZ-bestandsnaam en extensie |
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie zoekt in de standaard- of opgegeven directory op de standaard- of opgegeven drive naar het eerste overeenkomende bestand voor een gegeven bestandsspecificatie in de vorm van een ASCIIZ-tekenreeks. Raadpleeg voor bitsignificantie van kenmerken de eerder gegeven tabel met bitsignificantie.
INT 21U (0x21)
Functie 4FH (0x4F of 79) --> Zoek volgend bestand
Bellen met: AH = 4FH
Retourneert: Als de functie succesvol is en het overeenkomende bestand is gevonden
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Als er eerder een succesvolle aanroep is gedaan naar INT 21H Functie 4EH, vindt deze functie het volgende bestand in de standaardmap of de opgegeven map op het standaardstation of de opgegeven map dat overeenkomt met de oorspronkelijke bestandsspecificatie.
INT 21U (0x21)
Functie 50H (0x50 of 80) --> Gereserveerd
INT 21U (0x21)
Functie 51H (0x51 of 81) --> Gereserveerd
INT 21U (0x21)
Functie 52H (0x52 of 82) --> Gereserveerd
INT 21U (0x21)
Functie 53H (0x53 of 83) --> Gereserveerd
INT 21U (0x21)
Functie 54H (0x54 of 84) --> Verificatievlag ophalen
Bellen met: AH = 54H
Retourneert: AL = huidige verificatievlagwaarde
00H als verifiëren uit
01H indien geverifieerd op
Reacties:
Met deze functie wordt de huidige waarde van de systeemverificatievlag (lezen na schrijven) opgehaald.
INT 21U (0x21)
Functie 55H (0x55 of 85) --> Gereserveerd
INT 21U (0x21)
Functie 56H (0x56 of 86) --> Bestand hernoemen
Bellen met: AH = 56H
DS: DX = segment: offset van huidige ASCIIZ
padnaam
ES: DI = segment: offset van nieuwe ASCIIZ
padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie hernoemt een bestand en/of verplaatst de directory-invoer naar een andere op dezelfde schijf. In MS-DOS-versies 3.0 en later kan deze functie ook worden gebruikt om directory's te hernoemen
Als een element van het pad niet bestaat, als er al een bestand met de nieuwe padnaam bestaat, als de huidige padnaamspecificatie een andere schijfeenheid bevat dan de nieuwe padnaam, als het bestand naar de hoofdmap wordt verplaatst en de hoofdmap vol is of als de gebruiker onvoldoende rechten heeft, mislukt de functie om bestanden te hernoemen.
INT 21U (0x21)
Functie 57H (0x57 of 87) --> Datum en tijd van bestand ophalen of instellen
Bellen met: Als u datum en tijd wilt ophalen
AH = 57H
AL = 00H
BX = handvat
Als u datum en tijd wilt instellen
AH = 57H
AL = 01H
BX = handvat
CX = tijd
bits 00H-04H = stappen van 2 seconden (0-29)
bits 05H-0AH = minuten (0-59)
bits 0BH-0FH = uren (0-23)
DX = datum
bits 00H-04H = dag (1-31)
bits 05H-08H = maand (1-12)
bits 09H-0FH = jaar (relatief ten opzichte van 1980)
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
en, indien aangeroepen met AL = 00H
CX = tijd
DX = datum
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie kunt u de datum- en tijdstempel in de hoofdmap van een bestand ophalen of wijzigen.
INT 21U (0x21)
Functie 58H (0x58 of 88) --> Toewijzingsstrategie ophalen of instellen
Bellen met: Als u de strategiecode ontvangt
AH = 58H
AL = 00H
Als u de strategiecode instelt
AH = 58H
AL = 01H
BX = gewenste strategiecode
00H = eerste aanpassing
01H = beste pasvorm
02H = laatste aanpassing
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
en, indien aangeroepen met AL = 00H
AX = huidige strategiecode
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Verkrijgt of wijzigt de code die de huidige MS-DOS-strategie voor het toewijzen van geheugenblokken aangeeft. De standaard MS-DOS-geheugentoewijzingsstrategie is First Fit (code 0).
Bij de First Fit-geheugentoewijzing doorzoekt MS-DOS de beschikbare geheugenblokken van laag naar hoog adres en wijst het eerste blok toe dat groot genoeg is om aan de bloktoewijzingsaanvraag te voldoen.
Bij de toewijzingsstrategie Best fit doorzoekt MS-DOS alle beschikbare geheugenblokken en wijst het kleinste beschikbare blok toe dat aan het verzoek kan voldoen, ongeacht de positie ervan.
Bij de geheugentoewijzingsstrategie Last fit doorzoekt MS-DOS de beschikbare geheugenblokken van hoge adressen tot lage adressen en wijst het hoogste adres toe dat groot genoeg is om aan het bloktoewijzingsverzoek te voldoen.
INT 21U (0x21)
Functie 59H (0x59 of 89) --> Uitgebreide foutinformatie ophalen
Bellen met: AH = 59H
BX = 00H
Retourneert: AX = uitgebreide foutcode
Hieronder vindt u een tabel met foutcodes:
Foutcode |
Fout |
01U |
functie nummer ongeldig |
02U |
bestand niet gevonden |
03U |
pad niet gevonden |
04U |
te veel open bestanden |
05U |
Toegang geweigerd |
06U |
ongeldige afhandeling |
07U |
geheugencontroleblokken vernietigd |
08U |
onvoldoende geheugen |
09U |
geheugenblokadres ongeldig |
0AH (10) |
omgeving Ongeldig |
0BH (11) |
formaat ongeldig |
0CH (12) |
toegangscode ongeldig |
0DH (13) |
gegevens ongeldig |
0EH (14) |
onbekende eenheid |
0FH (15) |
schijfstation ongeldig |
10 uur (16) |
geprobeerd om huidige directory te verwijderen |
11 uur (17) |
niet hetzelfde apparaat |
12 uur (18) |
geen bestanden meer |
13U (19) |
schijf schrijfbeveiligd |
14 uur (20) |
onbekende eenheid |
15 uur (21) |
aandrijving niet gereed |
16 uur (22) |
onbekend commando |
17 uur (23) |
Gegevensfout (CRC) |
18 uur (24) |
slechte aanvraagstructuurlengte |
19 uur (25) |
zoek fout |
1Ah (26) |
onbekend mediatype |
1BH (27) |
sector niet gevonden |
1CH (28) |
printer heeft geen papier meer |
1DH (29) |
schrijf fout |
1EH (30) |
lees fout |
1FH (31) |
algemene mislukking |
20 uur (32) |
delen schending |
21 uur (33) |
slot overtreding |
22 uur (34) |
schijfwijziging ongeldig |
23U (35) |
FCB niet beschikbaar |
24 uur (36) |
buffer voor delen overschreden |
25U-31U |
gereserveerd |
32 uur (50) |
niet-ondersteunde netwerkaanvraag |
33H (51) |
externe machine luistert niet |
34U (52) |
dubbele naam op netwerk |
35H (53) |
netwerknaam niet gevonden |
36H (54) |
netwerk bezet |
37H (55) |
apparaat bestaat niet meer op het netwerk |
38H (56) |
net BIOS-opdrachtlimiet overschreden |
39H (57) |
fout in netwerkadapterhardware |
3A (58) |
onjuiste reactie van netwerk |
3BH (59) |
onverwachte netwerkfout |
3CH (60) |
externe adapter niet compatibel |
3DH (61) |
afdrukwachtrij vol |
3EH (62) |
niet genoeg ruimte voor afdrukbestand |
3FH (63) |
afdrukbestand geannuleerd |
40U (64) |
netwerknaam verwijderd |
41H (65) |
netwerktoegang geweigerd |
42H (66) |
onjuist netwerkapparaattype |
43H (67) |
netwerknaam niet gevonden |
44 uur (68) |
netwerknaamlimiet overschreden |
45H (69) |
net BIOS-sessielimiet overschreden |
46H (70) |
Bestandsdeling tijdelijk gepauzeerd |
47H (71) |
netwerkverzoek niet geaccepteerd |
48H (72) |
Afdrukken of schijfomleiding gepauzeerd |
49H-4FH |
gereserveerd |
50 uur (80) |
bestand bestaat al |
51H (81) |
gereserveerd |
52H (82) |
kan geen directory maken |
53H (83) |
mislukt op INT 24H (kritieke fout) |
54H (84) |
te veel omleidingen |
55H (85) |
dubbele omleiding |
56H (86) |
ongeldig wachtwoord |
57H (87) |
ongeldige parameter |
58H (88) |
netwerkapparaatfout |
59H (89) |
functie niet ondersteund door netwerk |
5Ah (90) |
vereist systeemcomponent niet geïnstalleerd |
BH = foutklasse
01U |
indien er geen bronnen meer zijn (zoals opslag of handgrepen) |
02U |
indien geen fout, maar een tijdelijke situatie (zoals een vergrendelde regio in een bestand) waarvan verwacht kan worden dat deze zal eindigen |
03U |
indien autorisatieprobleem |
04U |
als er een interne fout is in de systeemsoftware |
05U |
als hardware defect is |
06U |
als de softwarefout in het systeem niet de schuld is van het actieve proces (zoals ontbrekende configuratiebestanden) |
07U |
als er een fout in het toepassingsprogramma is |
08U |
als bestand of item niet gevonden is |
09U |
als bestand of item van ongeldig type of formaat is |
0AH (10) |
als bestand of item vergrendeld is |
0BH (11) |
als er een verkeerde schijf in het station zit, een slechte plek op de schijf of een probleem met het opslagmedium |
0CH (12) |
als item al bestaat |
0DH (13) |
onbekende fout |
BL = aanbevolen actie
01U |
Probeer het een redelijk aantal keren opnieuw en vraag de gebruiker vervolgens om te kiezen voor afbreken of negeren. |
02U |
Probeer het een redelijk aantal keren opnieuw met een vertraging tussen de pogingen, en vraag de gebruiker vervolgens om te kiezen voor afbreken of negeren. |
03U |
correcte informatie van de gebruiker verkrijgen (meestal veroorzaakt door een onjuiste bestandsnaam of apparaatspecificatie) |
04U |
de toepassing afbreken met opschoning (d.w.z. het programma zo ordelijk mogelijk beëindigen: vergrendelingen opheffen, bestanden sluiten, enz.) |
05U |
voer onmiddellijk een exit uit zonder opruiming |
06U |
negeer fout |
07U |
opnieuw proberen na tussenkomst van de gebruiker om de oorzaak van de fout te verwijderen |
CH = foutlocus
01H onbekend
02H blokapparaat (schijf of schijfemulator)
03H-netwerk
04H serieel apparaat
05H geheugen
ES: DI = ASCIIZ volumelabel van schijf naar
invoegen, als AX = 0022H (ongeldige schijfwijziging)
Reacties:
Met deze functie verkrijgt u gedetailleerde foutinformatie na een eerdere mislukte INT 21H-functieaanroep, inclusief de aanbevolen herstelmaatregelen.
INT 21U (0x21)
Functie 5AH (0x5A of 90) --> Tijdelijk bestand maken
Bellen met: AH = 5AH
CX = attribuut (bits kunnen gecombineerd worden)
DS: DX = segment: offset van ASCIIZ-pad
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = handvat
DS: DX = segment: offset van volledige ASCIIZ
padnaam
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie maakt een bestand met een unieke naam, in de huidige of opgegeven directory op de standaard of opgegeven schijf, en retourneert een handle die door het programma kan worden gebruikt voor latere toegang tot het bestand. De naam die voor het bestand wordt gegenereerd, wordt ook geretourneerd in een buffer die door het programma is opgegeven.
Als een element van het pad niet bestaat of als het bestand in de hoofdmap wordt gemaakt en de hoofdmap vol is, mislukt de functie.
INT 21U (0x21)
Functie 5BH (0x5B of 91) --> Nieuw bestand maken
Bellen met: AH = 5BH
CX = attribuut (bits kunnen gecombineerd worden)
DS: DX = segment: offset van ASCIIZ-padnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
AX = handvat
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie maakt een bestand aan in de aangewezen of standaardmap op het aangewezen of standaardstation en retourneert een handle die 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, als een element van het opgegeven pad niet bestaat, als het bestand in de hoofdmap wordt gemaakt en de hoofdmap vol is of als de gebruiker onvoldoende toegangsrechten heeft, mislukt de functie.
INT 21U (0x21)
Functie 5CH (0x5C of 92) --> Bestandsregio vergrendelen of ontgrendelen
Bellen met: AH = 5CH
AL = 00H als vergrendelingsgebied
01H als ontgrendelingsregio
BX = handvat
CX = hoog gedeelte van regio offset
DX = laagste deel van de regio-offset
SI = lengte van het hoogste deel van de regio
DI = laagste deel van de regiolengte
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie vergrendelt of ontgrendelt het opgegeven gebied van een bestand. Deze functie is niet beschikbaar tenzij de bestandsdelingsmodule (zoals SHARE.EXE) is geladen.
INT 21U (0x21)
Functie 5DH (0x5D of 93) --> Gereserveerd
INT 21U (0x21)
Functie 5EH (0x5E of 94), subfunctie 00H (0x00) --> Machinenaam ophalen
Bellen met: AH = 5EH
AL = 00H
DS: DX = segment: offset van buffer om te ontvangen
snaar
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
CH = 00H als naam niet gedefinieerd is
<> 00H als naam gedefinieerd
CL = netBIOS-naamnummer (als CH <> 0)
DX: DX = segment: offset van identificatie (als CH <> 0)
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
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 21U (0x21)
Functie 5EH (0x5E of 94), subfunctie 02H (0x02) --> Printerinstellingsreeks instellen
Bellen met: AH = 5EH
AL = 02H
BX = omleidingslijstindex
CX = lengte van de setup-string
DS: SI = segment: offset van setup-string
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze subfunctie wordt een tekenreeks opgegeven die vóór alle bestanden naar een bepaalde netwerkprinter moet worden verzonden. Zo kunnen gebruikers op verschillende netwerkknooppunten individuele werkingsmodi op dezelfde printer opgeven.
INT 21U (0x21)
Functie 5EH (0x5E of 94), subfunctie 03H (0x03) --> Printerinstellingsreeks ophalen
Bellen met: AH = 5EH
AL = 03H
BX = omleidingslijstindex
ES: DI = segment: offset van buffer om te ontvangen
setup-reeks
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
CX = lengte van de printerinstellingsreeks
ES: DI = segment: offset van buffer om te ontvangen
setup-reeks
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie kunt u de printerinstellingsreeks voor een specifieke netwerkprinter verkrijgen.
INT 21U (0x21)
Functie 5FH (0x5F of 95), subfunctie 02H (0x02) --> Omleidingslijstitem ophalen
Bellen met: AH = 5FH
AL = 02H
BX = omleidingslijstindex
DS: SI = segment: offset van 16-byte buffer naar
lokale apparaatnaam ontvangen
ES: DI = segment: offset van 128-byte buffer naar
ontvang netwerknaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
BH = apparaatstatusvlag
Bit 0 = 0 als apparaat geldig is
= 1 indien niet geldig
BL = apparaattype
03H, als printer
04H, als rijden
CX = opgeslagen parameterwaarde
DX = vernietigd
BP = vernietigd
DS: SI = segment: offset van ASCIIZ lokaal
apparaatnaam
ES: DI = segment: offset van ASCIIZ-netwerk
naam
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie maakt inspectie van de systeemomleidingslijst mogelijk, die lokale logische namen koppelt aan netwerkbestanden, directory's of printers. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de bestandsdelingsmodule is geladen.
INT 21U (0x21)
Functie 5FH (0x5F of 95), subfunctie 03H (0x03) --> Apparaat omleiden
Bellen met: AH = 5FH
AL = 03H
BL = apparaattype
03H, als printer
04H, als rijden
DS: SI = segment: offset van ASCIIZ lokaal
apparaatnaam
ES: DI = segment: offset van ASCIIZ-netwerk
naam, gevolgd door ASCIIZ-wachtwoord
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Stelt omleiding in via het netwerk door een lokale apparaatnaam te associëren met een netwerknaam. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de bestandsdelingsmodule (SHARE.EXE) is geladen.
INT 21U (0x21)
Functie 5FH (0x5F of 95), subfunctie 04H (0x04) --> Annuleer apparaatomleiding
Bellen met: AH = 5FH
AL = 04H
DS: SI = segment: offset van ASCIIZ lokaal
apparaatnaam
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze subfunctie annuleert een eerdere omleidingsaanvraag door de associatie van een lokale apparaatnaam met een netwerknaam te verwijderen. Deze functieaanroep is alleen beschikbaar wanneer Microsoft Networks actief is en de bestandsdelingsmodule zoals SHARE.EXE is geladen.
INT 21U (0x21)
Functie 60H (0x60 of 96) --> Gereserveerd
INT 21U (0x21)
Functie 61H (0x61 of 97) --> Gereserveerd
INT 21U (0x21)
Functie 62H (0x62 of 98) --> Programmasegmentprefix (PSP)-adres ophalen
Bellen met: AH = 62H
Retourneert: BX = segmentadres van programmasegment
voorvoegsel
Reacties:
Met deze functie wordt het segmentadres (alinea) van het programmasegmentprefix (PSP) voor het programma dat momenteel wordt uitgevoerd, opgehaald.
INT 21U (0x21)
Functie 64H (0x64 of 100) --> Gereserveerd
INT 21U
Functie 65H (0x65 of 101) --> Uitgebreide landinformatie ophalen
Bellen met: AH = 65H
AL = subfunctie
00H = Algemeen ophalen
Internationaliseringsinformatie
02H = Pointer naar hoofdletters halen
Tafel
04H = Verwijzing naar bestandsnaam ophalen
Hoofdlettertabel
06H = Pointer naar verzameltabel ophalen
07H = Pointer naar dubbelbyte ophalen
Tekenset (DBCS) Vector
BX = codepagina van belang (-1 = actief
CON-apparaat)
CX = lengte van de buffer om te ontvangen
informatie (moet >=5 zijn)
DX = land-ID (-1 = standaard)
ES: DI = adres van buffer om te ontvangen
informatie
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En de gevraagde gegevens worden in de buffer van het aanroepende programma geplaatst
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Hiermee verkrijgt u informatie over het opgegeven land en/of de codepagina. Raadpleeg de eerder gegeven internationalisatietabel om meer te weten te komen over informatiebytes.
INT 21U (0x21)
Functie 66H (0x66 of 102) --> Codepagina ophalen of instellen
Bellen met: AH = 66H
AL = subfunctie
01H = Codepagina ophalen
02H = Selecteer codepagina
BX = codepagina om te selecteren, als AL = 02H
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
En als aangeroepen met AL = 01H
BX = actieve codepagina
DX = standaard codepagina
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie wordt de huidige codepagina opgehaald of geselecteerd.
INT 21U (0x21)
Functie 67H (0x67 of 103) --> Aantal handgrepen instellen
Bellen met: AH = 67H
BX = aantal gewenste handgrepen
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie stelt u het maximale aantal bestanden en apparaten in dat tegelijkertijd met behulp van handles door het huidige proces kan worden geopend.
INT 21U (0x21)
Functie 68H (0x68 of 104) --> Bestand committen
Bellen met: AH = 68H
BX = handvat
Retourneert: Als de functie succesvol is
Vlag dragen = vrij
Als de functie niet succesvol is
Vlag dragen = instellen
AX = foutcode
Reacties:
Deze functie dwingt alle gegevens in interne buffers van MS DOS die gekoppeld zijn aan een opgegeven handle om fysiek naar het apparaat te worden geschreven. Als de handle verwijst naar een bestand en het bestand is gewijzigd, worden de tijd- en datumstempel en de bestandsgrootte in de rootdirectory-invoer van het bestand bijgewerkt.
INT 21U (0x21)
Functie 69H (0x69 of 105) --> Gereserveerd
INT 21U (0x21)
Functie 6AH (0x6A of 106) --> Gereserveerd
INT 21U (0x21)
Functie 6BH (0x6B of 107) --> Gereserveerd
INTERNE 21H (0x21)
Functie 6CH (0x6C of 108) --> Uitgebreide Open File
Bellen vanaf: AH = 6CH
AL = 00N
BX = open modus
Pagina(s) |
Betekenis |
0-2 |
Toegangstype
000 = Alleen lezen
001 = Alleen schrijven
010 = Lezen/schrijven |
3 |
Gereserveerd (0) |
4-6 |
Openbare modus
000 = Compatibiliteit
001 = Lezen/schrijven weigeren (alles weigeren)
010 = Schrijven weigeren
011 = Lezen weigeren
100 = Niets weigeren |
7 |
Erfenis
0 = onderliggend proces erft handle
1 = onderliggend proces erft handle niet |
8-12 |
Gereserveerd (0) |
13 |
Kritieke foutverwerking
0 = INT 24H uitvoeren
1 = Fout retourneren naar proces |
14 |
Doorschrijven
0 = schrijfbewerkingen kunnen worden gebufferd en uitgesteld
1 = fysieke schrijfbewerkingen op het moment van de aanvraag |
15 |
Gereserveerd (0) |
CX = bestandsattribuut (bits kunnen worden gecombineerd;
indien genegeerd, indien open, raadpleeg de tabel met bitsignificantie .
DX = open vlag
Pagina(s) |
Betekenis |
0-3 |
Actie als bestand bestaat
0000 = fout
0001 = bestand openen
0010 = bestand vervangen |
4-7 |
Actie als bestand niet bestaat
0000 = mislukt
0001 = bestand aanmaken |
8-15 |
Gereserveerd (0) |
DS:SI = segment:ASCIIZ padoffset
Retourneert: mAls de functie succesvol is
Vlag dragen = vrij
BIJL = handvat
CX = ondernomen actie
1 = bestand bestond en was
geopend
2 = bestand bestaat niet en
werd gecreëerd
3 = bestand bestond en was
vervangen
Als de functie faalt
Vlag dragen = instellen
AX = foutcode
Reacties:
Met deze functie wordt een bestand geopend, gemaakt of vervangen in de opgegeven of standaardmap op het opgegeven of standaardstation voor het opgegeven ASCIIZ-pad en wordt een handle geretourneerd die het programma kan gebruiken om vervolgens toegang te krijgen tot het bestand.
De functie mislukt als een element van het pad niet bestaat, als het bestand in de hoofdmap is gemaakt en de hoofdmap vol is, als het bestand is gemaakt en er al een bestand met dezelfde naam en het kenmerk alleen-lezen in de opgegeven map bestaat, of als de gebruiker niet over voldoende toegangsrechten beschikt.