Autor Thema: Problem mit INCLUDE...  (Gelesen 3073 mal)

bscreator

  • Gast
Gespeichert
« am: 04. September 2008, 23:22 »
Hallo OS-Coder,
hab ein kleines Problem mit der Präprozessor-Direktive "INCLUDE" von NASM. Angeblich kann man damit Dateien einbinden. Hab jetzt mal einen Testlauf gemacht mit einem kleinen Hauptprogramm "Hello.asm", das zum Ausgeben eines Strings die Funktion in "PROC.ASM" verwenden soll:

HELLO.ASM:
%include "PROC.ASM"
org 0x100
jmp start
msg db 'Hello World',13,10,0
start:
mov si,msg
call putstr
ret
PROC.ASM:
putstr:
lodsb
or al,al
jz putstr_end
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr

putstr_end:
retn

leider wird nichts ausgegeben, obwohl die putstr-Funktion stimmt. Hab schon versucht, mit dem Copy-Befehl beide zusammenzubinden zu einem File und dann auszuführen, geht auch net. Hello und Proc befinden sich im gleichen Verzeichnis.
Wo liegt der Fehler ?


kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 05. September 2008, 00:46 »
Daß dein Programm jetzt nicht mehr mit jmp start, sondern mit putstr: anfängt?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 05. September 2008, 15:06 »
glaub ich hab mich falsch ausgedrückt:
Das Hauptprogramm "HELLO.ASM" soll die in der Datei "PROC.ASM" definierte Funktion "putstr" verwenden, um den String auf den Bildschirm auszugeben.
"PROC.ASM" soll eine zentrale Datei sein, in der diese Funktion und später auch alle anderen Funktionen definiert sind.


arax

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 05. September 2008, 15:33 »
Das Problem ist noch nicht gelöst oder?

Das include wird ja mit
putstr:
lodsb
or al,al
jz putstr_end
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr

putstr_end:
retn

ersetzt, dann hast du
;---
putstr:
lodsb
or al,al
jz putstr_end
mov ah,0x0E
mov bx,0x0007
int 0x10
jmp putstr
;--
putstr_end:
retn

org 0x100
jmp start
msg db 'Hello World',13,10,0
start:
mov si,msg
call putstr
ret

und das Programm fängt mit lodsb an.

Auch als zentrale Datei muss das include wenigstens unter die Startfunktion, also nachdem von ihr weggesprungen wurde.

bscreator

  • Gast
Gespeichert
« Antwort #4 am: 05. September 2008, 16:43 »
Ach, hast ja recht.
Das kommt wohl davon, wenn man zuviel C und C++ programmiert :-D
Danke schön und könntet ihr euch noch meine Frage bzgl. Arbeitsspeicher und Adressen (ebenfalls Lowlevel-Coding) anschauen ?

 

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 05. September 2008, 22:33 »
Das kommt wohl davon, wenn man zuviel C und C++ programmiert :-D
:? In C/C++ wird es doch exakt gleich gemacht, einfach eine Datei textuell eingefügt...
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bscreator

  • Gast
Gespeichert
« Antwort #6 am: 06. September 2008, 13:47 »
Nene,
meinte, dass in C bzw. C++ die Includes am Anfang einer Datei  stehen

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 06. September 2008, 15:40 »
Die includes können in C/C++ "überall" stehen. :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen