簡體   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