32位cpu寻址小结(转载)

【Win32汇编】五种寻址方式 寻址公式一:[立即数] 读 MOV ECX,DWORD PTR DS:[DEFF45] 写 MOV BYTE PTR DS:[DEFF45],CL LEA LEA EAX,DWORD PTR DS:[DEFF45] 寻址公式二:[reg] 读 MOV ECX,DWORD PTR DS:[EAX] 写 MOV BYTE PTR DS:[EAX],AH LEA LEA ECX,DWORD PTR DS:[EAX] 寻址公式三:[reg + 立即数] . 阅读详情

  32位cpu 地址线扩展成了32位,这和数据线的宽度是一致的。因此,在32位机里其实并不需要采用“物理地址=段:偏移”这种地址表达方式。原来在16位机里规定的每一个段不大于64kb在32位机里也不是必要的。所以,对于32位机来讲,最简单的方法就是用一个32位数来标识一个字节的存储地址,寻址时只要给出一个32位数就可以直接找到地址。这种地址储存模型就属于“平展储存模型”。

  但是,新产品一般都希望遵循“向下兼容”这个原则。所以,32位机里完整的保留了16位寻址模式。即:寻址能力为1M;分段机制;每段不超过64kb。这就是通常所说的"实模式"。在地址储存模型中属于“实地址储存模型”。

   其次,考虑到程序通常都是功能化的模块,所以分段虽然不是必要的,但分段却能大大提高编程者管理程序的效率。故而32位机也采用了段+偏移的模式来寻址。但与实模型不同的是,由于地址线和数据线宽度一致,因而,每个段最大可以到4G,并且段基址也是32位的无需进行左移处理。在地址储存模型中这属于“段地址储存模型”。然而需要注意的是,在32位机里,虽然通用寄存器,标志寄存器等都扩展成了32位,但是段寄存器却依然是16位的(为什么不做改变??我猜可能是这样便于向下兼容)。所以在32位寻址时,段寄存器里放的不再是段基址(位数不够,放不下)而是一个选择子。这个选择子对应了一个64-bit长的描述符,64-bit的描述符里有32-bit是段基址。所以原来在16位机里通过段寄存器一步就可以找到段基址,而现在在32位机里分成了两步:先找选择子,然后通过选择子找段基址。段基址找到了,再加上偏移地址,物理地址就找到了。看样子,32位段模式寻址已经介绍清楚了。其实,这里头的故事还远没有讲完。

    在上面简述的过程中,很容易发现有两个问题没有交待。(1)CPU是如何将选择子与描述符对应起来的?(2)既然是64-bit的描述符,32位用来表示基地址,那么余下的32位是干什么用的?另外,当32位机发展起来的同时,操作系统也有了长足进步,单任务模式的DOS被多任务的windows所取代。也就是说,现在驻留在内存中的往往不止是一个程序,而很可能是多个程序同时在内存中。现在又没有了段大小的限制,程序之间便很有可能相互抢地址,如果核心程序被破坏,计算机就会崩溃。这就好比在马路上走车,如果只有一辆车开,怎么开都可以,但是如果车多了不制定个交通规则,车便会抢道,道路就会瘫痪。所以,在多任务的情况下,必须给寻址也制定一个“交通规则”,这样才能保证多任务系统有序的工作。制定什么样的规则呢?首先,既然程序是在无意识的情况下抢占了别的程序的地址,那么如果在寻址时包含一个查询的过程就可以有效的避免抢地址的情况发生。也就是说,先得问一问那个地址是不是已经有程序段占用了?同时已占上地址的程序段除了告知CPU自己的基地址外还应该告诉CPU自己的长度信息。这样别的程序段才能方便地查询。第二,多任务寻址最好应该包含优先级别的内容,已备紧急情况下为核心程序让道。这好比在马路上,一般情况下车是遵守规则的,但如果是警车或救护车执行任务时,就可以优先抢占别的车的道。所以,还应该定义一个优先级。然后,由占上地址的程序段告诉CPU自己的优先级别。总的来讲,原来在16位机里很单纯的一个“段”的概念现在变得复杂了。如同人的成长过程,刚开始的时候思维总是很幼稚的,相应的也只能解决简单的问题,只有当你的思维摆脱幼稚的时候,才有能力解决更为复杂的事情。现在CPU摆脱了幼稚的16位,它在描述“段”的时候当然不应该像16位时那么肤浅。在32位机里,“段”有三个要素:基地址,长度,属性(属性里包含了优先级和其它的一些内容)。为了能一次完整的引用或者给出这三个要素,需要新定义一个数据结构。这个结构就是前面所提到的描述符,每一个描述符都占有64-bit,有足够的长度来包含段的三个要素。当然,现在内存中不止一个程序,而且程序也不止一个段,所以描述符也不会有一个,而是很多个。最简单的管理方法,就是将所有的描述符集中起来放在一块连续的存储空间里,然后给各个描述符排上序号。当要找某一个特定的描述符时,只要先找到这块连续的存储空间然后给出序号就可以了。这些集中起来的描述符形成了一张表,所以通常被叫做描述符表。所以,想找到一个段的信息,首先要找到描述符表。也就是说,找特定的描述符先要知道描述符表的基地址。在32位cpu中,有一个48位的专用寄存器用来存放全局描述符表的信息,这个寄存器叫做GDTR。其中,高32位给出了全局描述符表的基地址,低16位给出了描述符表的长度限制。所以,一张全局描述符表最长可以是64kb。那么,最多可以放64kb/8b=8k个描述符。所以如果想在其中选择任意一个描述符,用13位就可以办到了。在32位cpu中,16位段寄存器的高13位就用来存放特定描述符的序号。其实,现在段寄存器的功能就是选择描述符,正因为如此,通常也把段寄存器叫做选择器。那么,经过冗长的介绍,现在32位段寻址的过程已经大体依稀浮现在眼前了:在段寄存器里找到序号,在GDTR中找到全局描述符表的基地址,然后就可以找到目的描述符。再从描述符中取出段的基地址,然后加上偏移地址,这样就得到了段的“物理地址”。

     真是令人兴奋,这样的寻址过程为执行多任务提供了有力的保障,可以想象这是计算机执行性能上的一次飞跃!从此高速的cpu再也不会为无用武之地发愁了,它可以最大限度的发挥自己速度快的优势,同时处理好多个任务。是的,当我们眼前出现了新的景象的时候,我们有理由兴奋。但是,我们不应该就此满足。我们应该沿着新天地撇给我们的一丝亮光,继续前行,去找到这片新天地。人就是在这样的前行中不断让事情变得更完美。到这里,我们对于寻址过程的了解,只是开了一个头而已,但这是一个好头,我们体会到了32位cpu的强大优势。这足以让我们对完整的32位CPU寻址充满了期待。让我们鼓舞士气,沿着前人的足迹继续前行吧!

     我们知道,程序代码和数据必须驻留在内存中才能得以运行,然而系统内存数量很有限,往往不能容纳一个完整程序的所有代码和数据,更何况现在是多任务系统,想让内存驻留所有任务程序显然不太可能。老式系统就是将程序分割成小份,只让当前系统运行它所有需要的那部分留在内存,其它部分都留在硬盘。当系统处理完当前任务片段后,再从外存中调入下一个待运行的任务片段,而且这个工作是由程序员自行完成。显然这增加了程序员的负担。
      由此针对多任务系统发展了一种虚拟内存技术。虚拟内存技术就是一种由操作系统接管的按需动态内存分配的方法,它允许程序不知不觉中使用大于实际物理空间大小的存储空间(其实是将程序需要的存储空间以页的形式分散存储在物理内存和磁盘上)。虚拟内存是将系统硬盘空间和系统实际内存联合在一起供进程使用,给进程提供了一个比内存大得多的虚拟空间。在程序运行时,把虚拟地址空间的一小部分映射到内存,其余都存储在硬盘上(也就是说程序虚拟空间就等于实际物理内存加部分硬盘空间)。当被访问的虚拟地址不在内存时,则说明该地址未被映射到内存,而是被存贮在硬盘中,因此需要的虚拟存储地址随即被调入到内存;同时当系统内存紧张时,也可以把当前不用的虚拟存储空间换出到硬盘,来腾出物理内存空间。       这样,为了提高系统性能,发展了虚拟内存技术,那么相应的,32位cpu也应该发展新的寻址技术来管理虚拟内存。这是通过页机制来实现的。
       因为使用页机制的原因,前面提到的通过段机制转换得到的地址仅仅是作为一个中间地址——线性地址了,该地址不代表实际物理地址,而是代表整个进程的虚拟空间地址。还得有一个将虚拟地址转换成物理地址的过程。

       让我们来认识一下页机制。它就是把内存分成一个一个连续的页,每页大小4kb。与段不同,页不是程序功能块的体现。一个程序功能块可能占用好多个页。现在内存就像一本书了,一页一页的,每页的容量都是相等的。当然,我们很快可以联想到,要想能够很快的找到某页,最好给这本书分个章或者节什么的,然后逐级地向下查询。这就是32位cpu里页目录和页表所起的作用。页目录的长度是4kb,它最多可以包含1024个页目录项,每个页目录项32-bit,包含了页表的地址和有关信息。所以,页目录把4Gb空间分成了1024个页组,每个页组4MB的大小。页表的长度也是4kb,1024个页表项,每个页表项32-bit,包含页的地址和其它信息。这样,4MB的页组又被分成了1024个页面,每个页面大小4kb。所以找到某一个页就是先查页目录再查页表这么一个过程。为了找到页目录,我们需要知道其基地址。在32位cpu里,CR3寄存器里高20位放的就是页目录的地址,因为页目录的低12位总是0,这样保证页目录始终是页对齐的(每页大小4kB)。再来看一看前面通过32位段机制找到的线性地址。其高10位是页目录的偏移地址,一共1024个页目录用10位就可以标识可能的最大偏移了。加上CR3,就可以找到页目录,然后再通过页目录找到页表的基地址,线性地址的中间10位放的是页表的偏移量,这样就找到了页表。最后页表的基地址再加上CR3最低12位所表征的页表的偏移地址就找到了页,这个页的地址就是最终的物理地址。

      前面提到,之所以采用页机制是为了虚拟内存技术。所以页目录也好,页表也好,除了地址信息外还有一些属性信息,比如,当前页表是不是在内存中等等。这样才能方便系统管理虚拟内存实施换进换出的功能。这里就不详述了。

      总的来讲,32位寻址先通过32位段机制找到一个32位地址,如果没有采用分页,那么它就是物理地址。否则,只是一个线性地址,然后再通过CR3,页目录,页表找到页的地址,它才是最终的物理地址。其实,还用很多细节没有涉及到,比如这里提到的描述符表是全局描述符表,实际上还有局部描述符表,再比如描述符只重点介绍了地址位,优先级位和其它属性位都没有介绍。但是,一个完整的寻址图像已经展现在我们眼前了。它包含了32位CPU里的所有重要机制。剩下的问题不妨采取暂不过问,现用现学的方法。


