我的學習之旅 3 setup s

2021-06-28 08:01:16 字數 1372 閱讀 6205

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開始,...