2013-12-16 95 views
-2

編寫程序將十進制數轉換爲十六進制。 要將十進制數轉換爲十六進制,我們可以找到16的最大冪數小於等於。 我們這樣做是從1開始數N比較1如何將十進制數轉換爲十六進制而不使用寫十六進制

If 1 < N we try 16 
if 16 < N we try 256 

,直到我們找到的最高功率。

I would keep the powers in an array like 1,10h, 100h, 1000h, up to 100000000h 

然後我們把由連續分割

Ex convert 834 to hex 
834/256 = 3 + r 78 
78/16  = 4 + r 14 
14/1   = E + r0 

的十六進制數爲34Eh

您可以讓你回答沒有,如果第一位是字母前導零,但0AB3h更好比AB3h。但是,您必須將h作爲答案的最後部分

mov edx,offset msg 
call writestring 
call readint 
mov tempt1,eax 
div eax 
.if(tempt<1) 
    mov eax,16 
.elseif() 
.else 
.endif 
ret 
+0

任何人都可以建議如何做到這一點。我只知道如何分配數字,但我怎樣才能得到餘數? – lhag

+0

歡迎來到StackOverflow。這不是一個爲我做的家庭作業網站。請給我們一些證據,證明你至少已經嘗試過。 –

+0

我已經添加了我的開始代碼,但我迷路了。不知道下一步該怎麼做。 – lhag

回答

0

如果您通過轉換爲二進制啓動,這很容易。

我假設你輸入的字符串是ASCII(爲BCD可以ommit第一減法。)

  1. 設定保持寄存器爲0

  2. 從最低顯著位減'0'(該字符轉換爲BCD)

  3. 乘以10數字^ n,其中n是它的位置

  4. 將你的數字加到你的臨時寄存器中

  5. 重複直到完成。

  6. 現在每個字節保存8位或兩個半字節,每個半字節相當於一個十六進制數字。複製字節並和0xf一起得到低半字節。

  7. ,如果超過9增加更多的「@」(這只是一個前)

  8. 另有4加「0」

  9. 位位移你保持寄存器,以獲得下一個數字

  10. 循環直到您的保存寄存器爲空。

相關問題