From 9a3dccd9701354c45f899097129e1b45f8a7cfed Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Thu, 27 Jan 2022 05:21:22 +0500 Subject: [PATCH] Save and print size --- src/x86_stage1.S | 55 ++++++++++++++++++++++++++++++++++++++++++++++-- src/x86_stage2.S | 5 +++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/x86_stage1.S b/src/x86_stage1.S index 029e799..31624f1 100644 --- a/src/x86_stage1.S +++ b/src/x86_stage1.S @@ -29,8 +29,13 @@ _start: ljmp $0, $STAGE1_ADDR(main) +.align 4 +size: .word _end - _start + disk: .byte 0 +newline: .string "\r\n" hello: .string "Hello stage 1!\r\n" +size_str: .string "Size: " main: cli @@ -44,6 +49,9 @@ main: mov %dl, STAGE1_ADDR(disk) + mov $STAGE1_ADDR(hello), %si + call print_str + mov $0x02, %ah mov $1, %al /* Sectors count */ mov $0x80, %dl /* Drive */ @@ -53,7 +61,14 @@ main: mov $STAGE2_BASE, %bx /* Address */ int $0x13 - mov $STAGE1_ADDR(hello), %si + mov $STAGE1_ADDR(size_str), %si + call print_str + + mov $STAGE2_ADDR(size), %bx + mov (%bx), %ax + call print_number + + mov $STAGE1_ADDR(newline), %si call print_str ljmp $0, $STAGE2_BASE @@ -67,7 +82,7 @@ do_ret: ret print_char: - mov $0x0E, %ah + mov $0x0e, %ah mov $0x0001, %bx int $0x10 jmp do_ret @@ -78,3 +93,39 @@ print_str: jz do_ret call print_char jmp print_str + +// AX - number +print_number: + test %ax, %ax + jnz print_number_notnull + mov $0x0e, %ah + mov $'0', %al + int $0x10 + ret + +// AX - number +print_number_notnull: + test %ax, %ax + jz do_ret + + // DX - dividend high (always zero) + // AX - dividend low + xor %dx, %dx + // BX - divisor (always 10) + mov $10, %bx + // AX - quotient + // DX - remainder + div %bx + + push %dx + call print_number_notnull + pop %dx + + mov $0x0e, %ah + mov %dl, %al + add $'0', %al + int $0x10 + + ret + +_end: diff --git a/src/x86_stage2.S b/src/x86_stage2.S index 7d13730..dc6dde4 100644 --- a/src/x86_stage2.S +++ b/src/x86_stage2.S @@ -29,6 +29,9 @@ _start: ljmp $0, $STAGE2_ADDR(main) +.align 4 +size: .word _end - _start + hello: .string "Hello stage 2!\r\n" main: @@ -55,3 +58,5 @@ print_str: jz do_ret call print_char jmp print_str + +_end: