Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zeichenketten(variabler Länge) & ASM

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 19.02.2008, 13:57    Titel: Zeichenketten(variabler Länge) & ASM Antworten mit Zitat

Hallo!

Ich hätte ein paar Fragen zum Thema Zeichenketten & ASM:
- Wie kann man aus ASM-Funktionen Zeicheketten zurückgeben?
- Wie verwaltet QBasic (oder das OS??) Zeicheketten mit variabler Länge?
Wie kann ich solche in ASM realisieren?
Ich bin gerade dabei, einen kleinen Text-Editor in QBasic zu schreiben. Zum Abspeichern des Textes verwende ich den XMS-Speicher, auf den ich mit einer selbst Programmierten ASM-Lib zugreife.
Zum Abspeichern könnte ich ein Array mit z.B einer festen Vorgabe von 256 Zeichen pro Zeile verwenden, doch ich möchte es mit Zeichenketten variabler Länge realisieren.
- Wie wird solch ein Array abgespeichert?

LG und herzlichen Dank im Voraus,
St_W
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)


Zuletzt bearbeitet von St_W am 25.02.2008, 12:40, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 19.02.2008, 14:10    Titel: Antworten mit Zitat

Also in FB gibt es 2 Funktionen: VarPTR und StrPTR.

VarPTR liefert die Pointer auf eien Variable. Dies umfast auch den Pointer auf Feste Zeichenkette, sowie auf Datentypen wie Long, ULong, Int, UDT, usw.

StrPTR liefert den Pointer auf einen Variable Stringkette.

Der Unterschied liegt hier: Ein Fester String hat eine Definierte Länge, und benötigt keine Grösseninformationen dafüber, wie Lang der String ist.
Bei Variablen Zeichenkettenlängen sind weitere wichtige Angaben nötig, wie: Die Position im Speicher der Zeichenkette und die Grösse der Zeichenkette.

Definiert man eine Variable Zeichenkette, dann würde man mit Alloc einen Speicherbereich hohlen, in welchem man einen Pointer und eine Grösse der Zeichenkette speichert.
Anschliessend speichert man dort die Grösse 0 als Länge, und den Pointer läst man leer.

Werden nun Daten in den Speicher geschrieben, Wird ein Speicherbereich reserviert, welcher der Länge der zu speichernden Daten enthält. Dann wird der Pointer des Speicherbereichs im Informationsspeicher (header) gespeichert.

Will man nun die Informationen auslesen (den header) kann man VarPTR nutzen, um die Grösse, Potion und weitee Informationen zu erhalten.
Will man die Daten aus dem Speicher haben, muss man StrPTR nutzen. Er liest die Position des Speicherstücks aus, wo die Daten liegen, in abhängigkeit der Grösse.

Speichert man nun in diese Variable einen längeren Text, als er schon im SPeicher liegt, versucht das System den Speicherstück zu verlängert, sofern noch genügend Platz hinter dem Speicher vorhanden ist. Wenn dem Nicht der Fall ist, wird ein anderer Speicherbereich reserviert, udn die Daten dort hin verschoben. Anschliessend hängt er die restlichen Daten im Speicher an.

In der heutigen Betribssystemzeit nutzt man sogenannte Virtuelle Speicherbereiche.
Dabei wird ein Speicherstück für das Betriebssystem reserviert, wo er Speicherinformationen ablegen kann. Dadurch braucht die Speicherreservierende Funktion (Alloc) keinneues Speicherstück reservieren, sondern das Betriebssystem. Es reserviert selbstständig einen weiteren Speicher, und verlinkt diesen mit der Speichernummer, den man beim Alloc erhalten hat. Dadurch wird sich die Pointeradresse auf den Speicherbereich selbst bei änderndem Grössenänderungen des Textes im String nicht ändern. , bzw. sollte sich nicht ändern.

Ich würde dir hier einmal empfehlen dich in der WIKI schlau zu machen, dort ist es nämlich schön beschrieben.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 25.02.2008, 12:29    Titel: Antworten mit Zitat

Wie kann man das nun in Assembler realisieren?
(bin eher Assembler-Anfänger)

Ich denke die Header des Strings kann man Statisch im ".DATA"-Segment deklarieren. Ich stelle mir das so vor:

Code:

.DATA

Laenge DW ?
Segment DW ?
Offset DW ?

.CODE
;....

(TASM-Code)

Wie kann ich in Assembler dynamisch Speicher anfordern. Gibt es dafür vom OS Funktionen (Interrupts) ?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz