[問題] 要進到保護模式前...set CR0[0] 會重開機
如題 一次問了兩個問題不好意思 後來發現上一篇抓比較舊板2的masm
就可以直接組譯了...只是.xmm這些東西不能用
今天我試著寫保護模式 不過一直失敗 已經嘗試一整天了..Orz 以下是我的code
TITLE Protect_mode_entry 進入保護模式並且驗證
.386p
.mmx
.model small, c
Real_mode SEGMENT PARA PUBLIC USE16 'CODE'
ASSUME CS:Real_mode, DS:Real_mode
EnableA20 MACRO
push ax
in al,92h
or al,00000010b
out 92h,al
pop ax
ENDM
align 4
flat32 proc near C PUBLIC
jmp code_start
GDT_Addr EQU $
GDT_Addr_Limit DW GDT_END
GDT_Addr_Base DD 0
;以上為GDT pointer
GDT_BASE EQU $
DB 8 dup(0)
SYS_DATA_SEL EQU $-GDT_BASE
DW 0FFFFh ;limit 0xFFFFF
DW 0h ;base 0
DB 0h ;base
DB 092h ;存取權限
DB 8Fh ; G=1,av=1
DB 0h
SYS_CODE_SEL EQU $-GDT_BASE
DW 0FFFFh ;limit 0xFFFFF
DW 0h ;base 0
DB 0h ;base
DB 09Eh ;存取權限
DB 08Fh ;G=1,av=1
DB 0h
GDT_END EQU $-GDT_BASE-1
code_start:
mov ax,cs
mov ds,ax
mov es,ax
xor ax,ax
xor si,si
mov ax,cs
shl eax,4
mov si,offset GDT_BASE ;bx=8
add eax,esi ;ax=10428
mov GDT_Addr_Base, eax
xor eax,eax
;把cs shl4 存進去SYS_CODE_SEL
mov si,SYS_CODE_SEL
mov ax,cs
shl eax,4
mov si,ax ;把cs比較低的16bit存起來
shr eax,16
movzx ax,al
and al,0FH
mov byte ptr ds:[SYS_CODE_SEL+GDT_BASE+4],al
mov ax,si
mov word ptr ds:[SYS_CODE_SEL+GDT_BASE+2],ax
;準備就緒 load gdt
xor esi,esi
mov si,GDT_Addr
lgdt fword ptr cs:[ebx]
;載入selector
mov ax, SYS_DATA_SEL
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
EnableA20
cli
mov eax,cr0
or eax,1
mov cr0,eax ;執行此行重開
DB 0eah
DW offset Protect_mode
DW SYS_CODE_SEL
flat32 endp
Protect_mode proc c public
mov ax,0
Protect_mode endp
Real_mode ends
end
有點長抱歉...主要就是我覺得有把GDT設定好了 而且GDTR也load了
這方面應該(?)也沒什麼問題...我用debug檢查好幾遍了 並沒有發現填錯的情況
可是set CR0[0] = 1...就會立刻重開...已經不知道該怎辦了 Orz..
這隻程式是在pure dos底下跑的...7.1跟6都會重開 應該非dos版本的問題
請問除了1.設定好GDT以及GDT的pointer給LGDT指令吃
2.set CR0
3.far jmp
還有什麼需要注意的地方嘛? 主要是卡在步驟二會馬上重開機
所以我想只有可能是步驟二之前的問題...可是我自己對照網路上的code又覺得自己
沒做錯...總之就是一整個沒辦法了..Orz
懇請板友可以幫我解惑QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.193.223
推
10/04 21:36, , 1F
10/04 21:36, 1F
→
10/04 21:43, , 2F
10/04 21:43, 2F
→
10/04 21:50, , 3F
10/04 21:50, 3F
→
10/04 21:50, , 4F
10/04 21:50, 4F
→
10/04 22:02, , 5F
10/04 22:02, 5F
→
10/04 22:03, , 6F
10/04 22:03, 6F
→
10/04 22:03, , 7F
10/04 22:03, 7F
→
10/04 22:04, , 8F
10/04 22:04, 8F
→
10/04 22:04, , 9F
10/04 22:04, 9F
→
10/04 22:07, , 10F
10/04 22:07, 10F
→
10/04 22:12, , 11F
10/04 22:12, 11F
→
10/04 22:22, , 12F
10/04 22:22, 12F
→
10/04 22:24, , 13F
10/04 22:24, 13F
→
10/04 22:28, , 14F
10/04 22:28, 14F
→
10/04 22:55, , 15F
10/04 22:55, 15F
→
10/04 22:55, , 16F
10/04 22:55, 16F
→
10/04 22:57, , 17F
10/04 22:57, 17F
推
10/05 00:06, , 18F
10/05 00:06, 18F
→
10/05 10:13, , 19F
10/05 10:13, 19F
→
10/05 10:14, , 20F
10/05 10:14, 20F
→
10/05 10:14, , 21F
10/05 10:14, 21F
推
10/05 23:56, , 22F
10/05 23:56, 22F
→
10/05 23:57, , 23F
10/05 23:57, 23F
推
10/06 00:02, , 24F
10/06 00:02, 24F
推
10/06 16:55, , 25F
10/06 16:55, 25F
→
10/06 16:59, , 26F
10/06 16:59, 26F
→
10/06 20:03, , 27F
10/06 20:03, 27F
→
10/06 20:03, , 28F
10/06 20:03, 28F
→
10/06 20:03, , 29F
10/06 20:03, 29F
→
10/06 20:03, , 30F
10/06 20:03, 30F
推
10/07 00:49, , 31F
10/07 00:49, 31F
→
10/07 00:50, , 32F
10/07 00:50, 32F
推
10/07 06:04, , 33F
10/07 06:04, 33F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章