Autor Thema: NASM Datei Include funktioniert nicht  (Gelesen 5254 mal)

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« 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.

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 13. May 2006, 23:45 »
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 ^^
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. May 2006, 09:43 »
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

MrBigBrain

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. May 2006, 12:15 »
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?

 

Einloggen