Hello world in a mbr

This commit is contained in:
Mathieu Maret 2017-01-28 23:31:26 +01:00
parent bad25e4013
commit b2610491c7
2 changed files with 78 additions and 3 deletions

View File

@ -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
View File

@ -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