如果我理解正确,程序计数器指向要执行的指令的地址,并且在大多数情况下,您向程序计数器添加四个以前进到下一个指令地址。但是说你有一个程序计数器指向内存中的一个单词(例如单词15)并且你想要前进到下一条指令,你是否想直接将4加到15以获得下一条指令?任何解释将不胜感激
答案 0 :(得分:6)
那个东西叫做指令指针。一旦处理器解码当前指令,它就会找到它占用的字节数,并知道要添加到当前指令指针值多少以前进到下一条指令,这样当当前指令执行时,处理器知道下一步该做什么。
因此,例如处理器以指令指针存储值15开始,如下例所示 - 它看起来发生在该地址的情况,恰好有一个占用5个字节的指令,没问题 - 它为当前加5值和这产生20,因此指令指针现在存储值20,然后处理器执行当前指令。
答案 1 :(得分:2)
您永远不会直接推进程序计数器 - CPU通过执行您的程序为您完成。作为程序员,您可以通过执行各种跳转指令(条件,无条件,跳转到子程序等)来操作程序计数器。当您需要向程序计数器添加偏移时,一种特殊情况是分支与位置无关的代码。但是,即使在这种情况下,也不要将指令的大小添加到程序计数器中:而是通过执行“分支到相对地址”来提供要跳转的位置的偏移量。