第11章 32位x86处理器编程架构

第11章 32位x86处理器编程架构

IA-32(INTEL Architecture, 32-bit):INTEL 32位处理器架构简称IA-3,以8086处理器为基础发展起来的。该章重点介绍了IA-32处理器的工作方式和相关技术。

IA-32架构的基本执行环境

寄存器的扩展

32位处理器通用寄存器:包含EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP,它们的在原先16位处理器的AX、BX、CX、DX、SI、DI、BP、SP上扩展而来,结构如下图:

image

EFLAGS:标志寄存器FLAGS也从16位扩展到了32位。

访存方式:32位处理器为了兼容16位处理器,保留了分段模型;但是提供一种变通方案平坦模型(Flat Mode),即段基地址为:0x00000000,段长度为4GB的分段方式。

32位工作模式:32位处理器有自己的32位工作模式,书籍内称呼这种32位模式为32位保护模式(Protected Mode)。与之对应的16位工作模式称为实模式(Real Mode)。

  • 实模式:程序可以自由地访问不属于它的内存位置,不安全。
  • 保护模式:处理器要求在加载程序时,先定义该程序所拥有的段,然后才允许使用这些段,还附加了段界限、特权级别、类型等属性。

段选择器:32位模式下,CS、SS、DS、ES,保存的不再是16位逻辑段地址,而是段的选择子,用于选择所要访问的段,因此,这一部分也叫作段选择器

32位处理器增加了两个额外的段寄存器FSGS,这两个寄存器到底有什么作用?书中后面也没有提到,于是我去查了下资料,只能大概了解其意思。

  • FS(Flag Segment):标志段寄存器,指向当前活动线程的TEB结构。
  • GS(Global Segment):全局段寄存器,可能被用作全局段的基址寄存器。

麻省理工的手册上,DS、ES、FS、GS都是标记为Data Segment,没有具体的区分。使用上各操作系统也有不同,具体可以参考底部的一些链接。

基本的工作模式

实模式(Real Mode):实质上就是8086模式,16位模式。

保护模式(Protected Mode):IA-32处理器的32位模式。

一些发展历史整理成表格看的更清楚一些:

image

线性地址和分页

逻辑地址:段地址和偏移地址称为逻辑地址,偏移地址叫作有效地址(Effective Address, EA),在指令中给出有效地址的方式叫作寻址方式(Addressing Mode)。比如:

inc word [bx+si+0x06]

段的管理是由处理器的段部件负责进行的。段部件将段地址和偏移地址相加,得到访问内存的地址。一般来说,段部件产生的地址就是物理地址。

多任务:IA-32处理器支持多任务,多任务在分配内存时会产生内存碎片的问题。

分页:IA-32处理器支持分页功能,分页功能将物理内存空间划分成逻辑上的页。页的大小一般为4KB,通过使用页,可以简化内存管理。

线性地址:当页功能开启时,段部件产生的地址就不再是物理地址了,而是线性地址(Linear Address),线性地址还要经页部件转换后,才是物理地址。

image

现代处理器的结构和特点

流水线

流水线(Pipe-Line)技术:把一条指令的执行过程分解成若干个细小的步骤,并分配给相应的单元来完成,各个单元的执行是独立的、并行的。

一条指令的执行过程分为取指令、译码和执行三个步骤:

image

高速缓存

为什么要高速缓存:处理器速度快,内存和硬盘相对较慢,处理器要等待内存和硬盘,便无法全速运行。

  • CPU内寄存器纳秒(ns)级别;
  • 内存一般是动态存储器(DRAM),几十纳秒级别;
  • 硬盘,通常是毫秒级(ms)。

高速缓存(Cache):处理器与内存(DRAM)之间的一个静态存储器(SRAM),容量较小,但速度可以与处理器匹配。

缓存涉及到命中的问题:如果要访问的内容已经在高速缓存中,这称为命中(Hit);否则,称为不中(miss)。缓存不中,处理器需要重新装载高速缓存,该过程中所损失的时间称为不中惩罚(miss penalty)。

乱序执行

微操作(micro-operations):为了实现流水线技术,需要将指令拆分成更小的可独立执行部分。

一个微操作:有些指令非常简单,因此只需要一个微操作。

add eax,ebx

两个微操作:

add eax,[mem] ;拆分成两个微操作:
              ;  1.一个用于从内存中读取数据并保存到临时寄存器;
              ;  2.另一个用于将EAX寄存器和临时寄存器中的数值相加。

三个微操作:

add [mem],eax ;拆分成三个微操作:
              ;  1.一个从内存中读数据;
              ;  2.一个执行相加的动作;
              ;  3.一个用于将相加的结果写回到内存中。

乱序执行(Out-Of-Order Execution):一旦将指令拆分成微操作,处理器就可以在必要的时候乱序执行程序。

感觉乱序执行有点像并行,不相关的两个程序是可以并发执行的,从而提交效率。

寄存器重命名

寄存器重命名:在处理器内部,却有大量的临时寄存器可用,处理器可以重命名这些寄存器以代表一个逻辑寄存器,比如EAX。
image

寄存器重命名作用:为了提高指令的乱序执行,用临时寄存器代替原寄存器进行运算,等乱序执行完成后,再用临时寄存器内容替换原寄存器的内容,这个过程也叫做引退(Retirement)。

分支目标预测

清空(Flush)流水线:如果遇到一条转移指令,则后面那些已经进入流水线的指令就都无效了,就是要清空流水线。

流水线的问题:代码中经常存在分支,用哪个分支的代码填充流水线呢?用错误的分支填充流水线时,浪费的时间就越多。随着复杂架构下的流水线变得越来越长,程序分支带来的问题开始变得很大。让处理器的设计者不能接受,毕竟不中处罚的代价越来越高。

分支预测技术(Branch Prediction):分支预测的核心问题是,转移会发生还是不会发生。转移预测虽然很困难,但是可以通过统计学的方式分析概率。

比如下面这个例子:

    xor si,si    ;si清0
lops:
    ...
    cmp si,20    ;si和20比较
    jnz lops     ;si<20,不为0,继续循环

jnz指令第一次执行时,转移一定会发生,处理器可以预测。

分支目标缓存器(Branch Target Buffer, BTB):在处理器内部,有一个小容量的高速缓存器。处理器执行了一条分支语句后,它会在BTB中记录当前指令的地址、分支目标的地址,以及本次分支预测的结果。

32位处理器的寻址方式

16位处理器的内存寻址:允许使用基址寄存器BX或者BP,同变址寄存器SI或者DI结合,再加上8位或者16位的位移来寻址内存操作数。

image

例如:

mov ax,[bx]
mov ax,[bx+di]
mov al,[bx+si+0x02]

32位处理器的内存寻址:全部的32位通用寄存器作为基址寄存器 + 除ESP外的32位通用寄存器作为变址寄存器 * 1、2、4、8比例因子 + 位或者32位的位移。

image

例如:

add eax,[0x2008]         ; 有效地址是32位的(0x00002008)
sub eax,[eax+0x08]       ; 有效地址是32位的
mov ecx,[eax+ebx*8+0x02] ; 有效地址是32位的

参考资料

  • 80386 Programmer’s Reference Manual – Section 1.1
  • Operating Modes of 80386 Microprocessors - GeeksforGeeks
  • 2.3 寄存器 | Intel 80386 程序员参考手册
  • assembly - “FS”/“GS”寄存器的用途是什么?_Stack Overflow中文网
  • 寄存器由来 ES CS SS DS FS GS区别_gs寄存器-CSDN博客
  • The Intel 80386, part 11: The TEB - The Old New Thing
  • 计算机体系结构-寄存器重命名 - 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python专项进阶——初步认识Numpy库

NumPy是Numeric Python的缩写&#xff0c;一个优秀的开源科学计算库。 个人理解&#xff0c;NumPy是一个主要围绕着数值数组对象&#xff08;ndarray&#xff09;&#xff08;或叫做矩阵&#xff09;进行各种操作的对象、函数集合。提供很多实用的数学函数&#xff0c;涵盖线性…

【Python报错已解决】TypeError: expected string or bytes-like object

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;确保参数类型正确2.2 步…

知识库管理系统在企业数字化转型中的作用

引言 在数字化转型的浪潮中&#xff0c;企业正以前所未有的速度重塑其业务模式、运营流程和组织架构&#xff0c;以适应快速变化的市场环境和客户需求。这一过程中&#xff0c;知识库管理系统作为信息整合与知识共享的核心平台&#xff0c;发挥着举足轻重的作用&#xff0c;不…

antd-table使用报错的一次记录,rowkey的正确使用

each child in a list should have a unique "key" prop. Each record in table should have a unique key prop, or set rowKey to an unique primary key. 如果你在使用antd-table中报错如上&#xff0c;那么你应该是错误使用rowkey这个属性 正确使用方式&#xf…

【评估指标】Fβ-score

1. Fβ-score 概述 Fβ-score 是一种综合考量精确率&#xff08;precision&#xff09;和召回率&#xff08;recall&#xff09;的分类评估指标。其公式为&#xff1a; 1.1 Precision&#xff08;精确率&#xff09;&#xff1a;预测为正类的样本中&#xff0c;实际为正类的比…

Jupyter Notebook设置代码提示和自动代码补全

算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号滴滴我 文章目录 在使用Jupyter Notebook中&#xff0c;会出现Jupyter不像Pycharm一样&#xff0c;可以 自动补全代码以及 代码方法提示等功能&#xff0c;这时候就需要通过给Jupyter安装插件来进行实现。 执行步骤&#…

