|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这段代码,反复搞了几天几夜了,帮我看看哪里写错了,帮我挑错呀,急死了呀,谢谢叻
---------------------Descriptor.inc----------------------------------------
%macro Descriptor 3
dw %2 & 0FFFFh
dw %1 & 0FFFFh
db (%1 >> 16) & 0FFh
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh)
db (%1 >> 24) & 0FFh
%endmacro
-------------------------------------------------------------------------------------------------------
%include "Descriptor.inc"
org 07c00h
jmp main_start
[section .gdt]
gdt_null: Descriptor 0,0,0
gdt_code: Descriptor 0,seg_code_32_len-1,9ah|4000h
gdt_video:Descriptor 0B8000H,0FFFFH,92ah
;[section gdt]
;GDTR寄存器结构
gdt_len equ $-1
gdtr_ptr dw gdt_len-1
dd 0
;选择子
selector_code equ gdt_code-gdt_null
selector_video equ gdt_video-gdt_null
;实模式下对保护模式进行初始化
[section .s16]
[bits 16]
main_start:
;对各段进行初始化
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp, 0100h
;对代码段描述符初始化
mov eax,seg_code_32
mov word[gdt_code+2],ax
shr eax,16
mov byte[gdt_code+4],al
mov byte[gdt_code+7],ah
;准备加载GDTR
mov eax,gdt_null
mov dword[gdtr_ptr+2],eax
;加载GDTR
lgdt [gdtr_ptr]
;关中断
cli
;开启A20线
in al,92h
or al,00000010b
out 92h,al
;开启保护模式
mov eax,cr0
or eax,1
mov cr0,eax
;进行保护模式
jmp dword selector_code:0
;以下是在保护模式下操作
[section .code_32]
[bits 32]
seg_code_32:
mov ax, selector_video
mov gs, ax ; 视频段选择子(目的)
mov edi, (80 * 11 + 79) * 2 ; 屏幕第 11 行, 第 79 列。
mov ah, 0Ch ; 0000: 黑底 1100: 红字
mov al, 'P'
mov [gs:edi], ax
jmp $
seg_code_32_len equ $-seg_code_32
|
|