繁体   English   中英

C ++中的MIPS转换器,如何转换为十六进制

[英]MIPS translator in C++, how to convert to hex

我正在C ++中创建一个接受MIPS汇编指令的转换器,如添加寄存器2和3中的“ add 1,2,3”,然后将结果放入寄存器1中。最后,我将所有内容保存到一个表示机器代码的字符串中应该是输出,但是我想以十六进制格式显示,而是以十进制输出

    assembly = "000000" + m[3].str() + m[4].str() + m[2].str() + "00000" + funct;
    cout << assembly << endl;

文字输出正确= 00000023100000100000但是我希望它输出为00430820

谁能帮帮我吗? 谢谢!

您将二进制与整数混合

BINARY中add s,t,d的编码为

“ 0000 00ss ssst tttt dddd d000 0010 0000”

因此,您必须连接“ 000000” +二进制(2)+二进制(3)+二进制(1)+“ 00000100000”

其中binary(x)是具有固定5位数字的二进制表示形式

在你的情况下

000000 + 00010 + 00011 + 00001 + 00000100000

= 00000000010000110000100000100000,转换为

00430820h(“ 0000” = 0,“ 0000” = 0,“ 0100” = 4,“ 0011” = 3,“ 0000” = 0,“ 1000” = 8,“ 0010” = 2,“ 0000” = 0)

如果仔细看一下编码,您会看到

“ 000000ssssstttttddddd00000100000”

由4部分组成。 第一个是定义指令的常量,第三个是定义要使用的寄存器

   "00000000000000000000000000100000" = 0x00000020
+  "000000sssss000000000000000000000" (which is s left shifted by 21)
+  "00000000000ttttt0000000000000000" (which is t left shifted by 16)
+  "0000000000000000ddddd00000000000" (which is d left shifted by 11)

因此,对该指令进行编码的最简单方法是:

uint32_t i = 0x00000020 + (s<<21)  + (t<<16) + (d<<11);

以十六进制打印,您将得到:00430820

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM