Ich bin mir nicht ganz sicher, ob ich hier im richtigen Forum bin, aber mal schauen.
Ich bin gerade dabei, einen Bootsektor in asm zu codieren. Dieser funktioniert bereits und ruft anschließend folgendes programm auf:
[BITS 16] ; the bios starts out in 16-bit real mode
[ORG 0] ; Data offset = 0
jmp begin
;******************************** DATA SECTION
bootmsg db 'ySYS ver 0.01',13,10,0
rebootmsg db 'Press any key to reboot',13,10,0
;******************************** FUNCTIONS
message: ; Dump ds:si to screen.
lodsb ; load byte at ds:si into al
or al,al ; test if character is 0 (end)
jz done
mov ah,0eh ; put character
mov bx,0007 ; attribute
int 10h ; call BIOS
jmp message
done:
ret
getkey:
mov ah, 0 ; wait for key
int 016h
ret
reboot:
mov si, rebootmsg ; write message
call message
call getkey ; wait for key
db 0EAh ; jump to FFFF:0000 (reboot)
dw 0000h
dw 0FFFFh
;********************************** MAIN PROGRAM
begin:
mov ax,0x7c0 ; BIOS puts us at 0:07C00h, so set DS accordinly
mov ds,ax ; Therefore, we don't have to add 07C00h to all our
cli ; clear interrupts while we setup a stack
mov ax,0x9000 ; this seems to be the typical place for a stack
mov ss,ax
mov sp,0xffff ; let's use the whole segment. Why not? We can
*hehe*
sti ; put our interrupts back on
mov si,bootmsg ; display the startup message
call message
call reboot
Das Problem: Ich will (wie im Code ersichtlich) einen einfachen Text ausgeben. Das wäre einfach, wenn der DOS-Interrupt (21h) verfügbar wäre. Ist er aber leider nicht. Folglich muss ich mit dem BIOS-Interrupt 10h arbeiten, welcher das ganze aber ziemlich erschwert.
Man sieht im code, dass zuerst per "mov si, bootmsg" der Text im "selbsterstellten Stack" abgespeichert wird. Dann wird die Sprungmarke message aufgerufen. Eigentlich müsste das ganze funktionieren. Tut es aber nicht. Bei Booten wird das programm ganz normal abgearbeitet. Die "Funktionen" getkey und reboot funktionieren einwandfrei. Auch das wechseln in den Graphikmodus ist möglich. Der Text wird einfach nicht ausgegeben.
Irgendwer 'ne Ahnung?