假设当前的PC是0x00400010(增量后)并且目标标签的值为0x00400040。指令中常量的二进制值是多少?MIPS PC和标签跟踪
beq $s0, $s0, target
我不太确定如何解决这个问题。我希望有一个提示,或解释如何找到解决方案。
假设当前的PC是0x00400010(增量后)并且目标标签的值为0x00400040。指令中常量的二进制值是多少?MIPS PC和标签跟踪
beq $s0, $s0, target
我不太确定如何解决这个问题。我希望有一个提示,或解释如何找到解决方案。
我不知道我是否理解你的问题。我假设你要求的是将被编入指令的偏移量。
由于目标位于0x00400040且当前PC位于0x00400010,所以偏移量可能为0x00000030(因为0x00400040 - 0x00400010 = 0x00000030)。这可以很容易地转换成您要求的二进制格式:
0000 0000 0000 0000 0000 0000 0011 0000
但请注意,我不知道MIPS。在一些处理器架构,偏移量编码到指令
(target PC) - ((current PC) + (size of current instruction))
因为我不知道MIPS,我不知道beq
指令的字节大小是什么。因此,我无法计算这种情况下的偏移量。如果您告诉我beq
指令的大小,我会对该答案进行编辑并添加该答案。此外,在大多数处理器架构中,大多数指令都会限制相对偏移量。再一次,我不知道MIPS,但有可能是偏移被限制在16,12甚至8位。在这种情况下,为了得到实际的二进制偏移量表示,从上面给出的二进制数字左边除去零,直到只剩下用于存储偏移量的位。
编辑(考虑到繁忙的海狸的评论)
在MIPS,似乎说明对准到32位/ 4字节。这允许存储所需的实际偏移量除以4(然后CPU读取偏移量并将其乘以4以计算实际目标)。优点是你可以存储更大的偏移与给定的位。换句话说,你以这种方式保存2个偏移位。
在你的例子中,PC应该跳过0x00000030
个字节来达到目标。存储在指令中的偏移量将是0x00000030/4
,它与0x00000030 >> 2
相同,即0x0000000C0
。你问的二进制表示:
0000 0000 0000 0000 0000 0000 0000 1100
当解码/执行指令时,CPU会自动相乘,通过四个偏移和这样回来的真正所需的偏移。
*指令中常量的二进制值是什么?* - 什么常数? – Marco
我不确定它是什么意思,当它要求的常数 – Andre
的二进制值请你更具体,因为我不明白你面临的问题?你不明白'beq'是做什么的?你不明白PC发生了什么?有什么问题? – Marco