AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wert einer Variablen in ASM ausgeben, String zusammensetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Wert einer Variablen in ASM ausgeben, String zusammensetzen

Ein Thema von Luckie · begonnen am 10. Okt 2003 · letzter Beitrag vom 11. Okt 2003
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Wert einer Variablen in ASM ausgeben, String zusammensetzen

  Alt 10. Okt 2003, 06:27
Wie man eine konstante Zeichenfolge in ASM ausgiebt weiß, habe ich hier http://www.delphipraxis.net/internal...ct.php?t=11276 gelernt. Nun wollte ich das Ergebnis einer Addition ausgeben, dochleider schweigt sich darüber mein ASM Buch aus. Meine Versuche sind bisher gescheitert:
Code:
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
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.

Des weiteren wollte ich wissen, wie man Zeichenketten verbindet, um vor und / oder nach dem Ergebnis noch Text auszugeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 11:08
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
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 11:16
So, bin gestiefelt, und habe meine alten Bücher entstaubt.

Zitat:
Display String Int21/09h

AH = 09h
DSX = PChar
INT21

Terminate Process Int21/04Ch

AH = 4Ch
AL = Returncode
INT21
D.h.

Zitat:

Message DB "Test",0

MOV AH,09h
LDS DX,Message
INT 21h
Gruß Hagen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 12:57
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 [/INSIDER]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 13:00
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 13:03
Moin Luckie,

beim int 21h Funktion 09h wird eine Zeichenkette durch $ beendet nicht durch #00.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 13:24
Und das geschieht automatisch?

Das will noch nicht so recht:
Code:
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
mov dummy, ax
**Error** build.bat(12) Can't address with currently ASSUMEd segment registers
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 13:40
Christian hat Recht, der PChar muß per $ abgeschlossen sein, wie blöde.

Du deklarierst:
Zitat:

SEG DATA
TempSpace '$' dup(512)
ENDSEG


StrLCat(TempSpace, Source, 511)
StrLCat(TempSpace, '$', 512)

LDS DX,TempSpace
MOV AH,9h
INT 21h

StrCat(), StrLCat() siehe SysUtils.pas

Zitat:
Aber acht Minuten?
Für dich tue ich doch alles


Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 14:15
Das muß auch anders gehen. Ich habe es jetzt so probiert:
Code:
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
Bekomme aber:
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
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Wert einer Variablen in ASM ausgeben, String zusammenset

  Alt 10. Okt 2003, 14:43
Zitat:
mov ax, 5
add ax, 2

lea si, ax
lea di, dx
Was soll das bewirken ? Du versuchst in SI die Adresse CS:$7 zu laden ?

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz