计算机系统基础 2 Intel 中央处理器

Intel微处理器的发展史 

INTegrated ELectronics(集成电子)的缩写
先后推出的中央处理器:
Intel4004、Intel8008、Intel8080/8085、8086/8088、80186、80286、i386、i486
Pentium(奔腾)、Pentium II、Pentium III、Pentium IV
Xeon(至强)、Xeon3、Xeon5、Xeon7
Itanium(安腾)、Itanium 2

           Core(酷睿)、i3、i5、i7、i9 系列

微处理器的结构分成两种:
IA-32  和  IA-64
推出 80486 后,英特尔以 IA Intel Architecture )指称该架构,也称  x86-32 架构。
由于从 8086 开始其后产品以 80186 80188 80286 i386 i486 等为代号命名,因而被外界称为 x86 架构, 奔腾系列、 Xeon 系列、酷睿系列全部是基于 x86 架构的产品, 它属于复杂指令集架构, Complex Instruction Set Computer, CISC。
IA-64 架构是一种全新处理器架构,与 x86 不能兼容, 为了与 IA-32 兼容,设计了 x86-64 结构 (也称 Intel64 x64 )。 扩充的内容有:物理内存、指令集、 CPU 寄存器结构、应用程序的虚拟内存。
x86 32 位到 64 位的变化,并没有像从 16 位到 32 位的变化那样,在 系统软件层 面带来了 革命性的变化 (例如页式地址管理、多任务的引入等等), 操作系统仍然使用以前的各种机制来对硬件进行管理。

CPU架构控制单元、运算单元和存储单元,这三部分由CPU内部总线连接,一个控制单元和一个运算单元统称一个核(Core)。多核CPU是指多个核组织(多个控制单元和多个运算单元),共用存储单元。

Intel x86微处理器结构

