diff --git a/boot16.S b/boot16.S index e5ac141..468a2ae 100644 --- a/boot16.S +++ b/boot16.S @@ -1,14 +1,39 @@ // vim: et:sw=12:ts=12:sts=12 - .code16 .global _start .text + .code16 _start: - xor %bx, %bx - mov $0x0E, %ah - mov $'A', %al - int $0x10 + mov %cs, %ax + mov %ax, %ds + + push $message + call print + add $2, %sp 1: hlt jmp 1b + +print: push %bp + mov %sp, %bp + push %bx + push %si + + xor %bx, %bx + mov 4(%bp), %si + +1: lodsb + or %al, %al + jz 2f + mov $0x0E, %ah + int $0x10 + jmp 1b + +2: pop %si + pop %bx + mov %bp, %sp + pop %bp + ret + +message: .asciz "Hello, World!"