2015-10-05 61 views
0

如果我因爲$a0 = "ABcd1234"我將如何去製作從十六進制轉換爲二進制

$v0 = 1010 1011 1100 1101 0001 0010 0011 0100 

我已經寫了已經是一個程序,它會檢查$ A0值寄存器具有有效的字符,但我難倒試圖將其轉換爲二進制。我只需創建兩個數組,一個用於十六進制值,然後是一個包含每個數字的相應二進制數的數組?如果我這樣做,我將如何去轉換它們,然後將這麼大的值存儲到$ v0

+0

是$ a0是十六進制數字的字符串表示嗎? – Dko

+0

.asciiz「ABcd1234」是我在.data部分的代碼 – Michealf

回答

0

正如你已經打破了二進制,很明顯,你知道每個十六進制數字是4位。因此,只需編寫將單個數字轉換爲4位的代碼,並逐個將它們移入目標寄存器。您可以將其組合成檢查代碼,例如:

out=0 
foreach(x in string) 
{ 
    if (x < '0') goto invalid; 
    if (x < '9' + 1) { value = x - '0'; goto valid; } 
    if (x < 'A') goto invalid; 
    if (x < 'F' + 1) { value = x - 'A' + 10; goto valid; } 
    if (x < 'a') goto invalid; 
    if (x < 'f' + 1) { value = x - 'a' + 10; goto valid; } 
    goto invalid; 

valid: 
    out = (out << 4) | value; 
} 

請參閱code in operation

+0

因此,如何將單個數字轉換爲4位? – Michealf

+0

我已經證明,哪一部分不清楚? 'value'是4位值:)它只是一個常數的減法。 – Jester

+0

out =(out << 4)|價值讓我有點困惑。我有一個數字,可以說A = 41,我該如何將數字從41轉換爲1010 – Michealf