總結下學習的內容,梳理下思路。
學習內容:啓動, 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)