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
Last moify: 2024-12-23 07:55:59
Build time:2025-07-18 09:41:42
Powered By asphinx