![]() |
Wert einer Variablen in ASM ausgeben, String zusammensetzen
Wie man eine konstante Zeichenfolge in ASM ausgiebt weiß, habe ich hier
![]()
Code:
Ich bin davon ausgegangen, dass das dx Register für die Ausgabe zuständig ist, deswegen das Verschieben des Ergebnisses nach dx. mov ah, 9h ist wohl für die Ausgabe auf dem Bildschirm verantwortlich.
code segment
Start: mov ax, 5 add ax, 2 mov dx, ax mov ah, 9h int 21h mov ax, 4C00h int 21h code ends end Start Des weiteren wollte ich wissen, wie man Zeichenketten verbindet, um vor und / oder nach dem Ergebnis noch Text auszugeben. |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Deine Fragen haben ja weniger mit Assembler zu tun, eher mit MS-DOS Programmierung.
Wenn du mich ganz lieb bittest dann stiefele ich mal in den Keller und suche dort mein MS-DOS Programmierhandbuch. Darin sind die Int21/15 Aufrufe dokumentiert. Im Kopf kann man so was nach 10 Jahren nicht mehr haben. Zum Zusammenfügen von Strings wird meistens ein globaler vordeklarierter Speicherbereich im Datensegemt benutzt, z.B. 512 Zeichen lang. Ansonsten muß man mit einem Speichermanager anfangen. Für kleinere PChars geht auch der Stack. Dazu wird mit ADD ESP,x und SUB ESP,x Speicher "alloziert". Gruß Hagen |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
So, bin gestiefelt, und habe meine alten Bücher entstaubt.
Zitat:
Zitat:
|
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Moin Luckie,
wenn Du weitere Funktionen suchst, kannst Du ja mal versuchen, ob Du auf einem Flohmarkt o.ä. ein Buch wie z.b. PC-Intern 2.0 Michael Tischer Data Becker ISBN: 3-89011-331-1 bekommst. Da dürfte eine recht vollständige Beschreibung der int 21h Aufrufe, und weiterer enthalten sein. Vielleicht wäre eine aktuellere Variante besser, da sich das genannte Buch mit DOS 4.0 beschäftigt. Die beiliegende Diskette ist übrigens im 5,25" Format ;-) [INSIDER]Bin wieder nicht mit dem Stuhl umgefallen :mrgreen:[/INSIDER] |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
:P Aber acht Minuten? Entweder langer Weg oder großer Keller.
Dank dir erstmal, aber diese Interrupts stehen in meinem Assembler Buch auch drin. Aber mit deinem Beispiel gibst du ja wieder eine konstante Zeichenkette aus. Oder meinst du jetzt, ich soll mir eine Variable definieren, den Inhalt des Registers darein kopieren und die Variable dann wie eine konstante Zeichenkette ausgeben? Nur wie bekomme ich da das NULL-zeichen hintendran? Zeichensalat habe ich schon hinbekommen. PS: Mach mal etwas Platz für das Buch auf deinem Shreibtisch und lass es dort stehen. Jetzt wo ich Assembler endlich kompilieren kann... Im Kopf schweben mir schopn Tutorials dafür vor, denn alles was ich gefunden habe war zu schwiereig oder auf Englisch. Wird wohl nicht so der Renner werden wie mien nonVCL Tutorials aber was soll's. |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Moin Luckie,
beim int 21h Funktion 09h wird eine Zeichenkette durch $ beendet nicht durch #00. |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Und das geschieht automatisch?
Das will noch nicht so recht:
Code:
mov dummy, ax
data segment
dummy DW ? data ends code segment Start: mov ax, 5 add ax, 2 mov dummy, ax mov dx, offset dummy mov ah, 9h int 21h mov ax, 4C00h int 21h code ends end Start **Error** build.bat(12) Can't address with currently ASSUMEd segment registers |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Christian hat Recht, der PChar muß per $ abgeschlossen sein, wie blöde.
Du deklarierst: Zitat:
Zitat:
Gruß Hagen |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Das muß auch anders gehen. Ich habe es jetzt so probiert:
Code:
Bekomme aber:
data segment
dummy DW 512 dup ($) data ends code segment Start: mov ax, 5 add ax, 2 lea si, ax lea di, dx Schleife: lodsb stosb loop Schleife cmp dh, 0 je Ausgabe Ausgabe: mov dummy, ax mov dx, offset dummy mov ah, 9h int 21h mov ax, 4C00h int 21h code ends end Start lea si, ax **Error** build.bat(13) Illegal immediate lea di, dx **Error** build.bat(14) Illegal immediate loop Schleife **Error** build.bat(18) Near jump or call to different CS je Ausgabe **Error** build.bat(20) Near jump or call to different CS mov dummy, ax **Error** build.bat(22) Can't address with currently ASSUMEd segment registers |
Re: Wert einer Variablen in ASM ausgeben, String zusammenset
Zitat:
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz