Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Xardas
Anmeldungsdatum: 17.09.2006 Beiträge: 23
|
Verfasst am: 09.10.2014, 20:48 Titel: (Simples)Turboassembler Programm in FreeBasic laufbar machen |
|
|
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
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 |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4616 Wohnort: ~/
|
Verfasst am: 09.10.2014, 21:21 Titel: |
|
|
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 |
|
|
Xardas
Anmeldungsdatum: 17.09.2006 Beiträge: 23
|
Verfasst am: 09.10.2014, 21:28 Titel: |
|
|
Leider nicht.
wenn ich statt
kompiliert er zwar und startet das Programm auch, stürzt aber beim Interrupt ab.
Und das Zeichen 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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.10.2014, 01:35 Titel: |
|
|
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 |
|
|
Xardas
Anmeldungsdatum: 17.09.2006 Beiträge: 23
|
Verfasst am: 10.10.2014, 14:35 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 10.10.2014, 17:30 Titel: |
|
|
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 |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 10.10.2014, 18:27 Titel: |
|
|
<offtopic>
Hi volta! Schön zu sehen, dass du mal wieder schreibst!
</offtopic> |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.10.2014, 14:43 Titel: |
|
|
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 |
|
|
Xardas
Anmeldungsdatum: 17.09.2006 Beiträge: 23
|
Verfasst am: 11.10.2014, 16:28 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.10.2014, 15:09 Titel: |
|
|
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 |
|
|
|