Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: MrBigBrain am 13. May 2006, 20:50
-
Hallo, ich habe schon die Suchfunktion benutz und auch was gefunden, aber das half mir nicht weiter.
Ich habe z.B. in der Datei Kernel.asm ein Makro "print" definiert und möchte nun in der Datei "IO.asm" darauf zugreifen, ist das möglich?
Denn wenn ich %include "kernel.asm" in "IO.asm" schreibe kommt immer:"parser: instruction expected". Wenn ich jetzt auch in der "IO.asm" die Datei Kernel.asm inkludiere steht da Cannot open Kerenl.asm und cannot open IO.asm.
Ich hoffe ihr könnt mir helfen, danke schonmal im voraus.
-
sich gegenseitig inkludieren kann durchaus zu fehlern führen, ka wies implementiert ist... und bei der fehlermeldung in IO.asm, check mal den Dateinamen inner includeanweisung ^^
-
hi
Ich nehm mal an du machst gerade mehrere fehler auf einmal.
1. includieren von asm dateien in andere asm dateien. Das kann nur zu problemem führen wenn darin quelcod enthalten ist. wenn nicht beim übersetzen, dann spähtestens beim linken, da die funktionen, Labels, und Variablen mehrfach existieren.
Lösungsvorschlag, zu jeder asm datei eine art Header datei, in der alle nach ausen sichtbaren funktionen definiert sind und macros, (nicht implementiert). In c geht das mit dem schlüsselwort extern. wie das in asm geht weiss ich nicht ( import ? ).
2. kreuzweise includieren von dateien macht generel auch probleme, a includiert b und b wieder a. der Alg der für das include zuständig ist, ist meist recht blöd und merkt sich nicht, welche datei er schon includiert hat und welche nicht ( ggf will man da ja auch so haben ) er verrent sich also und wird mit includieren nie fertig.
lösung passende Precompiler schalter setzen, damit die datei nicht ein 2. mal includiert wird. in c geht das mit
#ifndef IO_ASM
#define IO_ASM
...
#endif
ob es was vergleichbares im asm gibt weis ich nicht. ich nehms mal an.
mal kurtz schlaugemscht. schau dir mal die docu zu nasm an
http://www.ee.byu.edu/class/ee425/base/labs/nasmmanual.pdf
Seite 54 / 55 4.6 include other files
Seite 66 5.4 Importing symbols from other modules
bzw könnte das auch ein problem mit dem include selber sein, hast du auch das verzeichniss angegeben, in dem er die dateien suchen soll?
Und nochwas. ich hoffe, das in der kernel.asm nicht fuktionen als auch makros hinterlegt sind. sont passiert sowas wie unter 1 beschrieben. Hier hilft nur macros und code zu trennen.
gruss
-
Danke!!!, das mit dem includieren funktioniert jetzt, ich hab jetzt aber noch ein Problem und zwar wenn ich folgenden Code ausführe,soll das Diskettenlafuwerk eine Diskette formatieren, es wird die Meldung "Format" auf den Bildschirm geschrieben, doch mit dem Floppy Laufwerk passiert garnichts:
shell_format:
printf msg_format
mov ah, 0 ; Erstes Diskettenlaufwerk
mov dl, 0 ; Laufwerk zurücksetzen
int 13h ; int
jc shell_format ; fehler? nochmal
diskformat:
mov cx, 1 ; Cylinder=0 Sektor=0
mov dx, 0 ; erstes diskettenlaufwerk, Head=0
mov ax, ds
mov es, ax ; segment
mov bx, format_start ; offset
mov ah, 3 ; sektoren schreiben
mov al, 19 ; 19 stück
int 13h ; int
Ich werde noch verrückt dieses schei** Floppylaufwerk, hat keiner ne Idee?