assembler :(.text+0x6a): relocation truncated to fit: R_386_16 against `.text:'

hi, ich habe mich gerade dran gemacht per Tutorial ein kleines os zu schreiben.
ich bin was asm angeht noch ein anfänger und arbeite mich da noch rein, heißt ich verstehe zwar den code habe aber noch probleme selber etwas in asm umzusetzen.

habe jetzt hier einen kleinen kernel (den asm teil) der in den Protected Mode umschaltet um dann in den C_kernel zu springen und Hello world auszugeben.
ohne das in den PMode springen funktioniert das auch. so wie ich den code jetzt aber aufgebaut habe bekomme ich beim zusammenlinken der kernel_asm.o und kernel_c.o diese fehlermeldung
Code:
kernel_asm.o: In function `Base':
kernel.asm:(.text+0x6a): relocation truncated to fit: R_386_16 against `.text:'

das hier ist der asm kernel

Code:
global loader ; loader für Linker sichtbar machen
extern main   ; main-Funktion des C-Kernels


FLAGS    equ 0
MAGIC    equ 0x1BADB002       ; Magicnumber - Erkennungsmerkmal für Grub
CHECKSUM equ -(MAGIC + FLAGS) ; Checksum

;---------------------------------------------------------------------------------------

NULL_Desc:
	dd	0
	dd	0

CODE_Desc:
	dw	0xFFFF
	dw	0
	db	0
	db	0x9A
	db	0xCF
	db	0

DATA_Desc:
	dw	0xFFFF
	dw	0
	db	0
	db	0x92
	db	0xCF
	db	0

gdt:
Limit	dw	0

Base	dd	0

cli
mov	eax, cs
mov	ds, ax

shl	eax, 4

mov	[CODE_Desc+2], ax
mov	[DATA_Desc+2], ax
shr	eax, 16

mov	[CODE_Desc+4], al
mov	[DATA_Desc+4], al

mov	eax, cs
shl	eax, 4
add	eax, NULL_Desc
mov	[Base], eax
mov	[Limit], WORD gdt - NULL_Desc - 1

lgdt	[gdt]

mov	eax, cr0
or	eax, 1

mov	cr0, eax

db	0xea
dw	PMODE

dw	0x8

[Bits 32]
section .text:
align 4
MultiBootHeader:
  dd MAGIC       ; Magic number
  dd FLAGS       ; Flags
  dd CHECKSUM    ; Checksum

PMODE:
	mov	WORD [CODE_Desc+2], 0
	mov	WORD [DATA_Desc+2], 0
	mov	BYTE [CODE_Desc+4], 0
	mov	BYTE [CODE_Desc+4], 0

	mov	eax, 2
	shl	eax, 3
	mov	ds, ax
	mov	es, ax
	mov	ss, ax
	mov	eax, 0
	mov	fs, ax
	mov	gs, ax
	mov	esp, 0x1FFFFF

	jmp	0x8:0x1000 + PMODE2

PMODE2:
loader:
  	push eax         ; Multiboot Magicnumber auf den Stack legen
  	push ebx         ; Adresse der Multiboot-Structure auf den Stack legen
  	call main        ; main-Funktion des C-Kernels aufrufen
  
  	cli ; falls der Kernel bis hier her kommt, CPU anhalten
  	hlt
 
Zurück
Oben