1.以以下代码创建mbr.asm
; MBR程序,用于加载loader
LOADER_BASE equ 0x900
org 0x7c00
MBR_start:
; 现在es,cs,ss,ds,fs,gs
; r8,r9,r10,r11,r12,,r13,r14,r15,rbx,rbp均为0
mov ds,bx
mov sp,0x7c00 ; 设定栈为ss:sp=0:0x7c00
.clean_screen: ; 清除屏幕
mov ax,0x0600
mov bx,0x0700
mov cx,0
mov dx,0x184f
int 10h
.set_cursor: ; 设置光标
mov ah,0x02
mov bh,0x00 ; 页号
mov dx,0x0000 ; (DH,DL)
int 10h
.display_str: ; 显示:“MBR loader successfully!"
mov ax,0x1301 ; 光标随字符走
mov bp,Message ; 字符地址:es:bp=0:Message
mov cx,24 ; 字符串长度
mov dx,0 ; 字符打印位置
mov bl,0011b ; 字符串属性:前景青色,背景黑色
int 0x10
hlt
Message: db "MBR loader successfully!"
times 510-($-$$) db 0
dw 0xaa55
2.创建Kernel/init目录
将上面创建的mbr.asm放入`Kernel/init`目录下,以一下内容创建`makefile`:
%.bin:%.asm
nasm $*.asm -o $*.bin
mbr:mbr.bin
3.修改meOS/makefile
将meOS下的makefile修改为一下内容:
%.bin:%.asm
nasm $*.asm -o $*.bin
start:
make mbr
make bochs
.PHONY:start mbr clean
bochs:
cd image&&bochsdbg -q -f bochsrc.bxrc
mbr:
cd Kernel/init&&make mbr
dd if=Kernel/init/mbr.bin of=image/c.img bs=512 count=1
clean:
-@cd image&&erase /F /Q *.lock
-@cd Kernel/init&&erase /F /Q *.bin
其中,每次更换写入文件时,都会重写`start`的内容,目的是执行`make`后自动编译写入映像并进入Bochs
4.运行
进入meOS目录,双击`start.cmd`打开终端。输入`make`,在终端可以继续运行时,输入`c继续`运行。效果如下:
然后键入`Ctrl+c`中断模拟器,输入`q`退出Bochs
目录结构
到现在为止,meOS的目录结构如下:
– meOS
| -- makefile
| -- start .cmd //在当前目录打开终端
| -- image //bochs映像、配置文件、输出文件目录
| | -- bochsrc.bxrc
| | -- c.img
| -- Kernel
| | -- init
| | -- makefile //mbr.asm的make文件
| | -- mbr.asm