Hello world in a mbr
This commit is contained in:
parent
bad25e4013
commit
b2610491c7
@ -6,6 +6,14 @@ Build with
|
||||
Run with
|
||||
qemu-system-x86_64 -boot a -fda mbr
|
||||
|
||||
Debug with
|
||||
qemu-system-x86_64 -boot a -fda mbr -s -S
|
||||
gdb
|
||||
target remote localhost:1234
|
||||
layout asm
|
||||
b *0x7c00
|
||||
c
|
||||
|
||||
== Bios Memory ==
|
||||
|
||||
0x0 - 0x03FF ;IVT
|
||||
|
71
mbr.asm
71
mbr.asm
@ -1,7 +1,74 @@
|
||||
bits 16 ; mode 16bits
|
||||
org 0x7C00 ; mbr ae loaded at 0x7C00
|
||||
mov al, 41h ; put 'A' in al
|
||||
mov ah, 0eh ; we want to call function 09h (Write Character and Attribute at Cursor) from interupt 10h
|
||||
|
||||
jmp boot
|
||||
|
||||
display_enable:
|
||||
push bp
|
||||
mov bp, sp
|
||||
mov ah, 0h ; 00h Set Video Mode
|
||||
mov al, 07h ; Txt, monochrome, 80x25
|
||||
|
||||
int 10h
|
||||
|
||||
mov sp, bp
|
||||
pop bp
|
||||
ret
|
||||
|
||||
print:
|
||||
push bp
|
||||
mov bp, sp
|
||||
mov si, [bp + 4]; put first function arg in si. sp is stask pointer
|
||||
.loop:
|
||||
lodsb ; load si content into al then inc si
|
||||
cmp al, 0;
|
||||
je .end
|
||||
|
||||
mov ah, 0eh
|
||||
mov bx, 0
|
||||
int 10h
|
||||
|
||||
jmp .loop
|
||||
|
||||
.end:
|
||||
mov sp, bp
|
||||
pop bp
|
||||
ret
|
||||
|
||||
println:
|
||||
push bp
|
||||
mov bp, sp
|
||||
push word [bp + 4]
|
||||
call print
|
||||
add sp, 2
|
||||
|
||||
mov ah, 03h ; read cursor position
|
||||
int 10h ; row number in dh. Col in dl
|
||||
|
||||
inc dh ; goto next line
|
||||
mov dl, 0
|
||||
|
||||
mov ah, 02h ; Set Cursor Position
|
||||
int 10h
|
||||
mov sp, bp
|
||||
pop bp
|
||||
ret
|
||||
|
||||
hello db 'Hello world', 0
|
||||
name db 'This is a name', 0
|
||||
|
||||
boot:
|
||||
sti ; enable virtual interupts
|
||||
|
||||
call display_enable
|
||||
|
||||
push hello
|
||||
call println
|
||||
add sp, 2
|
||||
|
||||
push name
|
||||
call println
|
||||
add sp, 2
|
||||
|
||||
times 510 - ($ - $$) db 0 ; fill up to 510 with 0
|
||||
dw 0xAA55 ; MBR magic number
|
||||
|
Loading…
Reference in New Issue
Block a user