Nein, mit QBasic geht das nicht, aber mit
QuickBasic.
Dabei gibt es gleich mehrere Möglichkeiten, ich habe aber bisher nur eine
verwendet, und zwar [span style=color:blue]CALL ABSOLUTE[/span].
Dies ist das Beispiel aus der QuickBasic-Hilfe:
- Code: Alles auswählen
CONST nASMBYTES = 14
DEFINT A-Z
DIM AsmProg(1 TO (nASMBYTES / 2))
AsmBytes:
DATA &H55 : PUSH BP Speichere Basiszeiger.
DATA &H8B, &HEC : MOV BP,SP Hole unseren eigenen.
DATA &HCD, &H11 : INT 11H F?hre ROM-BIOS-Aufruf durch.
DATA &H8B, &H5E, &H06 : MOV BX,[BP+6] Hole Argument-Adresse.
DATA &H89, &H07 : MOV [BX],AX Speichere Liste in Argument.
DATA &H5D : POP BP Stelle Basiszeiger wieder her.
DATA &HCA, &H02, &H00 : RET 2 Hole Argument vom Stapel, und
f?hre
langen R?cksprung aus.
P = VARPTR(AsmProg(1))
DEF SEG = VARSEG(AsmProg(1)) Wechsle das Segment.
RESTORE AsmBytes
FOR I = 0 TO nASMBYTES - 1
READ J
POKE (P + I), J
NEXT I
CALL ABSOLUTE(X%, VARPTR(AsmProg(1)))
DEF SEG vorheriges Segment wiederherstellen
CoProcessor = X% AND &H2
IF CoProcessor = 2 THEN
PRINT "Mathematischer Koprozessor vorhanden."
ELSE
PRINT "Kein mathematischer Koprozessor vorhanden."
END IF
END
Der Assemblercode ist im Hex-Format in den DATA-Zeilen angegeben. Dieser
Code ermittelt, ob ein math. Koprozessor im PC installiert ist. Bevor der
Code aber ausgeführt werden kann muss dieser zum Beispiel wie hier in einem
Datenfeld gespeichert werden. Danach kann der Assemblercode mit
[span style=color:blue]CALL ABSOLUTE[/span] ausgeführt werden.
Diese Möglichkeit habe ich in den Programmen KillMe, Motorama und
Anamorphosen 2.0 verwendet um die Mausposition und den Status der
Maus-Buttons abzufragen.
Eine andere bessere Möglichkeit sind die Funktionen
[span style=color:blue]CALL[/span] und [span style=color:blue]CALLS[/span]. Dazu muss vorher
der Assemblercode allerdings mit einem Assembler compiliert werden (zum
Beispiel mit MASM oder TASM). Danach kann man die OBJ-Datei beim
Compilieren des Basic-Programms einbinden. Oder man erstellt eine
Bibliothek (*.LIB) und verwendet diese mit dem Basic-Programm.
Aber mit dieser Möglichkeit habe ich mich nie beschäftigt, daher kann ich
dazu auch nichts näheres sagen.
Marwin