[英]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.