前言:环境介绍
电脑:Macbook Air 2014年早期版
系统:OS X 10.10.3
虚拟机:由于在Mac上编译Bochs一直不通过,原因在sourceforge上有说:sourceforge.net/p/bochs/bugs/1344 /1360,这两个地址说他们的程序员没有开发mac下的,所以会编译不通过。我不想多折腾,用VirtualBox,同时也是免费的。去官网下载VirtualBox,双击安装就行。同时,VirtualBox支持调试,在网上搜也有很多关于调试的文章,这里不贴地址。
#启动虚拟机调试的常见命令
VirtualBox --startvm /path_of_virtualmachine.vbox --debug
源码获取:作者在书的最后给出了源码的地址,如果买了书的同学可以去下载。
生成img文件:书中使用的是Bochs自带的bximage,由于我们没有编译成功,使用dd命令也是非常的方便
#生成一块1.44M空软盘命令。
dd if=/dev/zero of=os.img bs=512 count=2880 conv=notrunc
挂载img文件:在Linux可以使用mount命令, 但是在mac下需要-t选项,一直搞不清楚FAT12对应的代号,可能没有,后来发现了这么一个命令
#挂载img文件
hdiutil mount os.img
#命令会有输出,将文件挂载在哪个位置,一般都是在/Volumes/文件夹下
hdiutil unmount /Volumes/path
Dos下进入不同的盘:
#直接输入盘符加:号
B:
第一章:一个引导程序
最开始介绍了一个是多行的代码,用于引导软盘进入系统
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
对于上面的代码,不做过多的描述,第一行是跳转到7c00处,将控制权移交给系统,不再是BIOS,接着初始化几个寄存器之后调用字符显示函数,然后进入死循环。最后是填充数据,写入结束标志。
讲述一些NASM汇编中的规则,更详细内容去看官网手册:
对变量加[],取值,不加表示地址;
$:当前行被汇编后的地址
$$:当前段section被汇编之后的起始地址。
好的,到现在,如果你和我一样的系统,一样的硬件,你应该已经全部搞定书上的操作实例了。
那么接下来进入保护模式。
时间: 2024-10-10 20:12:52