进程与计划任务

top 查看进程 x users 表示有几个shell开启 x stopped 前台任务在后台暂停firefox & 在后台运行&#xff0c;不在前面显示 ​​​​​​​这种方式常用于需要长时间运行且不需要即时交互的程序或命令&#xff0c;以便用户可以在终端中使用其他命令或进行其他操作&#…

conda环境打包 及 常见报错修改

正常打包命令 conda pack -n 自己的虚拟环境名 -o output_name.tar.gz示例&#xff1a; conda pack -n dassl -o dasslEnv.tar.gz出现报错1 (base) :~$ conda pack -n dassl -o output.tar.gz Collecting packages... CondaPackError: Cannot pack an environment with edita…

Brequinar (Synonyms: 布喹那; DUP785; NSC 368390) AbMole介绍

Brequinar&#xff08;布喹那&#xff09;是一种合成的喹啉羧酸类似物&#xff0c;也是有效的二氢乳清酸脱氢酶(DHODH)抑制剂&#xff0c;对人 的 IC50 值为 5.2 nM&#xff0c;可以通过抑制DHODH&#xff0c;从而阻断嘧啶的从头合成。此外&#xff0c;Brequinar还可诱导肿瘤的…

dcmtk生成RDSR中由于添加数据先后导致数据丢失错误的修复

1. 缘起 在尝试生成辐射剂量的结构化报告&#xff08;RDSR&#xff09;时&#xff0c;执行完相应的代码&#xff0c;小伙伴提醒我导出的数据中缺少了PID信息。 2. 分析和测试 首先分析之前文件的生成流程&#xff0c;如下所示&#xff1a; 对于设备信息和常规DCM信息的处理…

ADG切换RESOLVABLE GAP

一、现象 在切换ADG的过程中&#xff0c;需先关闭rac的二节点。 关闭后发现存在 &#xff1a;RESOLVABLE GAP 二、处置 1、分析解决GAP 2、拉起主备数据库的2节点 3、几分钟之后GAP消失 4、再次关闭主备库的2节点&#xff0c;开始切换&#xff0c;正常。

栈—数据结构

一、系统栈 系统栈&#xff08;System Stack&#xff09;&#xff1a; 用途&#xff1a;系统栈通常指的是调用栈&#xff08;Call Stack&#xff09;&#xff0c;它用于存储程序执行期间的函数调用信息。每当一个函数被调用时&#xff0c;系统栈会记录这个调用的状态&#xff0…

缓存对象反序列化失败

未定义serialVersionUID&#xff0c;会自动生成序列化号 新增了属性&#xff0c;序列号就变了&#xff0c;导致缓存对象反序列化失败。 所有缓存对象必须指定序列化id&#xff01; 那我如何找到未添加字段前 对象的序列化号呢&#xff1f;默认的序列化号是如何生成的呢&#…

商标异议后被撤三,积极答辩是关键!

近日一甘肃网友找到普推知产商标老杨&#xff0c;说遇到商标被异议想做答辩&#xff0c;问通过率如何&#xff0c;这些都需要提供对方异议的资料后详细分析后才可以判断&#xff0c;发现都过期了&#xff0c;根本无法做答辩&#xff0c;注册商标已经是无效。 网友提供的商标信息…

什么是PLC智能网关?PLC智能网关的技术特点及应用-天拓四方

在工业自动化蓬勃发展的今天&#xff0c;PLC作为控制系统的核心部件&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着信息化与工业化的深度融合&#xff0c;单一的PLC已经难以满足复杂多变的工业需求。因此&#xff0c;PLC智能网关应运而生&#xff0c;成为连接PLC与上…

uniapp+vue3实现双通道透明MP4播放支持小程序和h5

双通道透明MP4视频播放的截图 以下是合成后结果&#xff0c;二个合并在一起进行播放 下载资源&#xff0c;打开运行直接使用看到效果 https://download.csdn.net/download/qq_40039641/89715780

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…

对极约束及其性质 —— 公式详细推导

Title: 对极约束及其性质 —— 公式详细推导 文章目录 前言1. 对极约束 (Epipolar Constraint)2. 坐标转换 (Coordinate Transformations)3. 像素坐标 (Pixel Coordinates)4. 像素坐标转换 (Transformations of Pixel Coordinates)5. 本质矩阵 (Essential Matrix)6. 线坐标 (Co…

知识赋能:构建高效测试团队的关键

目录 ​​​​​​问题背景 知识库的重要性 新员工的融入与关键岗位的风险控制 知识库的构成 常见问题讨论 团队历史包袱重、老员工不配合&#xff0c;怎么办&#xff1f; 1. 明确愿景和目标 2. 激励与认可 3. 赋予责任与参与感 4. 循序渐进&#xff0c;逐步推进 5.…

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…