2015-11-10 232 views
1

我想下面的命令转换为十六进制:MIPS指令转换为16进制

beq $s1,$t3,label 

它也给该命令的地址是0x1500,标签地址为0x1000。

到目前为止,我知道beq euaels 4(hex)和reqisters的二进制值。

我知道,首先我需要转换为二进制,然后转换为十六进制,但我不明白如何处理标签地址。我是否需要将它除以4以获得价值?

任何帮助将是伟大的。

谢谢

回答

1

BEQ操作码为000100(二进制)。 为BEQ指令格式为:

OpCode|SR|DR|Offset 

其中

  • 操作码(6个比特)是000100
  • SR(5个比特)是10001$s1
  • DR(5bits)是01011对于$t3
  • 偏移量(16位)是一个16位有符号偏移量(s hifted 2倍)假设开始的PC分支后的下一条指令,应该是点(0x1000 - 0x1504)>> 2 = -0x141,它写在A2的赞美是1111111010111111

现在,您可以连接位域和他们写在十六进制,如果你想:

0001 0010 0010 1011 1111 1110 1011 1111这是0x122BFEBF

[编辑:如何计算加解释偏移]

至COMP ute必须减去PC + 4的值(PC代表分支指令的地址)和目标位置的地址。然后将该地址除以4(或右移两次)。由于偏移量在A2恭维语中编码,如果操作结果为负数,则必须应用A2的恭维语以获取编码值。

+0

嗨,谢谢你的回复。当我说beq是4时,我的意思是它的基数转换是4进制为十六进制,这是二进制0100. –

+0

您可以详细说明如何计算立即数?我看到你拿到了标签地址,并从中减去了PC指令,然后向右移动了2.对不起,但我不明白你是如何得到'-0x141'的,不应该是(-0x504/4 )= - x126?谢谢 –

+0

@ user3066968:我想你是用十进制而不是十六进制减去的。 (1000-1504)/ 4,十进制产生-126。 (0x1000-0x1504)/ 4的十六进制数产生-0x141 – gusbro