【新书推荐】29.1 32位汇编基本概念

news2024/9/24 17:17:23

第二十九章 32处理器体系结构

         这一章我们将讲述32处理器体系结构。包括32位计算机的一些基本概念,32位处理器,程序加载执行的过程,32位计算机的硬件组成和输入输出系统。

29.1 基本概念 

         本节内容:

         ■实模式与保护模式

■操作系统

■汇编语言与高级语言

29.1.1 实模式与保护模式

32处理器支持三种基本操作模式:保护模式、实地址模式、系统管理模式(安全模式),另外一种模式称为虚拟8086模式,是保护模式的一个特例。

         ■实模式

         ●8086CPU

回顾本书第二部分的内容。8086计算机采用16位实模式,有20根地址线,寻址范围1MB。CPU内包含8个16位通用寄存器,4个16位段寄存器,1个16位flag寄存器和1个16位IP寄存器。一次只能最多读写16位二进制数据。可以将1MB内存空间划分为若干个逻辑段,最小段16个字节,最大段为64KB。此外,CPU内还有一个地址加法器。

8086寻址方式

         16位汇编程序的逻辑地址为:段值:偏移

例如CS:IP。8086计算机读取逻辑地址后,利用地址加法器将逻辑地址转换为20位物理地址。

逻辑地址转换为物理地址方法为:

物理地址 = 段值<< 4 + 偏移

8086计算机可以任意访问1MB地址空间,完全透明,没有任何限制。16位应用程序可以任意修改中断向量、系统BIOS和DOS操作系统,非常不安全。

保护模式

80386 CPU

随着80386 CPU的诞生,计算机进入32位时代。地址线由20根扩展到32根,寻址访问由1MB扩大到4GB。相应CPU内的寄存器也由16位扩展到32位,一次可以最多读写32位二进制数据。段寄存器依然保持16位不变。每个应用程序分配4GB虚拟地址空间,作为唯一一个flat段存在,并以此为模板编写应用程序。

80386寻址方式

32位汇编程序的逻辑地址为:32位偏移地址。

32位汇编程序的线性地址为:32位段基址+32位偏移地址=32位线性地址。

32位汇编程序的物理地址为:根据不同的分页模式,通过地址映射表将32位线性地址转换为32~48位物理地址。

32位应用程序中的段基址由系统自动分配,R3权限的应用程序无权指定或修改段基址。16位段寄存器不再保存段值,而是保存16位段选择子,以段选择子为索引查找段描述符表,找到对应的段描述符中的段基址。

提示

只有具有R0权限的32位驱动程序才可以指定或修改段描述符,改变段基址。我们将在《windows 32位内核》一书中详细讲解。

保护权限

此外,保护模式与实模式最明显的区别在于权限的限制。在保护模式下,限制应用程序的访问权限。保护模式将权限划分为段权限和页权限。

1.段权限:段特权级划分为R0、R1、R2、R3 四个特权级,操作系实际只使用了R0和R3特权级。一般应用程序只具备R3特权阶级,只可以访问低2GB空间。驱动程序具备R0特权级,可以访问整个4GB虚拟空间。

2.页权限:页权限分为可读、可写,后来操作系统添加了页可执行权限检查。

系统管理模式

系统管理模式为操作系统提供了用以实现电源管理和系统安全等功能的机制。这些功能通常是由那些想自定义特定的系统启动过程的计算机制造商实现的。

29.1.2 操作系统

         操作系统最初是作为监控程序存在的,负责可执行程序的加载和运行监控。

■DOS操作系统

DOS操作系统是微软早期开发的操作系统,装载在IBM 8086系列兼容机上。16位汇编程序即运行在DOS操作系统之上。DOS操作系统是开源的操作系统,完全透明。加之8086 CPU没有任何权限限制类的硬保护措施,存在严重的安全问题。

DOS系统通过中断向量号21H,为应用程序提供各种功能调用,使得应用程序无需熟悉底层的硬件设备驱动就可以方便的实现对硬件设备的控制。提高了应用程序的开发效率,同时也可以解决不同计算机系统之间的兼容问题。

         ■Windwos 32位操作系统

         Windows系统是微软开发的视窗操作系统。早期的Windows系统是16位系统,建立在DOS系统框架基础上,后续发布的Windows me、Windows 95、Windows 98等32位视窗操作系统,同样是建立在DOS系统架构上。微软从Windows 2000开始,重新开发了NT架构的32位操作系统。X64 处理器诞生后,微软又开发了与之匹配的Windows 64位操作系统,我们将在本书第四部分讲述X64 处理器。

         Winodws视窗操作系统非常人性化的设计,获得了巨大成功,本书中的32位和64位应用程序就是针对Windows操作系统开发的。我们将在《Windows API每日一练》一书中详细讲解Windows操作系统提供的各种各样的API接口。

         此外,Windows 32位操作系统支持80386及以上处理器,支持保护模式,并将4GB的虚拟空间划分为低2GB和高2GB空间。Windows普通应用程序为R3特权级,只能访问低2GB虚拟空间。只有具备R0权限的驱动程序才可以访问整个4GB虚拟内存空间。Windows操作系统负责程序的加载,以及段和页的内存分配,并赋予相应的保护属性。Windows操作系统的基本结构如图29-1所示。

        

                                        图29-1 Windows操作系统基本模型

