
在之前的学习中,我们知道JMP指令会让CPU把PC(程序计数器)的值改为7,意味着接下来要执行的指令存放在主存地址为7的这个地方。
对于JMP这个指令来说,它的地址码所指向的就是真实的一个地址。
还能发现,这段代码是从主存地址为0的这个单元开始往后存储的,刚好JMP指令想要跳转到的那一条指令的地址就是7这个地址。
所以把PC的值直接改为7,并不会导致这个程序的运行错误。
但是我们知道计算机的主存同一时刻可能存在很多个程序正在并发地运行,意味着我们不可能保证当前我们要运行的这个程序一定可以从地址为0的这个地方开始存储。
所以假设我们要运行的这段程序是从主存地址为100的地方开始存储, 对于JMP这个指令来说,它的地址码的含义就会出现错误。
如果我们依然是按照之前的那种解释方式来解读这个地址码的真实含义的话,那CPU执行到这条指令的时候,意味着跳转到地址为7的地方运行指令,这显然是错误的。
那么对于这个例子,我们应该如何解读这个地址码7的含义呢?
可以这么来看,由于我们的代码起始地址是100,这个7我们可以看为基于这个起始地址往后的一个偏移量。
也就是这个地址的含义应该是100+7=107。

那如果是3应该如何解读呢?由于PC会在指令结束后自动+1,从PC所指的地址往后偏移3个单位。

数据码的解读方式可能有很多种,我们如何区分一条指令的地址码应该用什么方式解读呢?
通常来说,可以在地址码的前边加上这样的几个比特位,用来标识地址码采用的寻址方式。
求出操作数的真实地址,称为有效地址(EA),指令里包含的形式地址,用单独的一个A来表示。

直接寻址

间接寻址

寄存器间接寻址

隐含寻址

立即寻址

知识回顾

偏移寻址
基址寻址

变址寻址



基址&变址复合寻址

相对寻址


知识回顾

硬件如何实现”数“的比较

堆栈寻址


知识回顾

Share Article
Generate a share poster or copy the link to share this article.
Continue reading
Take another route
A consistent pick from other articles
Last updated on , 395 days ago
Some content may be outdated

Comments