Autor Thema: C Kernel: andere Adresse  (Gelesen 3259 mal)

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« am: 31. March 2006, 15:15 »
Ich will nun in meinen Assemblerkernel C mit einbauen, indem ich das ganze einfach zusammenlinke, damit ich in C Funktionen aus de Assemblerteil aufrufen kann und umgekehrt

allerdings stürzt das Programm ab, ich denke ich weiß auch warum:
ich sage ld das der Code am Offset 0 anfängt im code stell ich dann noch ein dass er im Segment 1000 ist
also im endeffekt 1000:0000

das Problem ist nun, dass der C Teil aber erst 512 bytes hinter dem Assembler Teil anfängt, somit sind im C Teil alle Adressen falsch
wie kann ich die nun richtig machen?

für den C Teil müsste ich ld ja 200h als Startoffset übergeben der Assembler Teil braucht aber 0, ich muss das ganze aber zusammenlinken

ld Konfigurationsdatei:

OUTPUT_FORMAT("binary")
INPUT(askernel.o ckernel.o)
ENTRY(start)
SECTIONS
{
  .text 0x0 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}


C Teil:

__asm__ (".code16gcc\n");
int _main()
{
  return(0);
}


Assembler Teil:

[BITS 16]

extern __main
global start
start:

cli
mov ax, cs
mov ds, ax
mov es, ax
sti

mov si, m_started
call text
mov si, absatz
call text
mov si, m_c
call text
mov si, absatz
call text
call __main

ende:
jmp ende
text:
lodsb
cmp al, 00h
je text_e
mov ah, 0eh
mov bx, 0007h
int 10h
jmp text
text_e:
ret
m_started db "kernel gestartet", 13, 10, 0
m_c db "ckernel wird gestartet...", 13, 10, 0
absatz db 13, 10, 0
times 512-($-$$) db 0


EDIT:

die Bochs Fehlermeldung ist übrigens "prefetch: RIP > CS.limit"
geb ich in der ld Konfigurationsdatei statt 0 200 ein, funktioniert wie erwartet der Assemblerteil nicht

nore

  • Beiträge: 76
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 31. March 2006, 15:24 »
ist das nciht die gleiche frage wie einen thread weiter unten? dafür musst du doch nicht extra ein neues thema aufmachen oder?

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 31. March 2006, 15:31 »
eigentlich schon, aber erstmal ist das so übersichtlicher
und außerdem ist es jetzt nicht mehr das gleiche Problem wie vorher
die gesuchte org Funktion hab ich nämlich gefunden
leider half die eben auch nicht weiter und es geht jetzt nicht mehr darum eine zu finden

also im Endeffekt geht es um etwas anderes => neues Thema

 

Einloggen