除了支持CPU的硬件保护模式之外,Windows操作系统还建立了一套较为完备的安全机制,包括用户及用户组权限检查、内核对象安全属性检查、参数校验、内存检验等安全机制。

此外,Windows 64位系统增加了签名认证检查。弥补了Windows操作系统进程间强相关带来的安全漏洞。

29.1.3 汇编语言与高级语言

         ■16位汇编

回顾我们在第二部分学习的16位汇编语言,16位汇编程序可以不依赖操作系统,直接控制计算机硬件设备,功能强大,但是编写、调试比较困难,兼容性差,缺少可供利用的第三方库,效率很低,受制于8086计算机性能的限制,不太适合功能复杂大型程序。

32位汇编

在80386及以上处理器诞生后,计算机性能得到了极大提升。32位汇编语言做了较大改进。编译器由MASM5.0更新到了MASM8.0,默认支持段的简化定义,支持高级汇编语法,支持Windows操作系统动态链接库及接口函数,越来越接近于C语言。

C语言

我们在第一章计算机软件发展史一节提到,1972年,在贝尔实验室工作的丹尼斯·里奇(Dennis MacAlistair Ritchie)为开发Unix操作系统发明了C语言。C语言被称为高级语言,拥有自己的标准库,功能更为丰富,且不依赖于操作系统。C语言使用了大量的运算符,灵活的语法使得程序开发的效率大大提高。此外,C语言还解决了汇编语言不兼容的问题。C语言至今仍然是各个不同计算机平台共同使用的通用语言。几乎所有的计算机基础软件主要都是使用C语言开发完成的。

其他高级语言

如C++、JAVA、PHP、Python等高级语言又是以C语言为基础,最终翻译成C语言实现的。此外,C语言也可以通过内联汇编或内联函数的形式向下兼容汇编语言。因而C语言又被称为高级汇编。

接下来,我们举例说明C、C++、JAVA等高级语言与汇编语言和机器语言之间的关系。

         C++、JAVA和一些脚本类的高级语言是通过编译器、解释器或虚拟机将源程序翻译成C语言实现的。而C语言又通过编译器和链接器将源程序翻译成汇编语言和机器语言,最终生成二进制可执行文件,并由操作系统加载到计算机内存。

C、C++、JAVA等高级语言与汇编语言和机器语言是一对多的关系。

举例

例:

C++代码:

int y;

int x=(y+4)*3;

汇编代码:

mov eax,y

add eax,4

mov ebx,3

imul ebx

mov x,eax

可移植性

汇编语言的可移植性:不可移植。高级语言可以移植。其实高级语言的可移植性都是建立在C语言的基础上的。C语言是各种不同计算机系统的通用语言,而其他高级语言都是翻译成C语言实现的,因此其他高级语言也就具备了跨平台的可移植性。

应用领域

         汇编语言由于编程困难、维护难度大,通常适用于直接访问硬件或者代码量少、对性能要求很高的领域。例如操作系统内核、硬件设备驱动等领域。

高级语言对程序员要求相对较低,适合大型商业软件、跨平台软件的开发,有利于人员分工协作,维护方便,可移植性好。

多层次计算机系统

         回顾本书第一章“1.2节计算机结构”,我们把计算机系统分为5个层,操作系统之下为硬件系统,操作系统之上为软件系统。汇编语言可以越过操作系统直接控制硬件。通常32位汇编语言仍然是运行在操作系统之上的。

         高级语言翻译成汇编语言,汇编语言再翻译成机器语言,运行在操作系统上。

         指令集、微指令和逻辑电路属于计算机硬件系统,不再阐述,可以参阅计算机组成原理相关的书籍。

                                图1-14 多层次计算机系统

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

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

相关文章

Css提高——flex布局及其相关属性

目录&#xff1a; 1、传统布局与flex布局的区别 2、flex的布局原理 3、flex常见的父项属性 3.1、flex-direction &#xff1a;设置主轴的方向 3.2、justify-content 设置主轴上的子元素排列方式 3.3、flex-wrap 设置子元素是否换行 3.4、align-items 设置侧轴上的子元素排…

北京保险服务中心携手镜舟科技,助推新能源车险市场规范化

2022 年&#xff0c;一辆新能源汽车在泥泞的小路上不慎拖底&#xff0c;动力电池底壳受损&#xff0c;电池电量低。车主向保险公司报案&#xff0c;希望能够得到赔偿。然而&#xff0c;在定损过程中&#xff0c;保司发现这辆车的电池故障并非由拖底事件引起&#xff0c;而是由于…

融入Facebook的世界:探索数字化社交的魅力

融入Facebook的世界&#xff0c;是一场数字化社交的奇妙之旅。在这个广袤的虚拟社交空间中&#xff0c;人们可以尽情展现自己、分享生活&#xff0c;与全球朋友、家人和同事保持紧密联系&#xff0c;共同探索社交互动的乐趣与魅力。让我们深入了解这个世界的魅力所在&#xff1…

