MBR參考資料 從INT 19H開始

2021-06-27 15:10:13 字數 512 閱讀 8651

int 19h是怎麼處理啟動的? 

int 19會將mbr的512位元組裝載到記憶體0x7c00中,然後jump到0x7c00處,開始執行mbr的可執行程式(master booter),master booter最起碼需要做這些事情: 

檢測magic(signature)是否為合法值(十六進製制55 aa); 

將自己移動到其它位置(一般是0x0600),將0x7c00到0x7c00+512k的空間讓出來,以備其後將boot sector程式裝入這個位置,這樣才能和直接從軟盤直接裝入boot sector程式相一致;具體移動到什麼位置,則根據設計而定,理論上,可以移動到任何非衝突位置(即沒有被預留為其它程式所用的位置);但一般情況下,都是在0x000800至0x0a0000之間尋找一端空間存放。 

檢視分割槽表,將被設為活動的分割槽的第乙個sector裝入0x7c00的位置,正常的情況下,此sector放置的就是boot sector程式; 

最終,master booter跳轉到0x7c00的位置,開始執行boot sector。

筆記 從MBR到OS到application

下面闡述每段 的結構。1.引導 1 流程 進入保護模式 從硬碟中將os 讀入記憶體 為os將要使用的段 註冊 段描述符 跳轉到os 2 子程式 i.read hard disk 0 從硬碟讀取乙個邏輯扇區 eax 邏輯扇區號 ds ebx 目標緩衝區位址 返回 ebx ebx 512 ii.make...

從std thread id取得int值id

在寫多執行緒時,因為某些需求,需要獲得 std this thread get id 的 std thread id 型別值轉換為 unsigned int 型別值,並且與cout 在 stackoverflow 參考了很多方法後嘗試都不盡人意 最後跟入 std thread id 結構,如下 cl...

3億 int 資料 2億 int 資料 求差集

兩個大文字,每行一條int資料 3億 int 資料 2億 int 資料 求差集 原始 粗暴 辦法 1redis set 或類似方案 本地記憶體 cpu都撐不住 2持久化兩張表 sql join mysql join是兩層暴力for的效能太差,還是單執行緒的 sqlserver 三種join方式,1兩...