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