Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: bscreator 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 ?
-
Daß dein Programm jetzt nicht mehr mit jmp start, sondern mit putstr: anfängt?
-
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.
-
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.
-
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 ?
-
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...
-
Nene,
meinte, dass in C bzw. C++ die Includes am Anfang einer Datei stehen
-
Die includes können in C/C++ "überall" stehen. :wink: