【问题标题】:Turning assembly instruction into hex using C使用 C 将汇编指令转换为十六进制
【发布时间】:2017-02-05 17:56:51
【问题描述】:

我正在尝试制作一个基本上使用 C 的婴儿汇编程序。我已经很好地阅读了说明,但我正在努力接受指令并将其正确转换为十六进制。如何获取多个十进制值并将它们组合成一个 32 位二进制数以转换为十六进制?

这是我现在对addi $t0,$t1,10 的指令:

opcode = opcode >> 2;
rs = rs >> 1;
rt = rt >>1;
imm = imm >> 15;
printf("0x%X:\t0x%X%X%X%X",list[i].a,opcode,rs,rt,imm);

【问题讨论】:

  • 用于显示?
  • 是的。它会将十六进制指令格式打印到标准输出。

标签: c mips


【解决方案1】:

首先或(|)将其转换为一个数字。例如,这肯定是错误的。只是为了得到这个想法。

int hex = (opcode<<24)|(rs<<16)|(rt<<8)|(imm);

然后:

printf("0x%X:\t0%X",list[i].a, hex);

【讨论】:

  • 这就是我的想法。但是,addi 的操作码是 8,但整个事物的二进制表示中操作码的字段是 6 位。在这种情况下,我将如何在保留两个前导零的同时移动它?
  • @CameronFuruseth: 8 适合 6 位 - 有足够的空间。移位一个位值不需要“保留”零位。如果此答案不适用于该说明,最好将其添加到您的问题中。
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 2014-03-19
  • 2015-01-28
  • 2016-08-21
  • 2020-11-29
  • 2015-06-02
  • 2017-07-31
  • 2013-07-20
相关资源
最近更新 更多