安装 bochs,dd for windows,nasm,并将安装目录加入到环境变量中。
我用的bochs版本是2.6.8
1.用 bochs 中 bximage.exe 创建新的 img 文件
2.编写汇编代码并编译成二进制文件
test.asm汇编文本文件
org 0x7C00 ;主引导记录的内存地址jmp entryentry: mov ax, 0 mov ss, ax mov ds, ax mov es, ax mov si, msg ;将msg地址赋给siputLoop: mov al, [si] ;等同 mov al, byte [si] 将si地址开始的一个字节的值放入al中 add si, 1 ;si = si+1 cmp al, 0 ;al与0比较 je fin ;如上面比较相等 则跳转到fin 不相等则不跳转,执行后面命令 mov ah, 0x0e int 0x10 jmp putLoop fin: HLT ;暂停 jmp fin msg: DB 0x0a, 0x0a DB "hello,jadeshu!" ;DB 0 times 510-($-$$) db 0;填充510字节的0,$$表示编译后的起始地址 dw 0xaa55 ;表示结束,加上前面的510字节正好512字节满足条件用cmd 命令输入nasm test.asm -o test.bin 编译成二进制文件
3.将test.bin文件写入如上面第1点讲解创建的映像文件a.img内
在 cmd 中使用指令
dd if=test.bin of=a.img bs=512 count=1 conv=notrunc将test.bin写入 a.img映射文件内
如果没有dd命令,在windows下可以安装cygwin,又简单又方便使用linux命令!
4.新建一个文件bosh.src,文件名你自己可以随便命名,如下是软盘启动的配置文件[硬盘配置以#注释]:
megs:32 romimage:file=$BXSHARE/BIOS-bochs-latest vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest floppya:1_44=a.img,status=inserted#软盘映射 boot:floppy#硬盘#boot:disk#分配HD为60M,根据分配硬盘大小,cylinders, heads, spt会变化#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14#ata0-master: type=disk, mode=flat, path="boot.img", cylinders=121, heads=16, spt=63log:bochsout.txt mouse:enabled=0 keyboard: keymap=$BXSHARE/keymaps/x11-pc-de.map5.启动
在命令指示符中键入 .bochs.exe -f bosh.src
点击start按钮即可运行!
6.调试
在命令指示符中键入 .bochsdbg.exe -f bosh.src
点击start按钮即可运行!
即到第一条指令 jmp 0XF000:E05B 地址为:f000:fff0 即FFFF0 (1M的最后16字节),因为实模式下只能读取1M内存