总结下学习的内容,梳理下思路。
学习内容:启动, dd命令,bochs基本用法,as86,ld86
实验:使用bochs模拟开机启动过程,熟悉常用命令。
总结:
1.机器启动到加载bootsect:
a,开机进入实模式,实模式主要特点软件可以直接访问硬件和只有20位的寻址空间
b, 计算机刚刚加电时cs=f000,ip=fff0,机器执行ffff0处的BIOS的第一条指令
c,BIOS检查计算机的硬件,加载中断向量表和中断服务程序
d,执行int 0x19中断在读取软盘第一个扇区的512个字节,复制到内存的0x07c00处
2.dd命令:这里主要用于讲boot写入引导扇区
主要应用的参数:if=输入 of=输出 bs(ibs obs)=一次读写的字节数,也是指定的一个块的大小
count=blocks 拷贝blocks的个数,块大小等于ibs指定的字节数。
skip=blocks 从输入文件开头跳过blocks个块,在复制
实验使用的命令 dd bs=32 if=boot of=a.img skip=1(备份什么的以后用的在学)
3.bochs基本用法 :
a,必备的资源:bochs执行文件,bios映像文件(BIOS-bochs-latest),vga bios映像文件(VGABIOS-lgpl-latest),引导磁盘的映像文件(a.img),配置文件
b,配置文件:主要用来寻找磁盘映像,配置模拟机器的一些信息。megs模拟内存容量,romimage,vgaromimage,floppya(1_44=a.img static=inserted(已插入。ejected未插入) )
log(日志信息)boot(启动的驱动器 =floppy)
c,启动 bochs -f bochsrc (指定配置文件)
d,用到的指令 c运行,r查看寄存器内容,b addr 设置断点
4.as86汇编
a,使用了inter语法,Linux中用来创建16位的启动引导扇区程序和初始设置程序
b,学习语法使用的程序
.global begtext .text begtext .text BOOTSECT=0X07C0 entry start ;ld86链接后执行的第一条指令 start: jmpi go, BOOTSECT ;执行后 cs=BOOTSECT go: mov ax, cs mov ds, ax mov es, ax mov [msgl+17],ah mov cx #20 mov dx, #0x1004 mov bx, #0x000c mov bp, #msgl mov ax, #0x1301 int 0x10 loopl: jmp loopl msgl: .ascii "Loading System..." .byte 13,10 .org 510 .word 0xAA55 ;引导扇区结尾必须为[510]=55,[511]=AA
c,as86 -0 -a -o boot.o boot.s ld86 -0 -s -o boot boot.o(生成的boot为MINIX格式有544b需要除去minix文件头的32b)