首页 > 编程语言 >关于程序计数器PC

关于程序计数器PC

时间:2023-01-10 11:15:06浏览次数:43  
标签:8086 32 程序 地址 PC 计数器 指令 寄存器

关于程序计数器PC

16年408真题

18.某计算机主存空间为4GB,字长为32位,按字节编址,采用32位字长指令字格式。若指令
按字边界对齐存放,则程序计数器(PC)和指令寄存器(IR)的位数至少分别是(B)

A.30,30 B. 30,32 C. 32,30 D. 32,32

做了这一道题不禁在想,PC究竟存储的是字地址还是字节地址?依据答案的说法,似乎对此并无硬性要求,即二者均可。因题目描述位“至少”所以按字地址算。

在查阅资料后发现程序计数器PC甚至“不是实际存在的”。

PC应该是存在与理论设计层面的寄存器,不同的指令集都有对PC功能的实现,但可能不止使用一个寄存器,这个或者说这组寄存器也不一定叫PC,甚至叫“程序计数器”这个名字也仅是出于历史原因,更合理的名字似乎应该是IAR。所以对于此问题应当分指令集讨论。

在存储程序概念中,使用一个寄存器来保存当前运行的指令地址是绝对必要的。尽管这个寄存器更为合理的名字可能应该是指令地址寄存器(instruction address register),但是出于历史原因,这个寄存器通常称为程序计数器(program counter),在MIPS体系结构中缩写为PC。jal指令实际上将PC+4保存在寄存器$ra中,从而将链接指向下一条指令,为过程返回做好准备。

——《计算机组成与设计:硬件/软件接口(原书第五版)》P65

对于MIPS指令集来说,PC是真真实实存在的,且存储的是字地址,因此MIPS作为指令字长32位的RISC执行的是PC+4而非PC+1。另外值得注意的是,MIPS中bep指令的偏移量是字地址,所以需要左移两位,MIPS系统结构数据通路中是由执行移位操作的部件的,所以如果有某个指令集的PC存储的是字地址也不是不可实现的。

012

对于x86这样的CISC来说就要稍微复杂些了,例如8086,是由代码段寄存器CS(Code Segment)和指令指针寄存器IP(Instruction Pointer)组合实现类似PC功能的。8086内部寄存器均为16位,但可利用地址加法器来产生20位地址,具体计算时,要将段寄存器的内容左移4位,然后再与IP的内容相加。此外8086并非用一条指令取一条,而是可以取多条指令放在指令队列缓冲器中。

1)8086的指令队列为6个字节,8088的指令队列为4个字节。不管是8086还是8088,都会在执行指令的同时,从内存中取下面1条指令或几条指令,取来的指令就放在指令队列缓冲器中。这样,一般情况下,8086/8088执行完一条指令就可以立即执行下一条指令,而不像以往的计算机那样,轮番地进行取指令和执行指令的操作,从而提高了CPU的效率。

2)地址加法器用来产生20位地址。8086可用20位地址寻址1MB的内存空间,但8086内部所有的寄存器都是16位的,所以需要由一个附加的机构来根据16位寄存器提供的信息计算出20位的物理地址,这个机构就是20位的地址加法器。

比如,一条指令的物理地址就是根据代码段寄存器CS和指令指针寄存器IP的内容得到的。具体计算时,要将段寄存器的内容左移4位,然后再与IP的内容相加。假设CS=FEOOH,IP=0200H,此时指令的物理地址为FE200H。

——《接口技术》P22

013

标签:8086,32,程序,地址,PC,计数器,指令,寄存器
From: https://www.cnblogs.com/AncilunKiang/p/17039539.html

相关文章

  • 从webview跳转到小程序报错,'wx' is not defined
    项目有一个需求是从h5中跳转回小程序里,在小程序内报了这个错误'wx'isnotdefined尝试了下面两种方法都没有用npminstallweixin-js-sdk,使用这个包没有效果<scr......
  • 在Chrome中安装扩展程序
    场景:在Chrome中安装NetBeansConnector插件,将下载好的crx文件拖到扩展程序页面时,发现该插件并没有安装成功。分析:浏览器默认禁用了拖入安装.crx扩展的功能,导致crx文件......
  • 基于PLC控制的汽车制造系统如何实现远程监控和程序上下载
    如今,中国制造的新能源汽车出口到世界各地。数据显示,2022年前11个月,我国汽车出口278万辆,超过德国,成为全球第二大汽车出口国,受到越来越多消费者的青睐。新能源汽车的火爆着代......
  • C語言程序结构
    前言今天突發奇想,決定開始不定期的寫C語言一系列教程,目的既是為了我給自己寫一點筆記,也是給各位提供一個好的學習路徑,沒有什麽好說的了,直接上教程。學習C語言須知在學習......
  • gRPC入门与实操(.NET篇)
    为什么选择gRPC历史长久以来,我们在前后端交互时使用WebApi+JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF+XML方式)。WebApi+JSON是优选的,很重要的一点是......
  • 面向对象程序设计 第二章 C++简单的程序设计
    目录C++语言的特点1.兼容C语言·它保持了C的简洁、高效和接近汇编语言等特点。·对C的类型系统进行了改革和扩充。·C++也支持面向过程的程序设计,不是一个纯正的面......
  • 链接进入小程序后接口token失败,返回登录页授权后返回当前页面
    case401:letpages=getCurrentPages()wx.setStorageSync('before_login_page',......
  • 224. 划分数(挑战程序设计竞赛)
    地址https://www.papamelon.com/problem/224有n个无区别的物品,将它们划分成不超过m组,求划分方法数模M的余数输入输入第一行有三个整数n、m、M1≤m≤n≤100......
  • 230109_50_RPC底层原理
    Hessian与jdk序列化方法对比,hessian的序列化长度更短packagecom.bill.rpc09;importcom.bill.rpc.common.User;importcom.caucho.hessian.io.Hessian2Input;impor......
  • C++ATM取存款机模拟程序[2023-01-09]
    C++ATM取存款机模拟程序[2023-01-09]ATM取存款机模拟程序要求:设计一个程序,当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM取款机系统,用户可以按照以下......