本文来自优快云博客,转载:http://blog.youkuaiyun.com/zqf5816/archive/2009/09/25/4594806.aspx

spring-ai 1.0.0 学习(四)——提示词管理 摘要:本文介绍Spring AI中提示词管理的最佳实践。首先展示基础样例,指出直接传递用户输入的局限性。随后分析优质提示词应包含系统消息、上下文信息、输出结构和问答样例四要素。文章详述两种实现方式:链式调用(使用ChatClient构建器)和传统对象创建方法。进阶部分涵盖核心接口(Prompt、Message等)、消息类型、模板渲染配置(支持自定义)及提示词工程技巧(如RAG、任务分解)。最后提及高级功能如少样本模板和提示词库。全文强调结构化提示词对提升AI输出质量的关键作用,并展示Spring AI的灵活 阅读详情

相关推荐

谷歌倾斜摄影数据获取以及转换3DTiles介绍

解析谷歌倾斜模型数据,再一键设置无人值守的情况下,快速将谷歌倾斜摄影模型数据转成3DTiles数据,并在Cesium上进行流畅漫游缩放显示,效果优于官方3DTiiles格式数据

cyber_room的博客 5335

[计算机组成原理]-32/64位、寻址能力

寻址能力 CPU的寻址能力与它的地址总线位宽有关,而我们通常说的CPU位宽指的是数据总线位宽,它和地址总线位宽半毛钱关系也没有,自然也与寻址能力无关。

