1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作

【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作

时间:2019-01-24 13:25:03

相关推荐

【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作

本片文章是上一篇文章:点击查看对应的汇编代码。可以学习上一篇文章后再来对照查看汇编代码。或者查阅书籍《X86汇编语言-从实模式到保护模式》点击下载第12章内容来学习。

;代码清单12-1;文件名:c12_mbr.asm;文件说明:硬盘主引导扇区代码 ;设置堆栈段和栈指针 mov eax,csmov ss,eaxmov sp,0x7c00;计算GDT所在的逻辑段地址mov eax,[cs:pgdt+0x7c00+0x02];GDT的32位线性基地址 xor edx,edxmov ebx,16div ebx ;分解成16位逻辑地址 mov ds,eax;令DS指向该段以进行操作mov ebx,edx ;段内起始偏移地址 ;创建0#描述符,它是空描述符,这是处理器的要求mov dword [ebx+0x00],0x00000000mov dword [ebx+0x04],0x00000000 ;创建1#描述符,这是一个数据段,对应0~4GB的线性地址空间mov dword [ebx+0x08],0x0000ffff ;基地址为0,段界限为0xfffffmov dword [ebx+0x0c],0x00cf9200 ;粒度为4KB,存储器段描述符 ;创建保护模式下初始代码段描述符mov dword [ebx+0x10],0x7c0001ff ;基地址为0x00007c00,512字节 mov dword [ebx+0x14],0x00409800 ;粒度为1个字节,代码段描述符 ;创建以上代码段的别名描述符mov dword [ebx+0x18],0x7c0001ff ;基地址为0x00007c00,512字节mov dword [ebx+0x1c],0x00409200 ;粒度为1个字节,数据段描述符;创建保护模式下的栈段mov dword [ebx+0x20],0x7c00fffe ;基地址为0x00007c00,段界限为0xFFFFFmov dword [ebx+0x24],0x00cf9600 ;粒度为4KB,栈段描述符;初始化描述符表寄存器GDTRmov word [cs: pgdt+0x7c00],39;描述符表的界限 lgdt [cs: pgdt+0x7c00]in al,0x92;南桥芯片内的端口 or al,0000_0010Bout 0x92,al ;打开A20cli ;中断机制尚未工作mov eax,cr0or eax,1mov cr0,eax ;设置PE位;以下进入保护模式... ...jmp dword 0x0010:flush ;16位的描述符选择子:32位偏移[bits 32]flush: mov eax,0x0018 mov ds,eaxmov eax,0x0008 ;加载数据段(0..4GB)选择子mov es,eaxmov fs,eaxmov gs,eaxmov eax,0x0020 ;0000 0000 0010 0000mov ss,eaxxor esp,esp ;ESP <- 0mov dword [es:0x0b8000],0x072e0750 ;字符'P'、'.'及其显示属性mov dword [es:0x0b8004],0x072e074d ;字符'M'、'.'及其显示属性mov dword [es:0x0b8008],0x0720 ;两个空白字符及其显示属性mov dword [es:0x0b800c],0x076b076f ;字符'o'、'k'及其显示属性;开始冒泡排序 mov ecx,pgdt-string-1 ;遍历次数=串长度-1 @@1:push ecx ;32位模式下的loop使用ecx xor bx,bx;32位模式下,偏移量可以是16位,也可以 @@2: ;是后面的32位 mov ax,[string+bx] cmp ah,al;ah中存放的是源字的高字节 jge @@3 xchg al,ah mov [string+bx],ax @@3:inc bx loop @@2 pop ecx loop @@1mov ecx,pgdt-stringxor ebx,ebx ;偏移地址是32位的情况 @@4: ;32位的偏移具有更大的灵活性mov ah,0x07mov al,[string+ebx]mov [es:0xb80a0+ebx*2],ax;演示0~4GB寻址。inc ebxloop @@4hlt ;-------------------------------------------------------------------------------string db 's0ke4or92xap3fv8giuzjcy5l1m7hd6bnqtw.';-------------------------------------------------------------------------------pgdt dw 0dd 0x00007e00;GDT的物理地址;------------------------------------------------------------------------------- times 510-($-$$) db 0db 0x55,0xaa

【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作用 对应汇编代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。