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]