保护模式下的内存访问(笔记)

         ;代码清单12-1;文件名:c12_mbr.asm;文件说明:硬盘主引导扇区代码;创建日期:2011-5-16 19:54;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址mov ax, [cs: gdt_base + 0x7c00]              ;低16位mov dx, [cs: gdt_base + 0x7c00 + 0x02]       ;高16位mov bx, 16div bxmov ds, ax                                   ;令DS指向该段以进行操作mov bx, dx                                   ;段内起始偏移地址;创建0#描述符,它是空描述符,这是处理器的要求mov dword [bx+0x00],0x00mov dword [bx+0x04],0x00;创建#1描述符,保护模式下的数据段描述符(文本模式下的显示缓冲区)mov dword [bx+0x08],0x8000ffffmov dword [bx+0x0c],0x0040920b;初始化描述符表寄存器GDTRmov word [cs: gdt_size+0x7c00],15            ;描述符表的界限(总字节数减一)lgdt [cs: gdt_size+0x7c00]in al,0x92                                   ;南桥芯片内的端口or al,0000_0010Bout 0x92,al                                  ;打开A20cli                                          ;保护模式下中断机制尚未建立,应;禁止中断mov eax,cr0or eax,1mov cr0,eax                                  ;设置PE位;以下进入保护模式... ...mov cx,00000000000_01_000B                   ;加载数据段选择子(0x08)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'mov byte [0x1e],'.'hlt                                          ;已经禁止中断,将不会被唤醒;-------------------------------------------------------------------------------gdt_size         dw 0gdt_base         dd 0x00007e00               ;GDT的物理地址times 510-($-$$) db 0db 0x55,0xaa

根据上一篇我们讲到的内容继续
你会发现,控制实模式和保护模式切换的开关原是在一个叫CR0的寄存器
在这里插入图片描述

CR0

CR0是处理器内部的控制寄存器,之所以有个“0”后缀,是因为还有CR1,CR2,CR3…控制寄存器,到CR8
CR0是32位寄存器,包含了一系列用于控制处理操作模式和运行状态的标志位
如下
在这里插入图片描述

PE位

如果它的第1位为保护模式允许位,是开启保护模式的关键,如果为1,则处理器进入保护模式。
这里我们先只介绍这个
在保护模式下的中断和实模式下的中断不同,原有的中断向量表不再适用,而且必须要知道的是,BIOS中断都不能再使用。
所以你会看到37行
在这里插入图片描述
8086的段寄存器是16位的,共有四个:CS、DS、ES、SS
32位处理器内,在原有的基础上又增加了FS和GS

在这里插入图片描述

不可见部分是段的线性基址、界限、属性

段选择子

在保护模式下访问一个段时,传送到段寄存器的是段选择子
在这里插入图片描述由上图我们可以看到
它由三部分构成

  • 描述符索引号(Index)
  • TI描述符指示器(Table Indicator)
    当TI=0时,表示描述符在GDT中
    当TI=1时,描述符在LDT中
    LDT和GDT类似
  • PRT请求特权级

我们可以看到12-1的代码清单,定义了1个段描述符,因为表内描述符的编号是从0开始的,所以它的索引号是1
在45、46行,将描述符选择子0x0008传送到段选择器DS中,代码中用的是二进制
从二进制可以看到,指定描述符号的索引值号是1,指定的是GDT,请求特权级PRT为00
在这里插入图片描述
GDT的线性基址在GDTR中,又因为每个描述符占8字节,因此描述符在表内的偏移地址是索引号乘以8
在这里插入图片描述下图是保护模式下内存访问
在这里插入图片描述保护模式下处理器取指令的过程
在这里插入图片描述
在进入保护模式前,处理器就已经使用CS描述符高速缓存器里的基址从代码段取指令并执行指令

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

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

相关文章

Ubuntu插无线网卡后没反应-安装驱动

工作站的网卡驱动坏了两次了…记录一下重装过程吧,可能对大家帮助不大,仅供参考。 首先检查一下网卡插上后是否被识别了,在终端输入 lsusb,得到的设备中有一个 Edimax Technology Co., Ltd Edimax AC1200 USB 这个设备就是无线网…

POI:接收上传上来的excel,解析并导入到数据库

