一、磁碟載入程式(2)
阿新 • • 發佈:2019-01-24
一、簡單的磁碟載入程式
簡單的說明:計算機加電後,BIOS檢查硬體等等,BIOS呼叫19號中斷載入磁碟載入程式。
以下用NASM編寫的一個簡單的磁碟載入程式。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; '$'表示當前程式碼行的地址,'$$'表示起始程式碼地址
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[bits 16] ;說明這是16位程式碼(可以不寫)
org 7c00h ;在執行時將此段程式載入到記憶體7c00h位置
jmp $ ;迴圈
times 510 - ($ - $$) 0 ;剩餘部分填充0,總大小為512,為0xaa55預留2位元組dw 0xaa55 ;結束標誌
二、真實模式與保護模式
簡單來理解,真實模式執行在16位環境下,保護模式執行在32位環境下。32位環境中定址空間可達4GB,除此之外,32位環境中可以很好的支援多工。
從執行程式的角度來理解兩種模式:
1、真實模式
真實模式下計算地址方式是通過“16位段地址(暫存器中)*16h+偏移”來實現的。
例如指令的定址:CS*16h + IP
2、保護模式
保護模式下計算地址的方式是通過“GDT中儲存的段地址*16h+偏移”來實現的。32位模式下,16位的段地址被用來尋找GDT的位置。
例如指令的定址:CS-->GDT程式碼段位置*16h + IP
解釋一下GDT(Global Descriptor Table),看一下他的結構:
從表中可以看出,GDT首先是一個數組結構,每一個條目儲存了段的資訊。下面就可以來理解保護模式下如何通過描述符表來進行地址計算了:
以上是真實模式向保護模式轉換的基本原理。