1
Lowlevel-Coding / Stringausgabe scheitert
« am: 16. April 2005, 16:46 »
Deshalb hab ich ja auch garnix dran geändert. Das hier soll (irgendwann) mal der Kernel werden.
24. November 2024, 06:40
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
.intel_syntax noprefix
.code16
# ---------------------------------------------------
# Unser Kernel
# ---------------------------------------------------
mov ax, 0x1000 # Segmentregister updaten
mov ds, ax
mov es, ax
start:
mov si, msg
call bios_print # Schicke Bootmessage :)
mov si,msg_boot
call bios_print # Noch eine Message :D
call bios_getkey # Warte auf einen Tastendruck
jmp reboot
# -------------------------------------------------
# Funktionen und Variablen
# -------------------------------------------------
msg: .string "Welcome to StupidOS 1.0\n"
msg_boot: .string "Press any key...\n"
# Rebooten (HEX Dump).
reboot:
.byte 0x0EA
.word 0x0000
.word 0x0FFFF
die:
jmp die
.intel_syntax noprefix
.code16
.global bios_print
.global bios_getkey
# Warte auf einen Tastendruck
bios_getkey:
mov ah, 0 # Funktion 0
int 0x16 # Ausführen
ret
# Stringausgabe
bios_print:
lodsb # Byte laden
or al,al
jz bios_printd # 0-Byte? -> Ende!
mov ah,0x0E # Funktion 0x0E
mov bx,0x0007 # Atrribut-Byte
int 0x10 # schreiben
jmp bios_print # nächstes Byte
bios_printd:
ret
OUTPUT_FORMAT("binary")
SECTIONS
{
.text : {
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(1);
}
.data : {
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(1);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(1);
}
end = .; _end = .; __end = .;
}