首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

一些关于保护模式的疑义,大神来

2013-01-01 
一些关于保护模式的疑问,大神来第一个,我看了DPL,RPL,CPL的定义,还是搞不清,谁能用最通俗的语言把三个讲一

一些关于保护模式的疑问,大神来
第一个,我看了DPL,RPL,CPL的定义,还是搞不清,谁能用最通俗的语言把三个讲一下?
第二个,堆栈的变化是不是ss与esp中任意一个发生变化?
第三个,一致代码段和非一致代码段是什么?是系统规定的还是用户规定的?
第四个,
[SECTION .1]
%include "pm.inc"
org 07c00h
jmp LABEL_BEGIN
len1 equ $-$$
[SECTION .gdt]
LABEL_GDT Descriptor 0,0,0
LABEL_CODE32 Descriptor 0,len32-1,DA_32 + DA_C
LABEL_VEDIO Descriptor 0b8000h,0ffffh,DA_DRW
Gdtlen equ $ - LABEL_GDT
Gdtptr dw Gdtlen - 1
dd 0
SelectorCode32 equ LABEL_CODE32 - LABEL_GDT
SelectorVedio equ LABEL_VEDIO - LABEL_GDT
lengdt equ $-$$
[SECTION .init]
[BITS 16]
LABEL_BEGIN:
xor eax,eax
mov ax,cs
shl eax,4
add eax,LABEL_SEC_CODE32
mov word [LABEL_CODE32 + 2],ax
shr eax,16
mov byte [LABEL_CODE32 + 4],al
mov byte [LABEL_CODE32 + 7],ah
xor eax,eax
mov ax,cs
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
leninit equ $-$$
[SECTION .CODE32]
[BITS 32]
LABEL_SEC_CODE32:
mov ax,SelectorVedio
mov gs,ax
mov edi,(80 * 11 + 79) * 2
mov ah,0ch
mov al,"p"
mov [gs:edi],ax
jmp $
len32 equ $ - LABEL_SEC_CODE32
times (510 - ($-$$) - len1 - leninit - lengdt) db 0
dw 0xaa55
这个最后的times想凑够一个512bytes,结果出来的是517bytes,不知道哪里出了问题了。
[解决办法]
你为什么不懂?是你不理解。其实不怪你,因为这个东西蛮抽象,与实际编程

环境相差太远,建议

1 就到目前理解程度为止,将其简单忽略

2 搭bochs虚拟机,编译保护模式代码实际调试

3 看《自己动手写OS》于渊(这个肯定能懂了)

我告诉你,你这次懂了,过会其他的问题还是不懂。你会一直问,我没空一直答。

我是授你渔,而不是授你鱼,楼主luck!

热点排行