no bootable device 华为笔记本no boot device

主引导(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              ;字符串长度,不包括&39;&39; 
     mov ax,0x1301 
     mov bx,0x2
     int 0x10 

     jmp $ 
     message db &34;My MBR&34; 
     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=&34;hd60M.img&34;, 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窗口,但是窗口一片黑

2.切换回终端界面,可以看到已经选择了[6] 开始模拟,输入c 回车

弹出如下界面:

bachs x86-64模拟器 输出My MBR

说明已成功从我们自己制作的硬盘镜像完成主引导启动。

可能的启动失败错误:Message: No bootable device。 如下图

选择Continue继续出现下图 Boot failed: not a bootable disk

说明mbr.S主引导程序有问题。可以查看编译后的二进制文件mbr.bin的尺寸大小

如果超过512字节, 说明mbr.S源文件有问题,我的开始是mbr.S源文件中指令参数之间有多余的空格,删除后重新编译 nasm -o mbr.bin mbr.S

编译后查看mbr.bin文件大小,为512字节

重新执行dd命令后,就正常了。

dd if=mbr.bin of=/usr/local/bin/hd60M.img bs=512 count=1 conv=notrunc

免责声明:本文章由会员“张书东”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系