wie muss ich ein asm file compilieren damit ich es mit ld linken kann?
-
hi nochmal,
also in meiner startup.asm steht das hier:
[BITS 16] extern _main %include "functions.asm" start: call warmup call _main hang: jmp hang
und ich kompiliere sie so:
nasm -f coff -o startup.o startup.asm
und dann bekomm ich das
D:\MyProjects\block-soft OS>nasm -f coff -o startup.o startup.asm functions.asm:8: COFF format does not support non-32-bit relocations startup.asm:10: COFF format does not support 16-bit relocations
was soll ich machen?
-
also ich frag jetzt mal generell: ich habe eine c datei und eine asm datei, als c-compiler verwende ich gcc und für asm verwende ich nasm. wie muss ich die beiden files jetzt kompilieren damit ich sie später mit irgendeinem linker zu ner kernel.bin linken kann?
-
guckst du hier http://www.osdev.org/developers/guide01/index.html
Unten steht das .
-
du bist gut
ich machs ja genau so
-
Du hast die falsche Nasm Version gehe mal auf diese seite und lade
Nasm für DJGPP also ciao/Suche nach Nasm/und lade Nasm Djgpp
-
ich hab Nasm 0.98... welche version brauch ich denn?
-
*push*
-
hi nochmal,
also was soll ich jetzt machen?
ich will meine asm files mit nasm kompilieren und miene c file mit gcc.
mit nasm kann ich *.obj dateien für tlink erzeugen
und mit gcc kann ich *.o dateien für ld erzeugen
kann mir jetzt einer weiterhelfen? ich will die zwei datein linken... egal wie...MFG BlockBuster
-
Mhmm soweit ich weiss dürfte das nicht gehen:
gcc erstellt soweit ich weiss nur 32 Bit Register Code und dein Source oben verwendet 16 Bit Code.
Du musst erst in den Protected Mode um mit gcc zu programmieren, ansonsten bietet sich der turbo c++ compiler von borland an der 16 / 32 Bit Code erstellen kann.
mfg
*Ich hoffe ich bringe nichts durch einander.
-
Unter welchem OS programmierst du?
Es gibt von NASM eine 16-bit und eine 32-bit und ne DJGPP-Version für Windows.
http://sourceforge.net/project/showfiles.php?group_id=6208dort findest du alles
Gruss schoetz
[ Dieser Beitrag wurde am 12.07.2002 um 08:41 Uhr von Schoetz editiert. ]
-
ich hab jetzt tcc 2.01... ist das ausreichend oder ist das zu veraltet
?
-
hi nochmal,
also hab gleich ein erstes problem:
das steht in meiner keyboard.c/*---------------------------------------------------*/ int getch(void) { int buf; asm{ mov ah, 00h int 16h mov buf, al } return buf; } /*---------------------------------------------------*/
und wenn ich versuche es zu kompilieren dann bekomm ich das:
(so kompiliere ich es: "tcc -c -r- -mt keyboard.c")Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International keyboard.c: Warning keyboard.c 6: Restarting compile using assembly in function getch Error keyboard.c 7: Undefined symbol 'mov' in function getch Warning keyboard.c 7: Code has no effect in function getch Error keyboard.c 7: Statement missing ; in function getch Error keyboard.c 12: Declaration syntax error Error keyboard.c 13: Declaration syntax error *** 4 errors in Compile ***
-
Sieht wie der Source von Milos aus
Wenn dem so ist, der Programmierer von Milos verwendete Turbo C++.
mfg (vielleicht hilft es ja weiter, sorry wenn nicht.)
-
stimmt
war ein wenig code von milos *g*
also es funzt jetzt... bei tcc 2.01 muss man inline asm so verwenden:asm mov ....
asm mov ....
asm int ...
asm shl ....
etc.MFG BLockBuster