第11章 进入保护模式

对照代码重点理解一下三个要点:

1,从实模式到保护模式的整体过程;

2,实模式怎样安装GDT;

3,从实模式怎样过渡到安全模式;

4,安全模式怎样寻址;


代码如下:

         ;代码清单11-1;文件名:c11_mbr.asm;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54;设置堆栈段和栈指针 mov ax,cs      mov ss,axmov sp,0x7c00;计算GDT所在的逻辑段地址 mov ax,[cs:gdt_base+0x7c00]        ;低16位 mov dx,[cs:gdt_base+0x7c00+0x02]   ;高16位 mov bx,16        div bx            mov ds,ax                          ;令DS指向该段以进行操作mov bx,dx                          ;段内起始偏移地址 ;创建0#描述符,它是空描述符,这是处理器的要求mov dword [bx+0x00],0x00mov dword [bx+0x04],0x00  ;创建#1描述符,保护模式下的代码段描述符mov dword [bx+0x08],0x7c0001ff     mov dword [bx+0x0c],0x00409800     ;创建#2描述符,保护模式下的数据段描述符(文本模式下的显示缓冲区) mov dword [bx+0x10],0x8000ffff     mov dword [bx+0x14],0x0040920b     ;创建#3描述符,保护模式下的堆栈段描述符mov dword [bx+0x18],0x00007a00mov dword [bx+0x1c],0x00409600;初始化描述符表寄存器GDTRmov word [cs: gdt_size+0x7c00],31  ;描述符表的界限(总字节数减一)   lgdt [cs: gdt_size+0x7c00]in al,0x92                         ;南桥芯片内的端口 or al,0000_0010Bout 0x92,al                        ;打开A20cli                                ;保护模式下中断机制尚未建立,应 ;禁止中断 mov eax,cr0or eax,1mov cr0,eax                        ;设置PE位;以下进入保护模式... ...jmp dword 0x0008:flush             ;16位的描述符选择子:32位偏移;清流水线并串行化处理器 [bits 32] flush:mov cx,00000000000_10_000B         ;加载数据段选择子(0x10)mov ds,cx;以下在屏幕上显示"Protect mode OK." mov byte [0x00],'P'  mov byte [0x02],'r'mov byte [0x04],'o'mov byte [0x06],'t'mov byte [0x08],'e'mov byte [0x0a],'c'mov byte [0x0c],'t'mov byte [0x0e],' 'mov byte [0x10],'m'mov byte [0x12],'o'mov byte [0x14],'d'mov byte [0x16],'e'mov byte [0x18],' 'mov byte [0x1a],'O'mov byte [0x1c],'K';以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B         ;加载堆栈段选择子mov ss,cxmov esp,0x7c00mov ebp,esp                        ;保存堆栈指针 push byte '.'                      ;压入立即数(字节)sub ebp,4cmp ebp,esp                        ;判断压入立即数时,ESP是否减4 jnz ghalt                          pop eaxmov [0x1e],al                      ;显示句点 ghalt:     hlt                                ;已经禁止中断,将不会被唤醒 ;-------------------------------------------------------------------------------gdt_size         dw 0gdt_base         dd 0x00007e00     ;GDT的物理地址 times 510-($-$$) db 0db 0x55,0xaa


实验结果:











本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET学习笔记之操作过滤器

转载于:https://www.cnblogs.com/kevin1988/p/3684442.html

第12章 存储器的保护

