3.显示字符串
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