XJYSober的博客 1万+

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 376

32位cpu寻址小结

 32位cpu 地址线扩展成了32位,这和数据线的宽度是一致的。因此,在32位机里其实并不需要采用“物理地址=段:偏移”这种地址表达方式。原来在16位机里规定的每一个段不大于64kb在32位机里也不是必要的。所以,对于32位机来讲,最简单的方法就是用一个32位数来标识一个字节的存储地址,寻址时只要给出一个32位数就可以直接找到地址。这种地址储存模型就属于“平展储存模型”。  但是,新产品一般都

zqf5816的专栏 2746

FPGA实战:手把手教你用Verilog实现Modbus CRC16校验(附完整代码)

本文详细介绍了在FPGA中实现Modbus RTU协议CRC16校验模块的完整实战方案。针对硬件设计中的时序、资源与性能挑战,文章从算法原理出发,提供了清晰的Verilog模块接口、状态机设计、查表ROM实现及优化策略,并附带了完整的可综合代码与测试平台,帮助工程师高效构建稳定可靠的工业通信系统。

weixin_29164185的博客 432

TMC5130/TMC5160步进电机驱动芯片深度解析与工程实践

步进电机驱动芯片是精密运动控制系统的物理执行核心,其性能直接决定定位精度、运行噪声与系统鲁棒性。基于电流闭环控制与电压前馈调制的混合驱动原理,现代智能驱动芯片如TMC51X0系列实现了微步插补、堵转检测和片上运动规划等关键技术突破。这类芯片通过SPI寄存器级配置实现StealthChop静音驱动与SpreadCycle高动态响应模式的无缝切换,在3D打印、CNC、机器人关节等场景中显著提升能效比与控制带宽。本文围绕TMC5130与TMC5160的硬件架构差异、寄存器操作时序、驱动模式物理机制及FreeRTO

