我正在尝试将以下命令转换为十六进制:
beq $s1,$t3,label
同时给出命令地址为0x1500,标签地址为0x1000。
到目前为止,我知道beq等于4(十六进制)和寄存器的二进制值。
我知道,首先我需要转换为二进制,然后转换为十六进制,但我不知道如何处理标签地址。我需要除以4才能得到价值吗?
发布于 2015-11-10 12:28:29
BEQ
操作码是000100
(二进制码)。BEQ
的指令格式是:
OpCode|SR|DR|Offset
哪里
000100
10001
的$s1
01011
for $t3
1111111010111111
。如果您愿意,现在可以将位字段连接起来,并用十六进制编写它们:
0001 0010 0010 1011 1111 1110 1011 1111
,即0x122BFEBF
编辑:添加了关于如何计算偏移量的说明
要计算偏移量,您必须减去PC+4的值( PC表示分支指令的地址)和目标位置的地址。然后将该地址除以4(或向右移动两次)。由于偏移量是用A2余量编码的,如果操作结果为负值,则必须应用A2的余量才能得到编码值。
https://stackoverflow.com/questions/33629356
复制相似问题