总线接口部件

        总线:传递信息的一组公用导线。

        系统总线(System Bus):从微处理器引出的若干信号线,CPU通过它们与内存和外设交换信息。

        地址总线Address Bus  (单向总线)

        数据总线Data Bus

        控制总线Control Bus

        寄存器 Register 

                存储01串,可以是操作数、操作数地址等

                通用寄存器

                寄存器组中有832的寄存器(通用寄存器)EAXEBXECXEDXESIEDIESPEBP

            EAX: 累加器         Accumulator(可看成是某存储单元的地址

            EBX: 基址寄存器     Base

            ECX: 计数器         Count

            EDX: 数据寄存器     Data

            ESI: 源变址寄存器   Source Index

            EDI: 目的变址寄存器 Destination Index

            ESP: 堆栈指示器     Stack Pointer

            EBP: 堆栈基址寄存器 Base Pointer

                还可细分:

                16位寄存器:AXBXCXDXSIDIBPSP

                8位寄存器:AHALBHBLCHCLDHDL

                Q: 将EAX的低16位全部置成0,指令如何写? 

                MOV   AX, 0

                Q: 将EAX的低8~15位全部置成1,指令如何写?

                MOV   AH, 0FFH

                Q: 将EAX的低16位全部置成0,指令如何写?

                    MOV  AX, 0

or                SUB  AX, AX

or                XOR  AX, AX

or                AND  AX, 0

or                SHL  AX, 16

or                IMUL  AX, 0

                x86-64CPU 中的通用寄存器:

16 64 位的通用寄存器

            rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp、r8、 r9、 r10、r11、r12、r13、r14、r15

这些寄存器的低双字、最低字、最低字节都可被独立的访问,各自有自己的名字:
16 个低双字寄存器( 32 位)

                   eax、ebxecxedxebpesiediespr8d -- r15d

16 个低字寄存器 ( 16 位)

                   ax、 bxcxdxbpsidispr8w -- r15w

16 个 最低字节寄存器 ( 16 个)

                   al、blcldlbplsildilsplr8b -- r15b

                注:AH、BH、CH、DH 仍可使用,但一条指令不能同时使用旧的高字节(AH、BH、CH、DH)和一个新的最低字节寄存器(bpl、sil、dil、spl、r8b - r15b)

                REX(Register Extension)

        REX 前缀字节是用于增强寄存器扩展的 x86 和 x86-64 指令集体系结构中的一个特殊字节。REX 前缀字节通常出现在指令的开头,用于扩展指令的功能,主要用于以下几个方面:

  1. 64 位寻址:在 64 位模式下,REX 前缀字节用于指示使用 64 位寄存器进行操作。默认情况下,大多数指令在 64 位模式下会使用 32 位或 64 位的寄存器,但是在需要时,REX 前缀字节可以强制指定使用 64 位寄存器。

  2. 扩展寄存器编号:REX 前缀字节还可以用于扩展寄存器的编号范围。在 64 位模式下,寄存器编号被扩展以支持额外的 8 个寄存器,分别是 R8 到 R15。REX 前缀字节允许在指令中使用这些额外的寄存器。

  3. 扩展操作码:在某些情况下,REX 前缀字节还可以用于扩展操作码以支持新的指令操作。

REX 前缀字节的组成部分为: 0 1 0 0 W R X B
REX.W :为 1 时,操作数是 64
REX.R :用来扩展 ModR / M 中的 Reg 字段
REX.X :用来扩展变址寄存器的编号
REX.B :  用来扩展基址寄存器的编号
        标志寄存器 
保存一条指令执行之后, CPU所处状态的信息及运算结果的特征。
        32位CPU中的标志寄存器是32位,称EFLAGS;
        64位CPU中的标志寄存器是64位,称RFLAGS;
        16位 CPU 中的标志寄存器是 16 位,称 FLAGS
        32位的 EFLAGS 包含 16 FLAGS 的全部标志位且向下兼容。

        条件标志位
  1.         Sign  Flag         符号标志:运算结果的最高二进制位为1,则SF=1,否则SF=0
  2.         Zero  Flag         零标志:运算结果为0,则 ZF1,否则 ZF0
  3.         Overflow  Flag   溢出标志:加法:2个同符号数相加,结果的符号位发生了改变,则 OF=1
  4.         Carry  Flag       进位标志:运算时从最高位向前产生了进位(或借位),CF=1;否则 CF=0

add 指令不区分有符号数加法和无符号数加法。

    不论将 x, yz 定义为 unsigned short,还是short,

        执行 :  

x = 32766;   
y = 3;   
z = x+y;

         z 都是 8001H; 并且标志位设置是相同的。

         两次显示结果不同,即将 8001H分别当成有符号数、无符号数解释,得到的结果不同。

对于 符号数运算,是否溢出可判断 OF 是否为 1

        对于符号数运算,是否溢出可判断 CF 是否为 1

        控制标志位

        1.方向标志DF   (Direction  Flag)

                串操作指令中使用,DF=0,正向(低地址向高地址)处理数据串。DF =1 (Down)

        2.中断允许标志IF (Interrupt Flag)

                IF=1,CPU开中断,CPU响应外设的中断请求。

        3.跟踪标志 TF (Trace Flag)

                TF=1,CPU处于单步工作方式,即每执行完一条指令后,CPU自动产生一个类型为1的中断,使程序单步执行。

        系统标志位

1.IO特权标志 IOPL

        IOPL共占2位,指定了要求执行I/O指令的特权级。如果CPU当前特权级等于或高于IOPL时,则I/O指令可以执行,否则产生一个保护异常。

2.嵌套任务标志 NT

        控制中断返回指令的执行。NT=1,CPU当前执行的任务,嵌套在另一个任务之中,待执行完该任务时,应返回原来的任务中;否则,按堆栈中保存的断点返回。

3.重启动标志 RF

        该标志位与系统调试寄存器一起使用,以确定是否接受调试故障。当一条指令成功执行时,CPU将RF清0。若RF置1时,下一条指令的所有调试故障被忽略,否则接受调试故障。

4.虚拟8086方式标志 VM

        当VM置1时,说明CPU在虚拟8086方式下工作,否则在保护方式下工作。

        指令预取部件和指令译码部件 

指令 预取 部件: 将要执行的指令从主存中取出,送入指令排队机构中排队。
指令 译码 部件: 从指令队列中读出指令并译码,再送入译码指令队列排队供执行部件使用。指令的提取、译码、执行重叠进行,形成了 指令流水线。

        指令指示器 

                保存着下一条将要被CPU执行的指令的偏移地址(简称EA)

                EIP/IP的值由微处理器硬件自动设置,不能由指令直接访问,执行转移指令、子程序调用指令等可使其改变。

        五段流水线

  •           取指令(IF):根据PC的值从存储器取出指令。
  •           指令译码(ID):产生指令执行所需的控制信号。
  •           取操作数(OF):读取存储器操作数或寄存器操作数。
  •           执行(EX):对操作数完成指定操作。
  •           写回(WB):将操作结果写入存储器或寄存器。

流水线的冲突/冒险(hazard)情况 

Hazards:指流水线遇到无法正确执行后续指令或执行了不该执行的指令

结构冒险  (hardware resource conflicts,硬件资源冲突):

 现象:同一个部件同时被不同指令所使用    

 一个部件每条指令只能使用1次,且只能在特定周期使用

设置多个部件,以避免冲突。如指令存储器IM 和数据存储器DM分开

        数据冒险 (data dependencies,数据相关):

现象:后面指令用到前面指令结果数据时,前面指令的结果还没产生

转发(Forwarding/Bypassing旁路) 或 前半周期读后半周期写

Load-use冒险不能通过转发解决,需阻塞(stall)一个时钟周期

编译程序优化指令顺序

        控制 (分支) 冒险 (changes in program flow,改变控制流):

现象:转移或异常改变流程,后继指令在目标地址产生前已被取出

采用静态或动态分支预测

编译程序优化指令顺序(分支延迟)

         分段部件和分页部件

         虚拟存储地址是概念性的逻辑地址,并非实际空间地址,程序员编写程序时不用考虑物理存储器的大小;
        存储管理单元MMU进行虚地址到实地址的自动变换,地址变换对应用程序是透明的。

在 x86 架构中,分段部件是指用于管理内存分段的硬件组件或机制。在早期的 x86 处理器中,内存管理是通过分段来实现的,这种方式允许程序使用不同的段来存储不同类型的数据或指令,并且每个段都可以有自己的大小和访问权限。分段部件负责管理这些段,并确保程序可以正确访问它们。

分段部件主要包括以下几个方面的功能:

  1. 段描述符(Segment Descriptor): 分段部件使用段描述符来描述每个段的属性,例如基地址、段限制、访问权限等。段描述符存储在全局描述符表(Global Descriptor Table,GDT)或局部描述符表(Local Descriptor Table,LDT)中。

  2. 段选择子(Segment Selector): 段选择子是用于标识和选择段描述符的标识符。它包含了指向段描述符的索引以及当前段的特权级别(即所处的特权级别,如内核态或用户态)。

  3. 段寄存器(Segment Registers): x86 架构中有多个段寄存器,如 CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)等。这些寄存器用于存储当前正在使用的段选择子,从而确定当前正在访问的段。

  4. 段选择(Segmentation): 分段部件根据段选择子找到对应的段描述符,并根据其属性对内存访问进行限制和保护。例如,通过段描述符中的访问权限位可以控制段的读写权限,以及是否允许执行代码等。

  5. 地址转换(Address Translation): 分段部件负责将逻辑地址(段选择子和偏移量)转换为线性地址,然后进一步转换为物理地址,以便访问内存中的实际数据。

        分段部件中的段寄存器 

                6个16位的段寄存器:

                        CS:代码段寄存器  Code  Segment 

                        DS:数据段寄存器  Data  Segment

                        SS:堆栈段寄存器  Stack Segment

                        ES:附加数据段寄存器

                        FS

                        GS

        “.CODE”表示代码段,该段的选择子是段寄存器CS;

        “.DATA”表示数据段,该段的选择子是段寄存器DS;

           C程序中定义的全局变量就存储在数据段中

        “.STACK”表示堆栈段,该段的选择子是段寄存器SS;

          C程序中定义的局部变量、函数参数存储在堆栈段中。

