5 再探保護模式

2021-08-29 03:54:16 字數 2656 閱讀 6420

參考:

學習於網易雲課堂:linux作業系統, 構建自己的核心,講師:coding迪斯尼

%include "pm.inc"

org 0x9000

jmp label_begin

[section .gdt]

; 段基址 段長度 屬性

label_gdt: descriptor 0, 0, 0

label_desc_code32: descriptor 0, segcode32len - 1, da_c + da_32

label_desc_video: descriptor 0b8000h, 0ffffh, da_drw

label_desc_5m: descriptor 0500000h, 0ffffh, da_drw

gdtlen equ $ - label_gdt

gdtptr dw gdtlen - 1

dd 0

selectorcode32 equ label_desc_code32 - label_gdt

selectorvideo equ label_desc_video - label_gdt

selector5m equ label_desc_5m - label_gdt

[section .s16]

[bits 16]

label_begin:

mov ax, cs

mov ds, ax

mov es, ax

mov ss, ax

mov sp, 0100h

xor eax, eax

mov ax, cs

shl eax, 4

add eax, label_seg_code32

mov word [label_desc_code32 + 2], ax

shr eax, 16

mov byte [label_desc_code32 + 4], al

mov byte [label_desc_code32 + 7], ah

xor eax, eax

mov ax, ds

shl eax, 4

add eax, label_gdt

mov dword [gdtptr + 2], eax

lgdt [gdtptr]

cli ;關中斷

in al, 92h ;以下**啟動進入保護模式

or al, 00000010b

out 92h, al

mov eax, cr0

or eax , 1

mov cr0, eax

jmp dword selectorcode32: 0

[section .s32]

[bits 32]

label_seg_code32:

mov ax, selectorvideo ;gs指向視訊記憶體描述符

mov gs, ax

mov si, msg

mov ax, selector5m ;用 es 指向5m記憶體描述符

mov es, ax

mov edi, 0

write_msg_to_5m: ;將si指向的字元寫到5m記憶體處,也就是把字串儲存到0500000開始的記憶體

cmp byte [si], 0

je prepare_to_show_char

mov al, [si]

mov [es:edi], al

add edi, 1

add si, 1

jmp write_msg_to_5m

prepare_to_show_char:

mov ebx, 10

mov ecx, 2

mov si, 0

showchar:

mov edi, (80*11)

add edi, ebx

mov eax, edi

mul ecx

mov edi, eax

mov ah, 0ch

mov al, [es:si] ;從5m處開始讀字元

cmp al, 0

je end

add ebx,1

add si, 1

mov [gs:edi], ax ;視訊記憶體從label_desc_video開始

jmp showchar

end:

jmp $

msg:

db "5m memory", 0

segcode32len equ $ - label_seg_code32

進入保護模式

本文為 每個描述符佔8位元組,下圖中,上面位高32位,下面為低32位 disk boot ata channel 0 first hd cd on channel 0 type of disk image這個選項是vpc,我用2.6.2配置時選vpc無法啟動,得選flat才可以,2.6.0貌似選vp...

進入保護模式

以下圖2,圖4和圖5截自intel手冊 每個描述符佔8位元組,下圖中,上面位高32位,下面為低32位 disk boot ata channel 0 first hd cd on channel 0 type of disk image這個選項是vpc,我用2.6.2配置時選vpc無法啟動,得選fl...

保護模式小結

在gdt ldt以及idt中,每乙個描述符都有自己的界限和屬性等內容,是對描述符所描述物件的一種限定和保護 分頁機制中的pde和pte都含有r w以及u s位,提供了頁級保護 頁式儲存的使用使應用程式使用的是線性空間而不是實體地址,於是物理記憶體被保護起來 中斷不再像是模式下一樣使用,也提供特權檢驗...