程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> nasm完成的用vmware運轉自做的linux啟動盤的引導代碼

nasm完成的用vmware運轉自做的linux啟動盤的引導代碼

編輯:更多關於編程

nasm完成的用vmware運轉自做的linux啟動盤的引導代碼。本站提示廣大學習愛好者:(nasm完成的用vmware運轉自做的linux啟動盤的引導代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是nasm完成的用vmware運轉自做的linux啟動盤的引導代碼正文


當計算機電源被翻開後,它會先停止加電自檢(POST),然後尋覓啟動盤,假如是選擇從軟盤啟動,計算機就會查找軟盤的0面0磁道1扇區,假如發現它以0xAA55完畢,則BIOS以為它是一個引導扇區,然後BIOS就會把引導扇區的前512字節的引導代碼拷貝到內存的0000:7c00處並將控制器徹底交給這段引導代碼。

復雜的引導代碼如下所示:


org 07c00h ;通知編譯器加載到07c00h處

mov ax, cs
mov ds, ax
mov es, ax

call DispStr ;調用顯示字符串函數

jmp $; 有限循環

DispStr:
mov ax, BootMessge
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessge: db "hello, OS world!"
times 510 - ($ - $$) db 0
dw 0aa55h


這段代碼時用nasm寫的,它相似於masm的言語。org 07c00h命令就是將命令前面的代碼中的偏移地址都加上07c00h,這樣順序就相當於在0000:7c00出執行了。按書中所講的,用命令nasm bootsector.asm -o boot.bin生成引導代碼boot.bin,然後將boot.bin寫入軟盤的0面0磁道1扇區就可以了。問題就來了,我沒有軟盤怎樣搞,不過在wmware虛擬機中貌似可以用軟盤的映像文件來啟動,所以就想到自己制造一個映像文件來替代軟盤來作為啟動盤,不過怎樣創立這個映像文件呢?

以前記得用linux下的dd命令做過linux的啟動盤,dd應該是可以制造的,於是在網上找了下dd制造映像文件,果真是可以的,制造辦法如下:

1 先制造一個空的軟盤映像文件diska.img(1.44Mb的軟盤映像文件):

dd if=/dev/zero of=diska.img bs=512 count=2880

2 制造一個包括boot.bin的映像文件boot.img:

dd if=boot.bin of=boot.img bs=512 count=1

3 將diska.img中1個扇區前面的數據拷貝到boot.img的前面

dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879

這樣就做成了一個大小為1.44Mb的包括引導代碼的映像文件。

前面的事就好辦了,直接在wmware創立一個空的虛擬機,在設置中將Floppy的途徑設置為下面制造的引導扇區的途徑就ok了,如下圖那樣:

設置Floppy銜接,斷開CD/DVD銜接,啟動虛擬機就可以看到上面的畫面了:

 

總結:這個小的代碼的編寫和運轉還是能讓自己對零碎啟動有一個更深的看法,不過有個不懂的就是怎樣用ISO鏡像文件啟動,怎樣將引導代碼寫入ISO鏡像文件,仍然沒有找到很好的辦法處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved