环境:
-
vscode 作为编辑器用于编写代码,为了提高写程序的效率,在vscode中下载NASM插件,该插件可以提供NASM代码高亮和代码修正功能。
-
NASM汇编器,用于对写好的代码进行汇编产生COM文件 。
-
WinHex用于查看和修改二进制文件。
-
VMware Workstation 用于创建虚拟机并测试扇区引导程序。
原理
-
软盘的第一个扇区是0面0道1扇区,或者说是0头0柱1扇区,这个扇区称为主引导扇区。
-
读取的主引导扇区数据有512字节,ROM-BIOS程序将它加载到逻辑地址0x0000:0x7c00处,也就是物理地址0x07c00处,然后判断它是否有效。 一个有效的主引导扇区,其最后两字节应当是0x55和0xAA。ROM-BIOS程序首先检测这两个标志,如果主引导扇区有效,则以一个段间转移指令jmp 0x0000:0x7c00跳到那里继续执行。
步骤
创建虚拟机
在WM中选择创建新的虚拟机进入新建虚拟机向导
(1)由于要创建一个虚拟裸机,所以选择不安装操作系统
(2)由于本实验不需要安装操作系统,可以选择任意一种即将安装的操作系统,这里选择MS-DOS
(3)命名虚拟机并选择要存放虚拟机的位置
(3)点击下一步,点击自定义硬件后进入硬件设置界面
(4)点击添加,选择软盘驱动器,点击完成,就生成了软盘
注:img,flp文件都可以作为软盘映像文件,可以直接更改后缀名。
(5)在右侧“连接“ 一栏点击使用软盘映像文件,点击创建,选择一个目录,就可以创建一个软盘。这样就完成了虚拟机的创建和虚拟软盘的生成。点击关闭,然后点击完成。这时运行虚拟机会显示。
并且无法开机,这是因为软盘中没有加载引导程序。
编写程序
使用NASM语言编写,在程序最后使用如下语句将文件填充至512B
org 7c00h ;设置代码段初始偏移量为7c00h
times 510-($-$$) db 0 ;将代码结束到510B之间的字节填充为00h
db 0x55 ;设置最后两个字节为55h和AAh
db 0xAA
使用如下指令编译
nasm test7.asm -o test7.bin
使用WinHex对软盘文件进行修改
此时引导盘最后两个字节为 55 AA,符合条件。
最后开机就可以成功卡机并执行汇编程序了