Docker 安装部署MySQL教程

前言 Docker安装MySQL镜像以及启动容器&#xff0c;大致都是三步&#xff1a;查询镜像–>拉取镜像–>启动容器 1、查询镜像 docker search mysql2、拉取镜像 拉取镜像时选择stars值较高的 docker pull mysql:5.7 #这里指定拉取对应的版本Mysql5.7&#xff0c;没有指…

冒泡排序,详详解解

目录 基本概念&#xff1a; 上图&#xff1a; 核心思路&#xff1a; 基本步骤&#xff1a; 关键&#xff1a; 代码核心&#xff1a; 补充&#xff1a; 代码&#xff08;规范&#xff09; &#xff1a; 代码&#xff08;优化&#xff09;&#xff1a; 今天我们不刷力扣了&…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

计算数据集的几何平均数geometric_mean

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算数据集的几何平均数 geometric_mean [太阳]选择题 geometric_mean的作用是&#xff1f; import statistics a [1, 2, 3, 4] average_a statistics.geometric_mean(a) print(average_a)…

软考高级:遗留系统演化策略(集成、淘汰、改造、继承)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

14.WEB渗透测试--Kali Linux(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;13.WEB渗透测试--Kali Linux&#xff08;一&#xff09;-CSDN博客 netcat简介内容:13.WE…

HNU计算机系统·汇编进阶

知识回顾&#xff1a; 寻址&#xff1a; 其中&#xff0c;比例因子S&#xff0c;只能是1&#xff0c;2&#xff0c;4&#xff0c;8中的数&#xff0c;这是因为在LEA的独立电路中使用移位寄存器 上节课的补充&#xff1a; mov部分: mov value , %eax mov $value , %eax 第一条…

【阅读论文】智能数据可视分析技术综述

智能数据可视分析技术综述 文章结构 中文引用格式: 骆昱宇, 秦雪迪, 谢宇鹏, 李国良. 智能数据可视分析技术综述. 软件学报, 2024, 35(1): 356–404. http://www.jos.org.cn/1000-9825/6911.htm

Linux常用操作命令和服务器硬件基础知识

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Spring Cloud部署篇2——Docker Compose部署至CentOS云服务器

一、项目介绍 系统模块 com.mingink |--mingink-api // 接口模块 | └──mingink-api-system // 系统接口 |--mingink-common // 通用模块 | └──mingink-common-core // 系统接口 |--mingink-gateway…

二叉树最长路径问题(x+1,x++,++x 问题详解)

首先遇到的问题是&#xff0c;在二叉树求最短路径中&#xff0c;DFS参数x的传入导致的结果不同问题 #include<iostream> #include<iomanip> #include<cstring> using namespace std; int maxi; char path[1000],ans[1000]; typedef struct BiTLnode{char da…

Restormer: Efficient Transformer for High-Resolution Image Restoration

Abstract 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可概括的图像先验方面表现良好&#xff0c;因此这些模型已广泛应用于图像恢复和相关任务。最近&#xff0c;另一类神经架构 Transformer 在自然语言和高级视觉任务上表现出了显着的性能提升。虽然 T…

SpringMVC基本原理

第一章&#xff1a;Java web的发展历史 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff1a;JSPJavaBean的模式&#xff0c;它的核心是Jsp页面&#xff0c;在这个页面中&#xff0c;Jsp页面负责整合页面和JavaBean&#xff08;业务逻辑&#xff09;&…

23.1 微服务理论基础

23.1 微服务基础 1. 微服务介绍2. 微服务特点3. 微服务优缺点4. 微服务两大门派5. 微服务拆分6. 微服务扩展6.1 服务扩展6.2 按需扩展7. 微服务重要模块******************************************************************************************************************

自然语言处理实验2 字符级RNN分类实验

实验2 字符级RNN分类实验 必做题&#xff1a; &#xff08;1&#xff09;数据准备&#xff1a;academy_titles.txt为“考硕考博”板块的帖子标题&#xff0c;job_titles.txt为“招聘信息”板块的帖子标题&#xff0c;将上述两个txt进行划分&#xff0c;其中训练集为70%&#xf…

超薄片式厚膜电阻

超薄片式厚膜电阻器具有许多碳电阻器特性;它们可以做得很小&#xff0c;而且大批量的成本非常低。同时厚膜电阻器具有高达10TW&#xff08;太欧姆&#xff09;的高电阻值、非常高的温度性能和高电压能力&#xff0c;并且本质上是无感的。它们适用于医疗、航空航天和井下&#x…

比Let‘s Encrypt更简单更齐全的免费证书申请教程

步骤一 打开JoySSL官网&#xff0c;注册属于你的专属账号&#xff1b; 永久免费SSL证书申请地址真正完全且永久免费&#xff01;不用您花一分钱&#xff0c;SSL证书免费使用90天&#xff0c;并且还支持连续签发。JoySSL携手全球权威可信顶级根&#xff0c;自研新一代SSL证书&…