x86的3种工作方式 

1.实地址方式(简称实方式)

  • 可以使用32位寄存器和32位操作数
  • 可以采用32位的寻址方式。
  • 此时的32CPU16CPU一样,只能寻址1MB物理存储空间,程序段的大小不超64KB,段基址和偏移地址都是16位的,这样的段也称为“16位段”。

2.保护方式

        使用32位地址线,寻址4GB的物理存储空间,段基址和段内偏移量都是32位的。

        提供了支持多任务的硬件机构,能为每个任务提供一台虚拟处理器来仿真多台处理器;

        实施执行环境的隔离和保护,对不同的段设立特权级并进行访问权限检查,以防不同的程序之间的非法访问和干扰破坏,使操作系统和各应用程序都受到保护。

3.虚拟8086方式

  • 在保护方式下运行的类似实方式的工作环境;
  • 能充分利用保护方式提供的多任务硬件机构、强大的存储管理和保护能力;
  • 多个8086程序可以通过分页存储管理机制,将各自的1MB地址空间映射到4GB物理地址的不同位置,从而共存于主存且并行运行。

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

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

相关文章

布局Uniswap(UNI)的基本逻辑和bitget钱包使用教程

我们都知道,牛市里板块轮动是很明显的,这个概念涨完下一个概念涨! 背后本质是场内的筹码在交换的过程,抓住这种交换的规律,可以大大提高资金的使用效率和总体收益! 目前行情继续稳中有进,大饼也…

