weixin_40677240 2023-07-13 23:49 采纳率: 25%
浏览 40

请问,为什么 PC 值比 当前指令地址多 两个字长,而不是 三字长?

按道理说,取指的过程如下:

[MAR] <- [PC] 同时 [PC] <- [PC] + 1字长

[MBR] <- [[MAR]] 同时 [PC] <- [PC] + 1字长

[IR] <- [MBR] 同时 [PC] <- [PC] + 1字长

此时 IR 获取到指令时,应该是 [PC] <- [PC] + 3字长 啊?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-14 08:21
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      根据问题描述,关于为什么在取指令过程中,PC 值增加的字长数是两个而不是三个,可以从程序计数器(PC)的角度进行解释。

      在传统的指令周期中,PC的更新是在取指令阶段的末尾进行的,也就是在指令执行的最后一个字节之后。因此,在指令执行的每个循环中,PC会增加一个字长,即一个指令的长度。

      根据问题描述的取指过程,可以简单理解为从内存中读取指令,每次读取一个字长,然后将PC增加一个字长。在这种情况下,PC的更新是在指令执行的过程中进行的,而不是在指令执行之后。

      因此,在该设计下,PC会在指令执行的最后一个字节之前就被增加一个字长,以便读取下一条指令。因此,PC值比当前指令地址多两个字长。

      具体代码示例如下所示:

      int PC = getCurrentPC();
      int instructionLength = getInstructionLength(PC);
      
      // 读取指令的逻辑
      int MAR = PC;
      int MBR = readMemory(MAR);
      int IR = MBR;
      
      // 更新PC
      PC += instructionLength;
      updatePC(PC);
      

      根据以上分析,PC值比当前指令地址多两个字长,而不是三个字长是因为PC的更新在指令执行过程中进行的,而不是在指令执行之后。这种设计可以更高效地实现指令的连续执行,减少了取指令和执行指令之间的等待时间。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 7月13日

悬赏问题

  • ¥15 求网页搭建平台会的联系我
  • ¥15 尼康光电绝对值编码器(相关搜索:绝对值|编码器)
  • ¥20 INCA标定工具ER亮红灯
  • ¥15 hive on spark
  • ¥15 星穹铁道中的ai自动战斗逻辑
  • ¥15 国产浪潮电脑跳转个别网页有问题
  • ¥15 SimpleHook 一下android fake模块的VIP日期
  • ¥15 如何在VBA中利用word的错词提示功能识别word文本中的错别字并标注
  • ¥15 jupyter notebook无法识别的空格,如何解决?(语言-python)
  • ¥15 自动回复评论的小插件