自製作業系統,如果每次都用物理機除錯,未免太慢了,《30天自製作業系統》裡使用的pc模擬器qemu軟體,但是實際上,使用虛擬機器是乙個很不錯的選擇,功能強大,除錯方便。
以下實現乙個簡單的hello world用例,**來自《30天自製作業系統》。
; hello-os
; tab=4
org 0x7c00
; 指明程式裝載位址
; 標準fat12格式軟盤專用的** stand fat12 format floppy code
jmp entry
db 0x90
db "helloipl"
; 啟動扇區名稱,必須是8位元組的,不滿8位元組就用0填滿
dw 512
; 每個扇區(sector)大小(必須512位元組)
db 1
; 簇(cluster)大小(必須為1個扇區)
dw 1
; fat起始位置(一般為第乙個扇區)
db 2
; fat個數(必須為2)
dw 224
; 根目錄大小(一般為224項)
dw 2880
; 該磁碟大小(必須為2880扇區1440*1024/512)軟盤大小固定為1440k
db 0xf0
; 磁碟型別(必須為0xf0)
dw 9
; fat的長度(必須為9個扇區)
dw 18
; 乙個磁軌(track)有幾個扇區(必須為18)
dw 2
; 磁頭數(必須為2)
dd 0
; 不分割槽,必須為0
dd 2880
; 重寫一次磁碟大小
db 0,0,0x29
; 意義不明(固定)
dd 0xffffffff
; (可能是)卷標號碼
db "hello-os "
; 磁碟的名稱(必須為11位元組,不足填空格)
db "fat12 "
; 磁碟格式名稱(必須是8位元組,不足填空格)
resb 18
; 先空出18位元組
;程式主體
entry:
mov ax,0
; 初始化暫存器
mov ss,ax ;
mov sp,0x7c00
mov ex,ax
mov es,ax
mov si,msg
putloop:
mov al,[si]
add si,1
cmp al,0
je fin
;這段**用來顯示乙個字元
mov ah,0x0e
; 顯示乙個文字
mov bx,15
; 指定字元顏色
int 0x10
; 呼叫顯示卡bios
;迴圈jmp putloop
fin:
hal ; 讓cpu停止,等待指令
jmp fin ; 無限迴圈
msg:
db 0x0a,0x0a
; 換行兩次
db "hello world!"
db 0x0a
db 0
resb 0x7dfe-$ ; 用$可以提高程式健壯性 程式是從0x7c00開始的
db 0x55, 0xaa
; 軟盤的第乙個512扇區的最後兩個位元組必須是0x55aa,0x55aa代表這是乙個啟動程式
編譯完成之後,生成.img檔案。這個過程可以參考《30天自製作業系統》。如果是物理機,則需要把該映象檔案燒到軟碟機上,但是現在很少有軟碟機了。
在virtualbox裡新建乙個虛擬機器,安裝的作業系統選擇other,並且不建立虛擬盤(後續手動載入軟碟機)。
然後載入剛剛生成的img檔案,ide控制器可以刪除,因為暫時用的是軟碟機啟動。
啟動該虛擬機器,就可以看到helloworld字樣了。
VirtualBox 使用技巧
一。virtualbox 的快捷鍵 virtualbox 預設的 host 鍵是right ctrl host 鍵可以點選 oracle vm virtualbox 管理器的左上角 管理 全域性設定 熱鍵 重新設定。控制 host i 禁止自動捕獲滑鼠 m host del 傳送 ctrl alt ...
利用virtualbox的虛擬串列埠除錯核心
2012 04 04 23 44 00 標籤 分類 linux sunvirtualbox的串列埠功能提供的很是強大,即便你的主機沒有串列埠,你依然可以利用兩個virtualbox的虛擬機器來除錯你的核心.步驟1,除錯機將串列埠設定成host pipe,然後選中建立,名字取為類似這樣的東西 wind...
Virtualbox使用問題彙總
4.如何在虛擬系統中使用u盤 確保u盤已經在真實系統上啟用,再在 設定 usb裝置 中,勾選 啟用usb控制器 和 啟用 usb 2.0 ehci 控制器 後,最後在同乙個頁面新增 usb篩選器 時就可以在列表中發現u盤驅動的英文標識 選擇並加入 usb裝置篩選器 列表中即可,該列表就相當於乙個白名...