Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
hitori04
Anmeldungsdatum: 21.04.2011 Beiträge: 53
|
Verfasst am: 26.09.2011, 01:50 Titel: inlineAssembler string ausgabe |
|
|
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  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 26.09.2011, 13:14 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.09.2011, 13:26 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 26.09.2011, 13:39 Titel: |
|
|
@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 |
|
 |
hitori04
Anmeldungsdatum: 21.04.2011 Beiträge: 53
|
Verfasst am: 26.09.2011, 15:52 Titel: |
|
|
danke erstmal für die hilfe, heisst das also dass ich unter neueren windows .. wenn überhaupt mit 32-bit register arbeiten muss bzw kann ?  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 26.09.2011, 16:56 Titel: |
|
|
hitori04 hat Folgendes geschrieben: | ... heisst das also dass ich unter neueren windows .. wenn überhaupt mit 32-bit register arbeiten muss bzw kann ?  | 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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.09.2011, 18:08 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 26.09.2011, 18:35 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 27.09.2011, 10:56 Titel: |
|
|
@Jojo, @MOD ja ihr habt recht.
Der Text wird noch von Freebasic als String initialisiert, und kann dann "0-Stellen" enthalten.  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|