html--花瓣

代码 <!DOCTYPE html> <html lang"en" ><head> <meta charset"UTF-8"> <title>Petals</title><link rel"stylesheet" href"css/style.css"></head><body><div class"…

记录工作中莫名其妙的bug

1、问题&#xff1a;办公室的电脑突然除了我之外&#xff0c;都不能访问我们的线上系统了 原因&#xff1a;因为是内网&#xff0c;同事有刚刚升级了Windows11&#xff0c;配置的DNS被清了&#xff0c;还有同事换了公司的新电脑&#xff0c;还没有配DNS 位于&#xff1a;C /Win…

postman---postman参数化

我们在做接口测试的过程中&#xff0c;都会遇到同一个接口不同的数据&#xff0c;每次去一个个填写数据就太麻烦了&#xff0c;今天我们一起学习下如何通过postman进行参数化 一、参数化 参数化就是1个接口请求不同的数据&#xff0c;我们可以通过把请求的数据放入到一个文件…

创业板指399006行情数据API接口

# 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399006&order2Python示例 import requestsurl f"https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399…

某团mtgsig1.1和_token逆向

前言 只作学习研究&#xff0c;禁止用于非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 目前已成功逆向&#xff01;&#xff01; 1.1版本适用于h5和小程序 使用python调用js逆向脚本&#xff0c;获取mtgsig 效…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中&#xff0c;通过关键点检测技术可以实现对用户动作的精准捕捉和分析&#xff0c;从而进行统计计数和规范性姿态识别。 统计计数&#xff1a;比如在做瑜伽、健身操等运动时&#xff0c;系统可以通过对人体关键点&#xff08;如手部、脚部、关节等&#xff09;的…

Xinstall助力web唤起iOS,打破平台壁垒,实现无缝跳转

在移动互联网时代&#xff0c;web与App之间的跳转已成为用户日常使用中不可或缺的一部分。然而&#xff0c;对于iOS系统的用户来说&#xff0c;web唤起App的过程往往充满了挑战和不便。这时&#xff0c;Xinstall作为一款专业的移动开发者服务工具&#xff0c;为开发者们提供了解…