目录 1、控制层 2、业务层(主要逻辑) 1、控制层 因为前端设置了只能上传1个文件,这里直接取一个。 RequestMapping(value "/shebeiDaoru.ctrl", method RequestMethod.POST, produces "application/json;charsetUTF-8&q…

Chatgpt、Chatglm、Gemini、通义千问、文心一言、Kimi、字节豆包 AI 写高考作文,附各大模型体验案例~

六月,高考季,AI 来帮 阅读材料 要求:选准角度,确定立意,明确文体,自拟标题;不要套作,不得抄袭;不得泄露个人信息;不少于800字。 Ai 来写作 【构建提示…

python17 字符串的常用操作

字符串常用方法 代码 字符串常用方法s i am SyLar, I LOVE YOU s1 s.capitalize()# 首字母变成大写 print(s1) s2s.lower() # 全部变成小写 print(s2) s3 s.upper()#全部变成大写 忽略大小写 推荐用这个 print(s3)title abc_def_hi print(标题:,title.title())s4 HelloWor…

SwitchHosts 简明教程

转载请标明出处:https://blog.csdn.net/donkor_/article/details/139743047 文章目录 一、SwitchHosts 是什么二、功能特性三、安装四、使用4.1 本地添加host4.2 本地127.0.0.1添加指定IP 五、修改 hosts 后不生效 一、SwitchHosts 是什么 SwitchHosts 是一个管理 …

以太网基础知识(三)—FEC概念以及编码原理介绍

1:前言 KR4(528,514) FEC表示的意思: KR4 RS(528,514) FEC 是一种以太网中使用的FEC(Forward Error Correction)编码方案。在这个方案中,采用的是Reed-Solomon (RS) 编码算法,它被设计用于提高数据传输的…

考试系统提供源码能做什么?

考试系统提供源码,无疑为现代教育领域注入了新的活力。源码,作为软件开发的基石,其开放与共享的特性使得考试系统具备了前所未有的灵活性和可定制性。那么,考试系统提供源码究竟能做什么呢?本文将详细探讨其多重功能与…

初识数据库及Mysql安装管理

初识数据库及Mysql安装管理 了解数据库数据库的概念数据库的分类关系型数据库(SQL)非关系型的数据库(NoSQL) SQL语句SQL语言分类: MySQL中6种常见的约束: Mysql安装(CentOS7)源码编译…

dialog弹窗显示不全

弹框显示不全,编辑框不可见 打开可编辑的dialog对话框后,编辑view获取到焦点弹出软键盘输入时,由于屏幕分辨率和屏幕高度问题,导致软键盘高度太高向上挤压dialog对话框,当dialog对话框被向上挤压到状态栏位置时&#…

接手一个系统并快速入手 这里是一些建议

接手一个陈旧而极其重要的系统,需要系统性和全面的了解。以下是你可以从多个方面入手的步骤和建议: 1. 文档和架构图 系统架构图:了解系统的整体架构,包括各个微服务的分布、上下游依赖关系、数据流向等。接口文档:获…

AI应用中心:搭建上线了,发现出色的人工智能的网站软件

https://aiapp.ai-51.com 1w 个最佳人工智能应用和服务 AI 应用中心拥有丰富的国内外 AI 应用,收录了超过 1w 个出色的人工智能网站和应用,覆盖了 40 多个不同的领域,如 Ai 绘画生成、Ai 文案写作、Ai 视频编辑、Ai 智能营销等。您可以通过我…

LeetCode347:前K个高频元素

题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 解题思想 使用优先队列 priority_queue<Type, Container, Functional> Type 就是数据类型&#xff0c;Container 就是容器类型&#xff08;C…

C++互斥代码实现

1 #include <windows.h>HANDLE hMutex; hMutex CreateMutex(NULL, FALSE, NULL); WaitForSingleObject(hMutex, INFINITE); //TODO: 添加互斥代码ReleaseMutex(hMutex);2 #include <mutex>std::mutex m_mutex; m_mutex.lock(); //TODO: 添加互斥代码m_mutex.unl…

移动操作系统更新管理

移动操作系统更新管理是大多数移动设备管理&#xff08;MDM&#xff09;解决方案中提供的一项功能&#xff0c;它允许组织管理移动设备上的操作系统更新。MDM解决方案定期扫描设备以检查可用的移动操作系统更新&#xff0c;并根据配置的策略管理操作系统更新。操作系统更新管理…

【ubuntu22.04】切换图形界面和命令行界面解决方案

切换命令行 sudo systemctl set-default multi-user.target sudo reboot 安装驱动 # 切换到驱动目录 cd /home/user/download/ # 权限 sudo chmod ax NVIDIA-Linux-x86_64-520.56.06.run # 安装 sudo ./NVIDIA-Linux-x86_64-520.56.06.run 安装过程中&#xff0c;有个是否安…

QBrush的setColor函数不能改变画刷颜色的原因及解决方法

如下代码&#xff1a; void QtWidgetsApplication1::paintEvent(QPaintEvent* event) {QPainter p(this);QBrush brush;brush.setColor(Qt::red);p.setBrush(brush);p.drawRect(10, 10, 300, 100); } 本意是想绘制一个红色矩形&#xff0c;但结果是矩形没有被红色填充&#x…

消息队列中的可靠性保障:关键建议与实践

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

c++初始化列表(特点),隐式类型转换(示例,explicit关键字)

目录 初始化列表 定义 特点 必须使用初始化列表的成员变量 初始化顺序 隐式类型转换 示例 explicit关键字 初始化列表 Date::Date(const Date& d) {_year d._year;_month d._month;_day d._day; }Date::Date(const Date& d) :_year(d._year),_month(d._mon…

Salesforce‘s 爱因斯坦机器人助手引领工业聊天机器人时代

CRM的对话式人工智能助手&#xff0c;根据公司数据提供可靠的人工智能响应及日本工业聊天机器人现状 【前言】 爱因斯坦助手&#xff08;Einstein Copilot&#xff09;提供可靠的响应&#xff0c;因为它基于公司独特的数据和元数据&#xff0c;使其能够深入了解公司的业务和客…

第一节 初识Redis

1. 概述 Redis是一个开源的、使用ANSI C语言编写的Key-Value存储系统。Redis的官方名称为Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;它提供了多种语言的API&#xff0c;并且具有高性能、极低延迟和简单性的特点&#xff0c;被广泛用于缓存、会…