欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用bios中断在屏幕上显示字符和读磁盘

程序员文章站 2024-03-24 08:37:16
...

汇编器:nasm
模拟器:bochs

写两个汇编文件,来模拟引导程序和内核程序。引导扇区负责把内核程序读到内存中(通过bios 0x13中断),读入内存后,通过判断是否读成功,在屏幕上显示不同的提示字符(通过bios 0x10中断)。

bootsect.s是512个字节,放入虚拟软盘的第一个磁道,第一个扇区,在虚拟机启动时会加载到内存0x7c00处,然后从这开始执行,它会负责把init.s加载到内存0x10000处。

bootsect.s

BOOTSEG equ 0x7c0

section .text vstart=0

jmp BOOTSEG:start

start:
    mov ax, cs
    mov ds, ax
    mov ss, ax

        mov ax, 0x0203
        mov cx, 0x0002
        mov dx, 0x0000
        mov bx, 0x1000
        mov es, bx
        xor bx, bx
        int 0x13         ;bios 0x13号中断,读磁盘

        jnc ok_load

        mov bp, failMsg
    call dispstr
        jmp $

ok_load:
        mov bp, okMsg
        call dispstr
        jmp $


dispstr:
    mov ax, 0
    mov es, ax
        mov ax, 0x1301
        mov bx, 0x004f
    mov cx, 3
        mov dx, 0x0101
        int 0x10         ;bios 0x10号中断,显示字符
        ret


okMsg: db "ok", 0
failMsg: db "fa", 0

times 510-($-$$) db 0
dw 0xaa55

init.s

org 0x90000

times 512*3 db 0xaa

github上的源码

文件夹下的文件:
利用bios中断在屏幕上显示字符和读磁盘

汇编命令,写虚拟磁盘命令都放在了Makefile中,直接执行make,然后执行bochs,开启虚拟机:
利用bios中断在屏幕上显示字符和读磁盘

直接回车:
利用bios中断在屏幕上显示字符和读磁盘

然后输入命令

b 0x0

回车,就在0x0处设断点,执行到这会停止,如果调试可以输入s单步执行或n也是单步,但遇到函数不会进去,可以直接ccontinue,直接执行,遇到断点才停。

执行结果:
利用bios中断在屏幕上显示字符和读磁盘

用命令xp /16bx 0x10000,可以看到确实将第二个扇区的内容读到了内存0x10000处:
利用bios中断在屏幕上显示字符和读磁盘