热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

x86寄存器:MBR/MDR和指令寄存器

如何解决《x86寄存器:MBR/MDR和指令寄存器》经验,为你挑选了1个好方法。

根据我的阅读,IA-32架构有10个32位和6个16位寄存器.

32位寄存器如下:

数据寄存器 - EAX,EBX,ECX,EDX

指针寄存器 - EIP,ESP,EBP

索引寄存器 - ESI,EDI

控制寄存器 - EFLAG(EIP也被归类为控制寄存器)

16位寄存器如下:

代码段:它包含要执行的所有指令.

数据段:它包含数据,常量和工作区域.

堆栈段:它包含过程或子例程的数据和返回地址.

额外细分(ES).指向额外数据的指针.

F段(FS).指向更多额外数据的指针.

G段(GS).指向更多额外数据的指针.

但是,我找不到有关当前指令寄存器(CIR)或存储器缓冲寄存器(MBR)/存储器数据寄存器(MBR)的任何信息.这些寄存器是否被称为其他东西?这些寄存器是32位吗?

我假设它们是32位的,并且在这种架构下最常用的指令长度不超过4个字节.从观察来看,许多指令似乎都在4个字节以下,例如:

推动EBP(55)

MOV EBP,ESP(8B EC)

LEA(8D 44 38 02)

对于更长的指令,CPU将使用前缀代码和其他可选代码.较长的指令需要多个周期才能完成,这取决于指令长度.

我是否正确,因为有问题的寄存器长度为32位?IA-32架构中是否还有其他寄存器,我也应该注意这些寄存器?



1> Peter Cordes..:

不,您所谈论的寄存器是一个实现细节,在现代x86 CPU中不作为物理寄存器存在.

x86未指定您在玩具/教学CPU设计中找到的任何实现细节.x86手册仅指定体系结构可见的内容.

英特尔和AMD的优化手册详细介绍了内部实现,它与您的建议完全不同.现代x86 CPU将架构寄存器重命名为更大的物理寄存器文件,从而实现无序执行,而不会导致写入后写入或读后读取数据危险.(请参阅为什么mulss在Haswell上只需要3个周期,与Agner的指令表不同?有关寄存器重命名的更多详细信息).有关无序执行程序的基本介绍,请参阅此答案,以及实际Haswell核心的框图.(并记住物理芯片有多个核心).


与简单或玩具微体系结构不同,几乎所有高性能CPU都支持未命中和未命中的错过(多个未完成的缓存未命中,而不是完全阻止等待第一个完成的内存操作)


可以构建一个具有单个MBR/MDR的简单x86; 如果原始的8086和386个微体系结构具有类似内部实现的一部分,我不会感到惊讶.

但是,例如Haswell或Skylake核心可以从/到L1d缓存每个周期执行2次加载和1次存储(请参阅如何快速缓存?).显然他们不能只有一个MBR.相反,Haswell有72个加载缓冲区条目和42个存储缓冲区条目,它们都是内存顺序缓冲区的一部分,它支持无序执行加载/存储,同时保持只有StoreLoad重新排序发生/可见的错觉到其他核心.

从P5 Pentium开始,自然对齐的高达64位的加载/存储保证是原子的,但在此之前只有32位访问是原子的.所以,是的,如果386/486有一个MDR,它可能是32位.但即便是那些早期的CPU也可以在CPU和RAM之间进行缓存.

我们知道Haswell和后来在L1d高速缓存和执行单元之间有一个256位路径,即32 字节,而Skylake-AVX512具有用于ZMM加载/存储的64字节路径.AMD CPU将宽矢量操作分成128位块,因此它们的加载/存储缓冲区条目大概只有16个字节宽.

Intel CPU至少将相邻存储区合并到存储缓冲区内的同一缓存线,并且还有10个LFB(线路填充缓冲区)用于L1d和L2之间(或从核到L3或DRAM)的挂起传输.


指令解码:x86是可变长度的

x86是可变长度指令集; 在前缀之后,最长的指令长于32位.即使对于8086也是如此.例如,add word [bx+disp16], imm16长度为6个字节.但是8088只有一个4字节的预取队列来解码(相对于8086的6字节队列),所以它必须支持解码指令而不必从内存中加载整个内容.8088/8086解码前缀一次1个循环,4个字节的操作码+ modRM绝对足以识别指令其余部分的长度,因此它可以解码它然后获取disp16和/或imm16,如果它们不是'还没来.现代x86可以有更长的指令,尤其是SSSE3/SSE4需要许多强制性前缀作为操作码的一部分.

它也是一个CISC ISA,因此在内部保持实际的指令字节并不是很有用; 您不能像使用简单的MIPS那样直接将指令位用作内部控制信号.

在非流水线CPU中,是的,某处可能存在单个物理EIP寄存器.对于现代CPU,每条指令都有一个与之关联的EIP,但许多指令在CPU内部同时处于运行状态.有序流水线CPU可能会将EIP与每个阶段相关联,但是无序CPU必须在每个指令的基础上跟踪它.(实际上每个uop,因为复杂的指令解码到超过1个内部uop.)

现代x86采用16或32字节的块进行读取和解码,每个时钟周期解码多达5或6条指令,并将解码结果放入队列中,以便前端发布到核心的无序部分.

另请参阅/sf/ask/17360801/中的CPU内部链接,特别是David Kanter的文章和Agner Fog的微型指南.


顺便说一句,你遗漏了x86的许多控制/调试寄存器.CR0..4对于启用保护模式,分页和各种其他内容的386至关重要.您可以仅使用GP和段regs以及EFLAGS在实模式下使用CPU,但如果包含操作系统需要管理的非通用注册表,则x86具有更多架构寄存器.


推荐阅读
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
Smitty
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有