weixin_35797963的博客 408

七种寻址方式(32位地址的寻址方式)

在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址...

weixin_30912051的博客 1153

图解电动汽车:电动汽车电控系统

电动汽车的电控系统通常包含三个子控制系统 —— 整车控制器、电池管理系统、驱动电机控制器。 整车控制器 VCU 整车控制器 VCU(Vehicle Control Unit)作为电动汽车的中央控制单元,是整个控制系统的核心,也是各个子系统的调控中心。VCU 的主要功能就是协调管理整车的运行状态,包括采集电机及电池状态,采集加速踏板信号、制动踏板信号、执行器及传感器信号,根据驾驶员的意图综合分析做出相应判定后,监控下层的各部件控制器的动作,它负责汽车的正常行驶、制动能量回馈、整车发动机及动力电池的能量管理、.

程序员「阿基米东」的编程之旅 1万+

32位处理的寻址方式

32位处理器兼容16位处理器的寻址方式,可以运行传统的16位代码。值得说明的是,16处理器的内存寻址方式不允许在指令中使用栈指针寄存器SP。但是在32位处理器上,允许内存操作数中使用栈指针寄存器ESP。

m0_72827793的博客 532

Open3D 实现CSF布料模拟算法【2025最新版】

CSF布料模拟算法在open3d模块下的实现,博客长期更新,本文最近更新时间为:2025年1月16日。。

点云侠的博客 5745

2025目标检测新方向:弱监督目标检测的最新论文研究与应用

2025目标检测新方向:弱监督目标检测的最新论文研究与应用 ,人工智能,计算机视觉,大模型,AI,本文聚焦2025年弱监督目标检测新方向,阐述其基础概念,包括弱监督学习定义、标注形式及面临的定位不准等挑战。介绍最新论文研究的多种算法,如基于点标注的算法等,还涉及相关模型、应用领域,以及评价指标、数据集、实现工具框架,分析未来趋势与补充挑战及解决方案,为该领域研究提供全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

32 位cpu寻址

32位cpu寻址小结_ziyu2000_新浪博客 (转载)200016  收藏于  2011-06-22  阅读数:1    收藏数:2   公众公开  原文来源   修改<span style=

tuxiaobing1983的专栏 450

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

java秋招题小结3

