Ich verstehe nicht, wie man verwenden Sie Interrupt 21, AH=0ah
Meine Informationen kommen aus hier. Die Zuordnung fragt nach einem Programm zum Lesen von in nicht mehr als 20 Zeichen, konvertiert diese Zeichen in Großbuchstaben, und dann druckt die Eingabe als Hauptstädte.
Ich habe keine Ahnung, wie access die Eingabe von int21/AH=0ah. Ich kann mich wirklich nicht Fragen, eine präzisere Frage, es sei denn, ich verstehe, was oben gelinkt ist. Kann sich das jemand erklären? Auch ich bin mit TASM wenn das macht keinen Unterschied. Auch Teste ich diese auf freedos.
UPDATE1:
Okay, danke für deine Hilfe, ich glaube ich verstehe, wie die interrupt-Anforderungen eingerichtet werden und verhält.
Setup:
Ich habe bestimmt eine ds:dx wo ich will, diesen Puffer zu existieren
Habe ich ds:dx auf 20 (setzt die maximale Anzahl von Zeichen in den Puffer)
Habe ich ds:dx+1 bis 0 (von denen ich denke, dass das irgendwie einstellen einer Mindestanzahl von Zeichen zu Lesen, in)
Eigentlich call int21/AH=0ah, die gehen auf ds:dx und interpretieren Sie die preset-bytes. Es unterbricht das Programm, wenn es auf eine Eingabe wartet,
int21/AH=0ah füllen von ds:dx+2+n mit meinem input (wo n ist die Anzahl der Zeichen, die Eingabe, einschließlich '\r')
Meine Frage ist jetzt, wie mache ich das. Ich hab gerade geschaut, die durch die x86-Assembler-Referenz wieder, aber nicht in der Lage etwas zu finden, die hilfreich noch.
Code habe ich so weit
assume cs:code,ds:code
code segment
start:
mov ax,code ;moves code segment into reg AX
mov ds,ax ;makes ds point to code segment
mov ah,0ah
int 21h
mov ax,1234h ;breakpoint
mov ah,9
mov dx,offset message
int 21h
endNow:
;;;;;;;;;;ends program;;;;;;;;;;
mov ah,0 ;terminate program
int 21h ;program ends
message db 'Hello world!!!',13,10,'$'
code ends
end start
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass DOS-Funktion ruft einen Puffer mit Benutzereingaben. Sehen Sie diese Tabelle. Es scheint, dass das Programm mit, dass die Aufforderung zum innehalten Ausführung warten für den Benutzer zum fortsetzen des Programm.
Edit: ich Las die Frage. Ich dachte, Sie waren nur zu Fragen, was die Funktion aufrufen, haben in Ihrer angegebenen Quelle. Wenn Sie Lesen möchten, input von nicht mehr als 20 Zeichen, müssen Sie zuerst den Speicher um es zu speichern. Fügen Sie so etwas wie dieses:
Dann füllen Sie den Puffer:
Konvertieren in Großbuchstaben ist, bleibt dem Leser selbst überlassen.
mov dx, offset buffer
stattmov dx, offset bufferSize
? und warum tut es das display Müll Wert auf den ersten 2 Byte ? heißt das, wenn ich Lesen muss 9 Zeichen ( inklusive string-Abschlusszeichen ) hätte ich hinzufügen 2 Zeichen mehr ( die ersten 2 Müll-Werte ) 9 + 2 = 11 bytes ?Dass die Beschreibung sagt, stellen Sie die Adresse eines Puffers, in
ds:dx
vor dem Aufruf der interrupt. Der interrupt wird, dann füllen sich die Puffer mit den Zeichen, die er liest.Vor dem Aufruf der interrupt das erste byte des Puffers, wie viele Zeichen in den Puffer, oder 20 in Ihrem Fall. Ich verstehe nicht die Beschreibung des zweiten byte des Puffers (bei der Eingabe der interrupt), so würde ich setzen Sie ihn auf null. Auf dem Rückweg byte wird Ihnen sagen, wie viele Zeichen der Eingabe gelesen wurden und in die Zwischenablage kopiert.
ds
ist die segment-register;dx
ist der offset. Und das tun Sie nicht "finden" den Puffer; Sie sorgen der Puffer durch die Einstellungds
unddx
zu zeigen, um es vor dem Aufruf der interrupt. (Sie müssen auch die ersten beiden bytes im Puffer vor dem Aufruf der interrupt. Die Puffer-und seine ersten zwei bytes -- sind die Eingänge der interrupt.) – Nemo 11 Minuten vor