bochs 十分钟完成第一个操作系统

bochs 十分钟完成第一个操作系统

准备软盘镜像

在这里插入图片描述
这里的软盘镜像名称为 a,img 和 .bochsrc 中配置相匹配

汇编代码

创建文件 boot.asm

org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0 (BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510 - ($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志

编译运行

 nasm boot.asm  -o boot.bin
 # 将编译结果装入软盘镜像
 dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
 # 运行
 ./bochs -qf .bochsrc

在运行起来的命令行中 按下 c 运行。

在这里插入图片描述
在这里插入图片描述

引导扇区

刚刚完成的只是一端引导扇区
当计算机电源打开是会先进行加电自检POST,然后寻找启动盘。如果从软盘启动,计算机会检查软盘的 0面0磁道1扇区,如果是以0xAA55结束,则BIOS认为它是一个引导扇区。应包括512字节的执行码。
一旦BIOS发现了引导扇区,就会将这512字节的内容装载到内存地址0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段引导代码。到此为止,计算机不再由BIOS中固有的程序来控制,而变成由操作系统的一部分来控制。
代码的第一行会出现“org0x7c00”这样的代码。没错,这行代码就是告诉编译器,将来我们的这段程序要被加载到内存偏移地址0x7c00处。

猜你喜欢

转载自blog.csdn.net/greatcoder/article/details/128593273