分析型数据库的主要使用场景有哪些?

如今数据已经成为了企业和组织的核心资产。如何有效地管理和利用这些数据&#xff0c;成为了决定竞争力的关键。分析型数据库作为数据处理领域的重要工具&#xff0c;为各行各业提供了强大的数据分析和洞察能力。基于分析型数据库&#xff08;Apache Doris &#xff09;构建的现…

2核4G云服务器能支持多少人同时访问?性能测评来了

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&#xff0c;经阿腾云测试&a…

支付模块-基于消息队列发送支付通知消息

消息队列发送支付通知消息 需求分析 订单服务作为通用服务&#xff0c;在订单支付成功后需要将支付结果异步通知给其他对接的微服务&#xff0c;微服务收到支付结果根据订单的类型去更新自己的业务数据 技术方案 使用消息队列进行异步通知需要保证消息的可靠性即生产端将消息…

【echarts中解决适配窗口大小的问题】

适配窗口大小 一、基础适配方案&#xff1a;remflexible.js布局二、echart图表适配1.resize函数2.使用resize的前提&#xff01;重点&#xff01;不然resize极有可能失效 一、基础适配方案&#xff1a;remflexible.js布局 vscode插件&#xff1a;cssrem 编写好的less文件保存后…

什么又是线程呢??

线程&#xff1a; 线程可以并发的执行&#xff0c;但是线程的地址是可以共享的 进程与线程的比较&#xff1a; 进程>线程 线程分三种&#xff1a; 用户线程 只有用户程序的库函数来 用户线程 因为操作系统感知不到 线程&#xff0c;如果有线程在运行&#xff0c;然后不交…

Docker使用(二)Docker安装和常见典型操作

Docker使用(二)Docker安装和常见典型操作 二、软件安装 1、Docker安装 &#xff08;1&#xff09;环境准备 [rootlocalhost ~]# uname -r 3.10.0-327.el7.x86_64 # cat /etc/os-release &#xff08;2&#xff09;卸载旧版本 $ sudo yum remove docker \ ​ docker-cli…

内衣洗衣机怎么选?推荐四大表现突出的宝藏内衣洗衣机

近年来&#xff0c;家庭洗衣机的标准容量有了很大的提高&#xff0c;从5公斤、6公斤发展到9公斤和10公斤。大容量的洗衣机可以在家里清洗大尺寸的衣服和床单被子。不过&#xff0c;因为洗衣机里的所洗的衣服都是比较混杂的&#xff0c;所以很多时候&#xff0c;由于内衣袜子和婴…

HTML

什么是HTML&#xff1f; HTML是一门语言&#xff0c;所有的网页都是用HTML这门语言编写出来的 HTML&#xff08;HyperText Markup Language&#xff09;&#xff1a;超文本标记语言 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff…

Registry dubbo的注册中心

1. 架构说 注册中心。注册中心&#xff08;Registry&#xff09;在微服务架构中的作用举足轻重&#xff0c;有了它&#xff0c;服务提供者&#xff08;Provider&#xff09; 和消费者&#xff08;Consumer&#xff09; 就能感知彼此。从下面的 Dubbo 架构图中可知&#xff1a;…

零信任SDP是什么,有什么作用

物理边界曾经是可信网络和不可信网络之间的有效分割。防火墙通常部署于网络的边缘&#xff0c;基于静态策略来限制网路流量。位于防火墙内部的用户会被授予较高信任等级来访问企业的敏感资源&#xff0c;因为他们被默认是可信的。 然而随着云计算、移动互联、物联网、人工智能…

【Java探索之旅】数据类型与变量 字面常量 整型变量

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、字面常量二、数据类型三、变量3.1 变量概念3.2 语法格式 四、整型变量4.1 整型变量…