首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >手动将MIPS BEQ指令编码为十六进制机器代码

手动将MIPS BEQ指令编码为十六进制机器代码
EN

Stack Overflow用户
提问于 2015-11-10 11:52:30
回答 1查看 886关注 0票数 1

我正在尝试将以下命令转换为十六进制:

代码语言:javascript
代码运行次数:0
运行
复制
beq $s1,$t3,label

同时给出命令地址为0x1500,标签地址为0x1000。

到目前为止,我知道beq等于4(十六进制)和寄存器的二进制值。

我知道,首先我需要转换为二进制,然后转换为十六进制,但我不知道如何处理标签地址。我需要除以4才能得到价值吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-10 12:28:29

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

代码语言:javascript
代码运行次数:0
运行
复制
OpCode|SR|DR|Offset

哪里

  • OpCode(6位)是000100
  • SR(5位)是用于10001$s1
  • DR(5位)是01011 for $t3
  • 偏移量( 16位)是一个16位的符号偏移量(移位2次),假设启动PC是分支后的以下指令,应该是(0x1000-0x1504)>>2= -0x141,用A2补充写成的是1111111010111111

如果您愿意,现在可以将位字段连接起来,并用十六进制编写它们:

0001 0010 0010 1011 1111 1110 1011 1111,即0x122BFEBF

编辑:添加了关于如何计算偏移量的说明

要计算偏移量,您必须减去PC+4的值( PC表示分支指令的地址)和目标位置的地址。然后将该地址除以4(或向右移动两次)。由于偏移量是用A2余量编码的,如果操作结果为负值,则必须应用A2的余量才能得到编码值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33629356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档