PC值的改变(相对寻址与绝对寻址) 您所在的位置:网站首页 位寻址例子 PC值的改变(相对寻址与绝对寻址)

PC值的改变(相对寻址与绝对寻址)

2024-07-16 12:23| 来源: 网络整理| 查看: 265

我们知道,计算机中有很多的寄存器,他们是32位的,其中每一位的值要么是0要么是1。在汇编语言中,每一条要执行的指令都放在一个寄存器中,而这个将要执行指令的地址我们就需要放在PC(程序计数器)中,而这个PC也是32位的,那么此时就有一个可寻址的范围。是从-2的31次方 到 2^31 - 1吗。 那么在这里有两种寻址方式,相对寻址与绝对寻址。其中beq和bne采用相对寻址,j采用绝对寻址。 相对寻址 在这里插入图片描述其中immediate占16位,我们已经知道,每一条指令都要4个字节,那么我们我们这里就以字为单位,immediate * 4就是要跳转的指令个数了。那么这个可以寻址的范围就是从当前指令向上 - 2的15次方 ,向下 PC + 2的15次方 - 1个指令. 如下,其中PC+4这一项是由于硬件原因。可以简单的在Mars上验证一下就可以。 如果进行分支: PC = (PC + 4) + (immediate * 4) 绝对寻址 在这里插入图片描述 其中的target address占据26位 现在, 可以指定32位地址中的26位. 优化: 和前面分支跳转一样,将只跳转到字对齐的地址, 因此最后两位总是00. 因此,可以默认最后二位为00,而不必专门指定. 现在指定了32位地址中的28位 其它4位如何得到呢? 我们定义,从PC处取得最高4位. 从技术上讲, 这意味着我们无法跳转到内存的任何地方, 但对99.9999…%的情况,这是正确的,因为程序没有那么长 那么此时的PC就是:New PC = { PC[31…28], target address, 00 } 附上一道例题来加以说明 在这里插入图片描述 2.24 对于跳转指令j来说,PC采用绝对寻址, 即PC = PC31…28 : (address × 4),其中address是26位。 如果原地址是PC(原) = 0x20000000 那么按照定义新的PC(新) = 0x2******* 不可能为0x40000000. 对于条件分支指令beq来说,PC采用相对寻址, 即PC = (PC + 4) + (immediate * 4),其中immediate是16位, 每执行一条语句,PC += 4;(0x40000000-0x20000000) / 0x4 = 0x5000000则实际要跳转的指令数为5 * 16^6 - 1 = 5 * 2^24 - 1 >> 2^15 - 1.故对于beq来说不可以。 综上,j和beq指令都不可以将PC的值从0x2000000变为0x4000000.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有