setup.s作為承上啟下,主要功能是cpu模式切換、載入核心**並最終跳轉到核心**。
**:
entry start
start:
;setup.s由boot.s**跳轉過來的,所以此時cs暫存器的值自動變為0x9020
;為了能訪問setup.s的資料內容,也需要重新整理ds,es暫存器為0x9020
mov ax, cs
mov ds, ax
mov es, ax
;檢查當前記憶體大小,使用bios 中斷int 0x15。該方法的缺點是:最大支援64m記憶體
;檢查結果存放在memort_size標籤對應的記憶體位址中。
mov ah, #0x88
mov al, #0x0
int 0x15
mov [memory_size], ax
;檢查硬碟chs引數,並把引數存放在hd_info標籤處
;只支援chs模式,只支援第乙個硬碟,第乙個硬碟引數存放的實體地址記錄在中斷向量0x41中,即: 0x41*4 = 0x0000:0104位址處
;源位址 ds:si = 0x0000:0104
mov ax, #0x0000
mov ds, ax
lds si, [4*0x41]
;目的位址 es:di = 0x9020:[hd_info]
mov di, #hd_info
mv cx, #0x10 ;複製長度
repmovsb
;恢復ds為0x9020
mov ax, cs
mov ds, ax
;列印load kernel....資訊
mov si, #msg
call #print_msg
;準備載入核心**,核心**從磁碟的第4個扇區開始存放
load_kernel:
;初始化 current_track and current_sector
mov al, #0x0
mov byte [current_track], al
mov al, #0x4
mov byte [current_sector], al
;讀取 kernel_sectors,這個值的大小可以在建立核心image的時候可以調整
mov al, byte [kernel_sectors]
push ax
;設定目的位址為0x1000:0000,保證當前核心檔案大小必須小於64kbytes
mov ax, #0x1000
mov es, ax
xor bx, bx
xor dx, dx
mov dl, #0x0
mov dh, #0x0
我的學習之旅 6 setup s
gdt表配置參考 linux source code setup.s,2個entry,第乙個給cs,第二個給ds gdt word 0,0,0,0 dummy word 0x3fff 64mb 4000 4096 64mb 由於在boot.s中能識別的最大記憶體為64m word 0x0000 ba...
我的深度學習的學習之旅
一 前言 二 正文 在去年的七月份,也就是19年的7月份,我參加完現在所在的研究生學校的夏令營之後,得知導師對我很感興趣,而且我也基本上可以獲得本科學校的保研資格,所以就開始接受導師的學習安排。因為我選的方向是深度學習的嵌入式應用,於是就開始了深度學習的學習之旅!並且導師告訴我,不僅要學習深度學習,...
我的程式設計學習之旅1
在學校考完試後在學校耍了兩天的遊戲就匆匆的回家了,帶了幾本c程式設計的書 c和指標 programming in c windows 程式設計 打算回家啃一啃。不過,情況幾本和以前一樣,回去先玩了幾天才開始的。最先看的是 windows 程式設計 開始還是和其他書類似,以hello world開始,...