主引导(MBR)程序
建立 mbr.S 主引导汇编程序:引导成功后将会输出:My MBR
;主引导程序
SECTION MBR vstart=0x7c00 ;程序开始的地址
mov ax,cs ;使用cs初始化其他的寄存器
mov ds,ax ;因为是通过jmp 0:0x7c00到的MBR开始地址
mov es,ax ;所以此时的cs为0,也就是用0初始化其他寄存器
mov ss,ax ;此类的寄存器不同通过立即数赋值,采用ax中转
mov fs,ax
mov sp,0x7c00 ;初始化栈指针
;清屏利用0x10中断的0x6号功能
mov ax,0x600
mov bx,0x700
mov cx,0
mov dx,0x184f
int 0x10
;获取光标位置
mov ah,3 ;3号子功能获取光标位置
mov bh,1 ;bh寄存器存储带获取光标位置的页号,从0开始,此处填1可以看成将光标移动到最开始
int 0x10
;打印字符串
mov ax,message
mov bp,ax
mov cx,6 ;字符串长度,不包括'\0'
mov ax,0x1301
mov bx,0x2
int 0x10
jmp $
message db "My MBR"
times 510-($-$$) db 0
db 0x55,0xaa
将mbr.S 主引导汇编程序放到bochs的主目录下,通过nasm编译汇编代码,前面已经介绍过nasm和bochs的安装。
编译执行: nasm -o mbr.bin mbr.S
进入bochs目录,执行bximge
输入1 回车, 去建立硬盘镜像
根据提示进行输入,硬盘的镜像文件名为:hd60M.img,如上图
在bochs的主目录下, 修改bochsrc文件修改为:ata0-master: type=disk, path="hd60M.img", mode=flat
启动项为 disk, 如下图
下一步是把这个512字节的文件写入0盘0道0扇区执行:
dd if=mbr.bin of=/usr/local/bin/hd60M.img bs=512 count=1 conv=notrunc
模拟硬盘启动1.执行 bochs -f bochsrc 弹出Bochs x86-64 emulator窗口,但是窗口一片黑