參考:
學習於網易雲課堂: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位,提供了頁級保護 頁式儲存的使用使應用程式使用的是線性空間而不是實體地址,於是物理記憶體被保護起來 中斷不再像是模式下一樣使用,也提供特權檢驗...