当前位置: 代码迷 >> 汇编语言 >> 急为什么小弟我进入保护模式就重启呢
  详细解决方案

急为什么小弟我进入保护模式就重启呢

热度:9532   发布时间:2013-02-26 00:00:00.0
急。。。为什么我进入保护模式就重启呢?
RT

------解决方案--------------------------------------------------------
在没有做异常处理之前,发生常规保护错误时,就会使用默认的异常处理,通常是cpu复位,发生重启的现象。
检查代码,确保代码运行时没有产生常规保护错误或者其他的异常。
------解决方案--------------------------------------------------------
给你一个我以前写的代码你参考一下吧

Assembly code
data segment        idt db 6 dup(0)                IDT_0 dd 0                      dd 0                db 254*8 dup(0)         gdt db 6 dup(0)        GDT_0 dd 0              dd 0        GDT_1 dd 00000000000000001111111111111111b              dd 00000000110011111001101000000000b;00000000110011111001001000000000b;0cf9300h ;00000000110011111000010000000000b              dd 00000000000000001111111111111111b              dd 00000000110011111001001000000000b   ;data              db 50h dup(0)        jmp_addr db 6 dup(0)data ends        cli            in al,0EEh        mov eax,data        shl eax,4          mov ebx,offset GDT_0        add eax,ebx        mov dword ptr gdt[2],eax        mov word ptr gdt[0],20h        lgdt fword ptr gdt      ;set gdt        lidt fword ptr idt        ;set idt         mov eax,cr0                    ; in pmode        or ax,1        mov cr0,eax                mov ax,8                       ;selector = 8        mov gs,ax                        mov ax,10h              ;selector = 10                 mov ds,ax               ;data segment ds                            ;data segment ds                mov fs,ax                                mov al,00010001b     ; ICW1                out 20h,al                nop                nop                nop                nop                out 0a0h,al                nop                nop                nop                nop                mov al,INT_BASE                 ;host intterup num                out 21h,al                nop                nop                nop                nop                mov al,INT_BASE_S                out 0a1h,al                     ;                nop                nop                nop                nop                mov al,100b                out 21h,al                      ;host                 nop                nop                nop                nop                mov al,10b                out 0a1h,al                nop                nop                nop                nop                mov al,1                out 21h,al                nop                nop                nop                nop                out 0a1h,al                nop                nop                nop                nop                mov al,11011111b                                       ;no mask                out 21h,al                nop                nop                nop                nop                mov al,0ffh                out 0a1h,al                nop                nop                nop                nop                mov eax,code_32        shl eax,4        add eax,offset pmode        mov ebx,data        shl ebx,4        add ebx,offset jmp_addr                ;sti                ;jmp $                mov dword ptr ds:[ebx+0],eax                mov word ptr ds:[ebx+4],8        sti        jmp fword ptr ds:[ebx]