微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序计数器的值如何递增?

如何解决程序计数器的值如何递增?

我正在创建一个原始虚拟机,该虚拟机受LC-3 VM(32位版本)的启发。我正在提供机器说明。执行完第一条指令后,PC将如何知道第二条指令的位置。

是否有一种特殊的方法可以系统地将指令存储在内存中,以便PC知道下一条指令的地址

示例-所有指令都以线性方式存储,例如在memory [0] =指令1,memory [1] =指令2等中。

谢谢您的帮助。

解决方法

这取决于您的处理器体系结构是RISC还是CISC。在您询问的上下文中,CISC处理器的指令大小与Intel处理器一样,大小在1到14字节之间。如果是RISC,则每个指令大小都是固定的,例如4字节,就像ARM处理器一样。程序的所有指令依次存储在主存储器中。处理器控制单元决定增加PC多少。主存储器中的指令将按顺序 读取。

因此,在CISC架构中,从主存储器读取的单个8字节可以包含多达8个'1字节'指令,例如Intel处理器中的重复性'inc ax'指令。发送第一条指令进行解码后,控制单元将PC递增1。但是,在另一种极端情况下,可能会出现一条指令,例如'add REG,[BASE + INDEX + OFFSET]',该指令可能需要13个字节来存储所有指令中存在的信息(操作码+ REG ID +基地址+索引+一些偏移)。对于这样的指令,将需要两个存储器读取操作来获取完整的指令。发送解码后,控制单元会将PC递增13。

对于RISC来说很简单。按说明大小(2,4,...)递增PC。

只有分支时例外。在这种情况下,通常会在执行阶段重置PC值。

通常将指令和数据分组(在某些处理器体系结构中进行了细分)并分别存储。代码段将以某种返回或退出指令结尾。如果将PC设置为用于存储数据的某个内存地址,则处理器的控制单元将按照指令对其进行处理。毕竟,数据和指令都是位序列!控制单元将无法区分。防止这种异常通常是操作系统或程序员的角色(如果没有操作系统,例如在微控制器上)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。