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:

inlineAssembler string ausgabe

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hitori04



Anmeldungsdatum: 21.04.2011
Beiträge: 53

BeitragVerfasst am: 26.09.2011, 01:50    Titel: inlineAssembler string ausgabe Antworten mit Zitat

Leute ich bin anscheinend zu blöd ..denn ich bekomme es nicht hin einen string über inline asm in fb auszuführen wenn ich diesen code hier

Code:

Dim As String TEXT = "dies ist ein text"

Asm
lea dx, [TEXT]
Int &h21
End Asm
sleep


dann stürtzt die anwendung sofort wieder ab mit der meldung es wurde ein problem festgestellt...vielleicht könnt ihr mir ja helfen mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2011, 13:14    Titel: Antworten mit Zitat

Hmmm,
in das dx - Register (16bit) kann keine 32bit - Adresse geladen werden.
Unter neueren Windowsversionen kann man keine DOS-Interrups aufrufen.
Nur den Int &h21 aufzurufen reicht sowieso nicht.

Freebasic hat eine eigene Ausgaberoutine (hier für Konsole):
Code:
Dim As String TEXT = "dies ist ein text"

'Asm
'lea dx, [TEXT]
'Int &h21
'End Asm

Asm
   push 1
   lea eax, [TEXT]
   push eax
   push 0
   call _fb_PrintString@12
End Asm
Sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.09.2011, 13:26    Titel: Antworten mit Zitat

Strings sind intern nicht direkt mit (null-terminierten) char arrays wie in C vergleichbar, das heißt an der Adresse der variable TEXT steht kein String, sondern ein Pointer zu einem char array und ein integer mit der Länge des arrays. An den Pointer kommt man am einfachsten mit StrPtr() ran.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2011, 13:39    Titel: Antworten mit Zitat

@Jojo
Code:
.section .data
.balign 4
_Lt_0004:   .ascii   "dies ist ein text\0"
schau dir mal den Asm-Code an, Freebasic erstellt null-terminierte Strings.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hitori04



Anmeldungsdatum: 21.04.2011
Beiträge: 53

BeitragVerfasst am: 26.09.2011, 15:52    Titel: Antworten mit Zitat

danke erstmal für die hilfe, heisst das also dass ich unter neueren windows .. wenn überhaupt mit 32-bit register arbeiten muss bzw kann ? verwundert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 26.09.2011, 16:56    Titel: Antworten mit Zitat

hitori04 hat Folgendes geschrieben:
... heisst das also dass ich unter neueren windows .. wenn überhaupt mit 32-bit register arbeiten muss bzw kann ? verwundert
ja, zumindest bei den Adressen. Bei Daten kannst du von 8bit - 128bit-Register benutzen.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.09.2011, 18:08    Titel: Antworten mit Zitat

Zitat:
schau dir mal den Asm-Code an, Freebasic erstellt null-terminierte Strings.

Nicht ganz. Genau wie CString (MFC in C++) oder std::string (C++) sind die Puffer zwar null-terminiert, aber im Puffer selbst können auch Null-Werte auftreten. Der String kann also unter anderem Länger sein als das erste Vorkommen eines Null-Chars darin vermuten lässt, und genau deswegen verwenden ja auch viele Programmierer in BASIC Strings zur Datenein- und -ausgabe.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.


Zuletzt bearbeitet von Jojo am 26.09.2011, 18:44, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 26.09.2011, 18:35    Titel: Antworten mit Zitat

Hmm, ich hoffe, ihr redet nicht aneinander vorbei, denn ihr habt beide Recht. Die Variable TEXT wird so behandelt, wie es Jojo beschreibt, während der Text "dies ist ein text" im ASM-Code nullterminiert ist. Wie Jojo schon sagt, sind Variable Texte im Speicher letztlich auch nullterminiert, können aber auch CHR(0) enthalten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 27.09.2011, 10:56    Titel: Antworten mit Zitat

@Jojo, @MOD ja ihr habt recht.

Der Text wird noch von Freebasic als String initialisiert, und kann dann "0-Stellen" enthalten. geschockt
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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