2013-12-16 64 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. 循环直到您的保存寄存器为空。

相关问题