NASM assembliert nicht richtig

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von Schneemann, 01.01.2007.

  1. #1 Schneemann, 01.01.2007
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    Hi,

    Frohes neues Jahr!

    Also ich denke hier werden wieder einige rumheulen dass ich mal Google&SuFu benutzen soll. Hab ich gemacht, suche schon seit mehreren Stunden nach einer Lösung.

    Also ich will mir einen kleinen bootbaren Kernel mit C (und natürlich ASM) schreiben. Hab ein sehr gutes Tutorial dafür gefunden. Leider ist das Tutorial nur für Windows, ich benutze Suse Linux 10.1 (KDE), deswegen benutze ich ein paar andere Programme usw.
    Also ich benutze gcc zum kopilieren des C-Kodes, NASM für das Assemblieren und ld zum Linken.
    Also ich habe mir zum assemblieren,kompilieren und linken ein shell-skript geschrieben:
    Code:
    nasm -f obj -o start.obj start.asm
    gcc -c -o kernel.obj kernel.cpp
    ld -o kernel.bin start.obj kernel.obj
    
    Ganz einfach. So tut er alles bis beim Linker, da kommt die Fehlermeldung
    Code:
    start.obj: file not recognized: File format not recognized
    
    Also start.obj wird, wie man sehen kann, aus dem ASM-Code erzeugt. So wie es scheint tut NASM mein Code nicht richtig assemblieren.

    Hier ist der C-Code
    Code:
    extern "C" void prnt(char *var);
    extern char boot;
    
    int main() {
      char *str;
      str=&boot;
      prnt(str);
      return 0;
    }
    
    Und dass hier ist der ASM-Code
    Code:
    [BITS 16]
    EXTERN _main
    start:
    
    jmp 07c0h:main_entry
    
    main_entry:
    mov ax,cs
    mov ds,ax
    mov es,ax
    cli
    mov ss,ax
    mov sp,9000h
    sti
    
    
    mov ah,02h
    mov al,1
    mov cl,2
    mov ch,0
    mov dl,0
    mov dh,0
    lea bx,[kernel]
    int 13h
    
    
    call _main
    jmp $
    
    ;##Funktion zur Stringausgabe / Begrenzungszeichen: ASCII 0
    GLOBAL _prnt
    _prnt:
    push bp
    mov bp, sp
    push ax
    push si
    mov ax, [bp + 4]
    mov si,ax
    
    prnt1:
    mov al,[si]
    cmp al,0
    JE prnte
    inc si
    mov ah,0eh
    int 10h
    jmp prnt1
    
    prnte:
    pop si
    pop ax
    pop bp
    ret
    
    GLOBAL _boot
    _boot db "Der erste C Kernel",13,10,0
    
    
    times 510-($-$$) db 0 ;wichtig: Hier die Datei mit so vielen Bytes füllen, bis es genau 510 sind
    dw 0aa55h ;Bootsignatur anhängen
    kernel:
    
    Wie bekomm ich NASM dazu eine Datei zu erzeugen die ld versteht, oder wie bekomm ich ld dazu die NASM-Datei zu verstehen?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

NASM assembliert nicht richtig

Die Seite wird geladen...

NASM assembliert nicht richtig - Ähnliche Themen

  1. fehler bei nasm

    fehler bei nasm: ich habe folgendes in der konsole eingegeben: nasm –f bin –o kernel.bin kernel.asmaber es kommt ständing dies als aussage: nasm: error: more...
  2. SCons: ASM mit NASM und GCC

    SCons: ASM mit NASM und GCC: Hi Ich bau grad mein kleines Projekt auf SCons um, da es für mich ein wenig leichter zu durchblicken ist, als das Makfile System. Nun habe ich...