1.电脑硬盘转速 一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。按照同样的计算方法,一个5400(转/每分钟)的硬盘,平均旋转延迟时间为60×1000÷5400÷2=5.56毫秒。二者相比,7200转理论上比5400转快15%,但是实际速度只比后者提高了不到百分之...

weixin_30608503的博客 965

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

开始进行 64 位 Windows 系统编程之前需要了解的所有信息(转载)

原文地址:http://www.microsoft.com/china/MSDN/library/Windev/64bit/issuesx64.mspx?pf=true#ECE 本文讨论: • 64 位版本 Windows 的背景信息 • 适当地利用 x64 体系结构 • 使用 Visual C++

543

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

指针的大小到底是由谁决定?是多少?

小结:貌似8位单片机可以有16位寻址长度。之前看到有些8位机可以跑16位寻址,一直不解,所以找了下资料。参考了下文,如果寻址地址是16,可能编译器也是16位的,这样8位机的指针其实也可以是16位长度的。 另外,据说指针长度是和计算机字长有关的。一般说8位机的字长也是8位,会不会字长也是对应着寻址长度呢?这些疑问只好以后碰到datasheet再考虑了。 下文转自 http://blog.

Norton的专栏 1676

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux学习小结20160613

2016_06_13第一台计算机1946.2 ENIAC 中国还在倒蒋呢32位与64位计算机区别在cpu上 32字节与64字节 在内存上 2^32 2^64位区别--最大寻址空间32位最大支持2^32约等于4GB内存硬盘ssd与hdd 京东淘宝上对比价...

weixin_34273479的博客 76

关于CPU CACHE工作机制的学习

关于CPU CACHE工作机制的学习

ugghhj的博客 310

初学汇编

地址线 –》 控制线 –》数据线 8088CPU的数据总线宽度为8 8086CPU的数据总线宽度为16 控制总线:CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。 小结: 汇编指令是机器指...

weixin_30588827的博客 126

汇编语言从入门到精通-5微机CPU的指令系统2

微机CPU的指令系统 5.2.2 标志位操作指令 标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。 1、进位CF操作指令 a、清进位指令CLC(Clear Carry Flag):CF←0b、置进位指令STC(Set Carry Flag):CF←1c、进位取反指令CMC(Complement Carry Flag):CF←not CF 2、方向位DF操作指令 a、清方...

weixin_30716141的博客 148

第八章 数据处理的两个基本问题

1、计算机是进行数据处理、运算的机器,那么有两个最基本的问题:1.处理的数据在什么地方?2.要处理的数据有多长? 2、定义描述性符号:reg(register 寄存器)和sreg(segment register 段寄存器)。Reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di。sreg集合包括:ds、ss、cs、es(扩展段)。 3...

weixin_30607659的博客 168

汇编学习笔记

第一单 基础知识 小结 汇编指令是机器指令的助记符,同机器指令一一对应 每一种cpu都有自己的汇编指令 CPU可以直接使用的信息在存储器中存放 在存储器中指令与数据没有任何区别,都是二进制信息 存储单元从0开始,到127结束 一个存储单元可以存储8个bit,即8个二进制数据 每一个cpu芯片都有许多管脚,物理称为"金手指",这些管脚和总线相连,可以说管脚引出总线,一个cpu可...

weixin_30652879的博客 65

Linux内核分析第一周课程小结

Linux内核分析第一周课程小结   张家骥 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一部分:课堂笔记 Linux内核采用AT&T汇编格式。   ABI:Application Binary Interface  1.指令编码  2.寄存器约定  3.大多

标题获取失败 948

理解 Linux 的虚拟内存(虚拟地址、物理内存)

前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑)。我之前了解一些操作系统的概念,主要是毕业后对自己大学四年的荒废比较懊恼,觉得自己有些对不起计算机专业出身,于是在工作之余抽出时间看了哈工大在网易云课堂的操作系统公开课,自己也读了一本讲操作系统比较浅的书 《Linux内核设计与实现》,而且去年自己用 C 写简单的服务器时,也追根究底了解了更多的系统底层知识。

Dontla的博客 487

x86和arm架构【转载】

x86 和 arm 详解

weixin_43139024的博客 971
上一篇: 二进制通俗讲解
下一篇: 汇编学习杂记(1~8章)
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值