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:

(Simples)Turboassembler Programm in FreeBasic laufbar machen

 
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
Xardas



Anmeldungsdatum: 17.09.2006
Beiträge: 23

BeitragVerfasst am: 09.10.2014, 20:48    Titel: (Simples)Turboassembler Programm in FreeBasic laufbar machen Antworten mit Zitat

Moin,

ich bastel gerade mit dem Inline Assembler von FreeBasic rum und komme ehrlich gesagt nicht sonderlich gut damit klar. Habe in letzter Zeit viel mit dem Turbo Assembler gearbeitet und wollte nun einige Assembler Teile in meine FreeBasic Programme einbinden.

Allerdings scheitert es schon bei dem kleinsten Programm:

Das Orginal. (Wie gesagt absolut simple. Ist nur ein Test)

Code:

        DOSSEG
        .MODEL SMALL
        .STACK 100H

        .DATA

        .CODE

begin:
        MOV     AH,02h
        MOV     DL,"H"
        INT     21h
     
        MOV     AH,04ch
        MOV     AL,00
        INT     21h
        END     begin


Den oberen Teil kann ich ja weglassen, weil es ja kein reines Assembler Programm ist, genauso wie die letzten Zeilen
Zitat:
MOV AH,04ch


Das mit der Groß- und Kleinschreibung habe ich in der offiziellen Hilfe auch wahrgenommen.


Zitat:

ASM
mov ah,02h
mov dl,"H"
int 21h
END ASM


Aber das Programm läuft nicht.


Zitat:

E:\Basic\toolbox\Assembler\1.asm: Assembler messages:
E:\Basic\toolbox\Assembler\1.asm:24: Error: junk `h' after expression
E:\Basic\toolbox\Assembler\1.asm:25: Error: invalid character '"' before operand 2
E:\Basic\toolbox\Assembler\1.asm:26: Error: junk `h' after expression

Results:
Compilation failed


Vielen Dank für die Hilfe zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 09.10.2014, 21:21    Titel: Antworten mit Zitat

Ich schätze einmal, FreeBASICs Inline-ASM kann mit einem Ausdruck wie 02h nichts anfangen. Hexadezimalzahlen werden in FreeBASIC mit &h02 usw. dargestellt, vermutlich ist das innerhalb eines ASM-Blocks ganz genauso.

Zu mov dl,"H" kann ich nichts sagen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Xardas



Anmeldungsdatum: 17.09.2006
Beiträge: 23

BeitragVerfasst am: 09.10.2014, 21:28    Titel: Antworten mit Zitat

Leider nicht.

wenn ich statt
Zitat:
02h
Zitat:
&02h

kompiliert er zwar und startet das Programm auch, stürzt aber beim Interrupt ab.

Und das Zeichen
Zitat:
H
kann ich ja auch als Zahl angeben, das ist nicht das Problem.

Ich habe eher den Eindruck, dass ich irgendwo einen Denkfehler habe.
Bei einigen Inline Assemblern sind auch Quelle und Ziel vertauscht, dass scheint bei FreeBasic aber nicht der Fall zu sein..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 10.10.2014, 01:35    Titel: Antworten mit Zitat

Ich hoffe mal, dir ist bewusst, was der Code tut (über Interrupt 21h mit der DOS-API sprechen) und dass das nur unter DOS überhaupt funktionieren wird. Ich wüsste jetzt spontan noch nicht mal, ob der FreeBASIC-Compiler für DOS sowas zulassen würde, aber vmtl kompilierst du ja eh für Windows, wo int 21h überhaupt nicht funktionieren kann. Du kannst unter Windows nicht einfach beliebige Interrupts erzeugen oder die Hardware direkt ansprechen!
_________________
» 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
Xardas



Anmeldungsdatum: 17.09.2006
Beiträge: 23

BeitragVerfasst am: 10.10.2014, 14:35    Titel: Antworten mit Zitat

Ich habe es mir irgendwie gedacht. Viele Seiten auf denen ich mach nach Interrupts für InlineAssembler umgesehen habe, wurde sehr oft 21h für die Bildschirmausgabe genannt (bei einem 32bit Compiler). Das hat mich etwas verwirrt. Ich dachte das aus Kompatibilitätsgründen gewisse Interrupts beibehalten wurden für die Befehlseingabe (cmd.exe) zum Beispiel.

Wenn ich unter Windows die Hardware nicht direkt ansprechen kann, macht InlineAssembler (abgesehen von einigen Geschwindigkeitsoptimierungen) doch wenig Sinn. Oder sehe ich das falsch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 10.10.2014, 17:30    Titel: Antworten mit Zitat

Zitat:
Wenn ich unter Windows die Hardware nicht direkt ansprechen kann, macht InlineAssembler (abgesehen von einigen Geschwindigkeitsoptimierungen) doch wenig Sinn. Oder sehe ich das falsch?
absolut richtig, zumal Freebasic den Basic-Quelltext gut in Assembler übersetzt.
_________________
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
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 10.10.2014, 18:27    Titel: Antworten mit Zitat

<offtopic>
Hi volta! Schön zu sehen, dass du mal wieder schreibst! grinsen
</offtopic>
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 11.10.2014, 14:43    Titel: Antworten mit Zitat

Wenn du an der Textausgabe schon deinen Assemblercode optimieren willst, machst du eh was falsch. Ernsthaft. Assembler macht wenn überhaupt nur in den "Hot Paths", also inneren Schleifen von aufwendigen Algorithmen u.Ä. Sinn, wo der Compiler keinen optimalen Code erzeugt, der Code aber verhältnismäßig oft (tausende Male die Sekunde) ausgeführt wird. Für alles Andere erzeugt auch FB selbst brauchbaren Code.
_________________
» 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
Xardas



Anmeldungsdatum: 17.09.2006
Beiträge: 23

BeitragVerfasst am: 11.10.2014, 16:28    Titel: Antworten mit Zitat

Zitat:
Wenn du an der Textausgabe schon deinen Assemblercode optimieren willst, machst du eh was falsch. Ernsthaft. Assembler macht wenn überhaupt nur in den "Hot Paths", also inneren Schleifen von aufwendigen Algorithmen u.Ä. Sinn, wo der Compiler keinen optimalen Code erzeugt, der Code aber verhältnismäßig oft (tausende Male die Sekunde) ausgeführt wird. Für alles Andere erzeugt auch FB selbst brauchbaren Code.


Es geht in dem Beispiel nicht um Sinn und Logik, sondern dient einfach als Lernbeispiel bzw als ganz simpler Test.
Und die Textausgabe war/ist für mich das einfachste Demonstrationsbeispiel für Interrupts. Und für mich persönlich schien Assembler gerade wegen seiner Hardwarebezogenen Archiktektur interessant.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 12.10.2014, 15:09    Titel: Antworten mit Zitat

Assembler ist auf einem modernen Betriebssystem nicht mehr wirklich hardwarebezogen, außer dass du halt "direkt auf der CPU" arbeitest. In einem Protected-Mode-Betriebssystem hast du keinerlei direkten Zugriff auf sonstige Hardwarekomponenten, da musst du schon direkt auf DOS o.Ä. programmieren, aber lass dir gesagt sein dass es dadurch nicht leichter wird.
_________________
» 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
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