Hallo,
ich habe ein Problem mit meinem Stack
mein Betriebssystem besteht aus einem 16 Bit Assembler Bootloader und einem 16 Bit assembler Kernel (der allerdings mit ld gelinkt werden muss, damit ich später einmal C einbauen kann)
wenn ich mein Os starte läuft der Bootloader problemlos durch,
lädt den Kernel, aber dann hängt der computer sich auf,
dann hab ich das ganze noch in Bochs probiert, der sagt dazu:
"IRET: top 6 bytes of stack not within stack limits"
deswegen denke ich, ich habe den Stack falsch initalisiert
hier der Bootloader:
org 7c00h
;Stackinitalisierung
cli
mov ax, 9000h
mov ss, ax
xor sp, sp
sti
;Stackinitalisierung Ende
jmp main
readbr:
mov ah, 02h ;fest
mov al, 01h ;Anzahl
mov ch, 00h ;Spur
mov cl, 02h ;Sektor
mov dh, 00h ;Kopf
mov dl, 00h ;Laufwerksnummer
mov bx, 1000h
mov es, bx ;Segment
mov bx, 0000h ;Offset
int 13h
ret
main:
call readbr
mov ax, 1000h
push ax
mov ax, 0000h
push ax
retf
int 19h
TIMES 510-($-$$) DB 0
SIGNATURE DW 0xAA55
es macht auch keinen Unterschied wenn ich die Stackinitalisierung weglasse, immer die gleiche Fehlermeldung
hier noch der code vom Asm-Kernel, auch wenn ich nicht glaube das es an dem hängt:
global start
start:
cli
mov ax, 1000h
mov ds, ax
mov es, ax
sti
mov si, hello ;hier
int 19h
hello db "Kernel started", 13, 10, 0
TIMES 512-($-$$) DB 0
ohne die Zeile "mov si, hello" funktioniert das ganze sogar
ich seh leider auch keinen zusammenhang zwischen der Zeile und dem Stack, auf den Stack bin ich nur durch Blochs Fehlermeldung gekommen