编写boot汇编代码,
org 0x7c00
BaseOfStack equ 0x7c00
Label_Start:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,BaseOfStack
;====clear screen======
mov ax,0600h
mov bx,0700h
mov cx,0
mov dx,0184fh
int 10h
;====set focus=========
mov ax,0200h
mov bx,0000h
mov dx,0000h
int 10h
;==== display on screen : Start Booting...
mov ax,1301h
mov bx,000fh
mov dx,0000h
mov cx,10
push ax
mov ax,ds
mov es,ax
pop ax
mov bp,StartBootMessage
int 10h
ret
StartBootMessage: db "Start Boot$"
times 510-($-$$) db 0 //软盘一个扇区512字节,代码后面除去最后的两个字节都填充0
dw 0xaa55
最后的dw 0xaa55将软盘第一个扇区的最后两位标记好,使软盘可以作为启动盘.
汇编:
nasm boot.asm -o boot.bin
创建一个软盘镜像: 执行命令
bximage
选择1. Create new floppy or hard disk image
输入fd (软盘)
使用默认大小1.44M(直接回车)
然后输入输出文件名:boot.img
将引导程序写入软盘:
dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc
因为在上一篇博客中已经配好了配置文件,所以我们只需要将软盘镜像放到虚拟机根目录下就可以了
mv boot.img bochs/
进入虚拟机根目录,然后执行虚拟机
cd bochs
bochs
然后选择6,开始模拟
弹出一个窗口
在之前的终端输入c开始
由于我们就写了一点点代码,执行完了之后就开始胡乱运行了.
然后我们使用Ctrl+c来终止虚拟机,然后界面就反应过来显示出下面的界面:
这样就成功地让裸机显示出了一段文字.