学习32位保护模式明显感觉比16位实模式复杂一些,其实两者之间所做的事情是一样的,无非是对内存的各种操作,对栈的各种操作,但是手段不一样,实模式是野蛮的,可以在任意地方读写(比如代码区&#…

with open的使用

1, open(‘file’, mode) 第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。mode 可以是 ‘r’,表示文件只能读取,‘w’ 表示只能写入(已存在的同名文件会被删除)&…

Android硬件抽象层(HAL)概要介绍和学习计划 1转

最近和另外一家开发公司涉及到合作,一直希望了解Android从Linux到App整个架构和流程,那家开发工程师也不断提供帮助,不过如果借助后面几篇博客,相对系统和完整的可以了解更加清晰, <博客:http://blog.csdn.net/luoshengyang/article/details/6567257> Android的硬件抽象层…

第13章 程序的动态加载和执行(一,引导)

这个引导扇区的代码没什么困难&#xff0c;比较容易读懂。较上一章不同的是&#xff0c;引导扇区除了给本身代码准备GDT之外&#xff0c;还要给“简易操作系统”准备GDT。本章中的引导扇区代码&#xff0c;内核代码&#xff0c;用户代码一定的要弄的清楚明白熟悉后才能进行后面…

.f' '或者.F' '或者string.format(args)

1&#xff0c;格式化字符串 {var} 作为占位符 Year 2020f Today is {Year}# f.my py coding... {var} F.my py coding {var}the sum of 1 2 is {0}.format(12)百分数&#xff0c;小数的格式化 def test_f():import mathprint(f{math.pi:0.2f}) # 保持小数点后两位test_f()…

DecimalFormat很强大

DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等 1 DecimalFormat df new DecimalFormat(); 2 double data 1234.56789; 3 System.out.println("格式化之前的数字: " data); 4 String s…

第13章 程序的动态加载和执行(二,用户代码)

弄清楚两个问题&#xff0c;这段应用代码就容易读懂了&#xff1a; 1&#xff0c;核心代码是如何把指针指到这里的&#xff1b; 2&#xff0c;这段代码是如何使用内存的&#xff1b; 读这个代码的时候&#xff0c;可以类比我们平时写的练习小程序&#xff0c;以C程序为例&am…

Java枚举的定义,使用

一&#xff0c;枚举是什么? 在数学和计算机科学理论中&#xff0c;一个集的枚举是列出某些有穷序列集的所有成员的程序&#xff0c;或者是一种特定类型对象的计数。这两种类型经常&#xff08;但不总是&#xff09;重叠。 [1] 是一个被命名的整型常数的集合&#xff0c;枚举在…

php mysql

1 php 链接到MySQL 的语句&#xff1a; $conn mysql_connect("localhost","root","root") or die("数据库连接失败&#xff0c;请检查你的网络,稍后再试试"); 注&#xff1a;mysql_connect 打开一个到 MySQL 服务器的连接 mysql_sel…

第13章 程序的动态加载和执行(三,核心代码)

这个核心代码也是本书唯一的一个核心代码&#xff0c;把这个读懂了&#xff0c;本书基本上通了&#xff0c;这个核心代码不难&#xff0c;只是前面知识的综合应用而已&#xff0c;所以用一到两个星期把这个三个程序读熟再进行下面的四章。 怎么样才算是读通了一个代码&#xf…

输入字符串统计字符串中每个字符出现的次数

这是一个作业题。 我还遇到两次了… 利用map集合嘿哈哈搞定… import java.util.HashMap; import java.util.Scanner;public class CaclulateNum {public static void main(String[] args) {// 2&#xff1a;输入字符串统计字符串中每个字符出现的次数showNum();}static void …

html相对路径

“../”表示上一级目录开始 “./”表示当前同级目录开始 “/”表示根目录开始。 &#xff08;1&#xff09;../../ 表示源文件所在目录的上上级目录 &#xff08;2&#xff09;G:\site\index.htm 与G:\site\web\article\01.htm互做超链接。 index.htm要想链接到01.htm这个文…

py语法错误与异常处理

python的异常处理一&#xff0c;语法错误&#xff08;解析错误&#xff09;1&#xff0c;解析错误invalid syntax二&#xff0c;内置的异常1&#xff0c;内置异常三&#xff0c;异常的处理1&#xff0c;基本的try except语句2&#xff0c;except语句3&#xff0c;eles语句4&…

【雷军】给程序员的五点建议--如何成为编程高手并以此创业

除非特别注明&#xff0c;鸡啄米文章均为原创转载请标明本文地址&#xff1a;http://www.jizhuomi.com/career/286.html写在前面&#xff1a;此篇文章出自雷军之手&#xff0c;是他为软件开发2.0技术大会准备的演讲稿&#xff0c;但由于某些原因没有派上用场。这里跟大家分享下…

重构,改善既有代码的设计--第八章感悟

1.如果你看到一个数组的行为方式很像一个数据结构&#xff0c;就可以把数组变成对象 private int aa,变成: int aa; public int GetAA() {return aa;}//好处&#xff1a;使得获取的数据更加有效 转载于:https://www.cnblogs.com/ITGirl00/p/3696741.html

计算机网络重要机制(一)可靠数据传输

操作系统&#xff0c;计算机网络都属于计算机系统&#xff0c;为了使得整个系统运行起来&#xff0c;人们根据当时的硬件条件和理论认识设计了各种的算法&#xff08;也可以叫机制&#xff09;&#xff0c;这些机制有些被抛弃&#xff0c;有些被进化。所以操作系统、计算机网络…

命名空间和作用域

一&#xff0c;namespace namespace是名字到对象的映射&#xff0c;python里面的大部分命名空间由字典实现。如果有性能问题&#xff0c;会更改。 命名空间的举例 •存放内置函数的集合&#xff08;abs()这种函数&#xff0c;和内建的异常&#xff09; •模块中的全局名称 •函…

[转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法

本文从三方面总结迭代器 迭代器的思想迭代器相应型别及traits思想__type_traits思想一 迭代器思想 迭代器的主要思想源于迭代器模式&#xff0c;其定义如下&#xff1a;提供一种方法&#xff0c;使之能够依序巡防某个聚合物&#xff08;容 器&#xff09;所含的元素&#xff0c…