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

第二十九章 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.hqwc.cn/news/539822.html

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

相关文章

【华为 ICT HCIA eNSP 习题汇总】——题目集16

1、下面哪一个最适合使用室内分布方式部署 WLAN&#xff1f; A、运动场 B、办公室 C、高校单排宿舍 D、广场 考点&#xff1a;无线局域网 解析&#xff1a;&#xff08;C&#xff09; 室内分布方式部署 WLAN 一般适用于需要大面积、高密度、高质量无线覆盖的场所&#xff0c;从…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记10_中间人

1. 中间人 1.1. 从积极的意义上讲&#xff0c;比价网站与搜索引擎这些“网络中间人”的存在有效提高了市场透明度&#xff0c;看似打造出了一片阻绝价格歧视、改善社会福利的乐土 1.2. 类似于“网络聚合器”的互联网巨头已经成为线上市场的重要中介 1.2.1. 网络聚合器实际上…

[Kali] 安装Nessus及使用

在官方网站下载对应的 Nessus 版本:Download Tenable Nessus | TenableDownload Nessus and Nessus Managerhttp://www.tenable.com/products/nessus/select-your-operating-system这里选择 Kali 对应的版本 一、安装 Nessus 1、下载得到的是 deb 文件,与

第四百零一回

文章目录 知识回顾示例代码经验总结 我们在上一章回中介绍了MethodChannel的使用方法&#xff0c;本章回中将介绍EventChannel的使用方法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 知识回顾 我们在前面章回中介绍了通道的概念和作用&#xff0c;并且提到了通道有不同的…

centos7 install rocketmq 宿主机快速搭建RocketMQ单机开发环境

为什么采用宿主机而不采用 Docker 方式快速搭建 在搭建 RocketMQ 测试环境时&#xff0c;我们可以选择在宿主机上直接安装和配置&#xff0c;也可以使用 Docker 容器来快速搭建。然而&#xff0c;为什么我们选择了在宿主机上安装而不是使用 Docker 方式呢&#xff1f; 调整配置…

Android14之报错:error:add its name to the whitelist(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Vue手写模拟步骤条

效果图&#xff1a; 如果要使用element的步骤条就需要强行修改样式&#xff0c;参考之前的那篇步骤条。这里我采用手写div 代码&#xff1a; 思路是给最外层的div一个左边框&#xff0c;给里面的step-item设置左边框为图片&#xff0c;通过定位来移动。 <div class"m…

代码训练LeetCode(11)删除有序数组中的重复项II

代码训练(11)LeetCode之删除有序数组中的重复项II Author: Once Day Date: 2024年3月14日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff…

【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理

教程地址&#xff1a;https://huggingface.co/docs/diffusers/quicktour 文章目录 环境扩散模型噪声残差的作用原理&#xff0c;文字编码如何给入Unetschedulerguidance_scalescheduler.init_noise_sigma训练时候的反向传播 环境 python3.10安装环境&#xff1a; pip install…

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题&#xff0c;报错 1. 报错提醒如下图2. 原因本地安装多个cuda版本导致native寻找到多个版本&#xff0c;导致报错3. 具体配置需要根据你的显卡型号来确认 1. 报错提醒如下图 2. 原因本地安装多个cuda版本导致…

C++——类和对象(1)

1. 面向对象和面向过程对比 当涉及到编程范式时&#xff0c;两个主要的方法是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;和面向过程编程&#xff08;Procedural Programming&#xff09;。这两种编程范式在解决问题和组织代码时有着不同…

每周一算法:迭代加深搜索

题目链接 加成序列 题目描述 满足如下条件的序列 X X X&#xff08;序列中元素被标号为 1 、 2 、 3 … m 1、2、3…m 1、2、3…m&#xff09;被称为加成序列&#xff1a; X [ 1 ] 1 X[1]1 X[1]1 X [ m ] n X[m]n X[m]n X [ 1 ] < X [ 2 ] < … < X [ m − 1 ]…