如果我理解正确,程序计数器指向要执行的指令的地址,并且在大多数情况下,您将向程序计数器添加四个值以前进到下一个指令地址。但是假设你有一个程序计数器指向内存中的一个单词(例如单词15),并且你想前进到下一条指令,那么你是否应该直接将15加到15以获得下一条指令?任何解释将不胜感激程序计数器?
程序计数器?
回答
那东西被称为指令指针。一旦处理器对当前指令进行解码,就会发现它占用了多少字节,并且知道要向当前指令指针值添加多少以前进到下一条指令,以便当前指令执行时处理器知道下一步该做什么。
因此,例如,处理器以指令指针存储值15开始,如您的示例 - 它看起来是在该地址处发生了什么,恰好是占用5个字节的指令,没有问题 - 它将5加到当前值并且这产生20,因此指令指针现在存储值20,处理器然后执行当前指令。
你永远不会直接进入程序计数器 - CPU通过执行你的程序为你做。作为程序员,您可以通过执行各种跳转指令(有条件的,无条件的,跳转到子例程等)来操作程序计数器。当您需要向程序计数器添加偏移量时,一种特殊情况是当您在与位置无关的代码中分支时。但是,即使在这种情况下,您也不会将指令的大小添加到程序计数器中:而是通过执行“分支到相对地址”来提供要跳转到的位置的偏移量。
当我们写一个引导程序时,如何跳转到位于绝对地址0x4000的应用程序代码?在这种情况下,我们将直接将程序计数器更改为绝对地址。 – eepty 2016-07-14 10:48:41
@eepty这就是第二句话所说的:你用跳转指令来做,而不是用寄存器设置指令。 – dasblinkenlight 2016-07-14 11:51:51
- 1. 程序计数器溢出?
- 2. Java程序的程序计数器寄存器值
- 3. 程序集计数程序
- 4. xCode应用程序点击计数器
- 5. 带分支的Verilog程序计数器
- 6. 程序集8086:计数器问题
- 7. Ruby数学计算器程序
- 8. 应用程序重置计数器
- 9. reactJS应用程序版本计数器
- 10. 程序计数器没有前进
- 11. 货币计数器C程序
- 12. 步计数器应用程序,如计步器在android
- 13. 序言,计数器
- 14. 贷款计算器程序
- 15. 排序比较计数器
- 16. 计算分数[Java程序]
- 17. 程序中的servlets计数
- 18. 元程序对位计数
- 19. 估计计数排序方程
- 20. 线程和新计数器
- 21. 什么是具有断点的线程的程序计数器?
- 22. 帧指针/程序计数器/数组溢出
- 23. 应用程序脚本中的字数计数器
- 24. 没有函数包含所选帧的程序计数器
- 25. 程序C计数奇数位总数
- 26. 如何使一个Java程序打开计算器应用程序“X”次数
- 27. 完成小程序计算器
- 28. 计时器对象Windows应用程序
- 29. iphone中的计步器应用程序
- 30. 在程序上设置计时器?
你的例子是有道理的,但如果你添加什么取决于什么在那个地址?? PC + 4来自哪里? – Ockham 2012-04-11 12:23:09
@ user28694:这取决于处理器。一些处理器具有指令集,其中所有指令具有相同的长度,因此它们可以无条件地加+4。一些处理器会有可变长度的指令,他们将决定使用指令本身的第一个字节处理哪个指令。 – sharptooth 2012-04-11 12:27:05
是不是[MIPS指令都是32位长](http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? – 2012-04-11 12:49:14