当前位置: 代码迷 >> 汇编语言 >> !进制转换有关问题
  详细解决方案

!进制转换有关问题

热度:3580   发布时间:2013-02-26 00:00:00.0
紧急求助!!!进制转换问题
老师要求我们编一个程序   ,实现从键盘输入的0~FFFFFFFFFF的十六进制转换成十进制可是这么长,寄存器肯定不行,用数组的话又不能有机的把书结合在一起,不知道该怎么半啊
想了好久都没有对策,请大家帮忙,能够提供一个合理的思路解决问题,谢谢啦

------解决方案--------------------------------------------------------
哎 输入到一块内存啊 除法是从高位输入就可以了
------解决方案--------------------------------------------------------
我计算出了FFFFFFFFFF的每个16进制位对应的10进制权值,如下:
F F F F F F F F F F
68719476736 4294967296 268435456 16777216 1048576 65536 4096 256 16 1

当我们进行16进制到10进制转化时,将每个16进制位乘以上面对应位权值,最后将所有的10组值相加就可以了。
例如:给出3a7b556b38
计算过程sum=68719476736*3+4294967296*10+268435456*7+16777216*11+1048576*5+65536*5+4096*6+256*11+16*3+8*1

当然计算过程中的乘法和加分尚且有一定的困难,解决办法,给每个被乘数分配存储单元,例如:给68719476736分配11个存储单元,将每一位与3相乘,把进位放入上一位中。最后用加法计算总和也是如此。
------解决方案--------------------------------------------------------
问问班里的别的同学
------解决方案--------------------------------------------------------
这个也比较好实现啊

你键盘输入一个数字就依次放在一个内存空间,记下总共输入多少个数,

然后把放在内存的数mov到你要转换的内存,把最后接收的一个数mov到转换的内存最低地址,

然后就可以开始调用转换程序了,不难实现,

我是学MSP430的,下面的代码是我用MSP430的汇编写的转换代码,能转换0~FFFFFFFFFFFF

希望能看懂,要转换的值放在R11:R10:R9里,转好后的值放在R15:R14:R13:R12里。

R9~R15是寄存器,你也可以用Ram地址代替。

#include "msp430x44x.h "

org 1100h ;程序开始
reset mov #0A00h,SP ;初始化堆栈指针
stop_wdt mov #WDTPW+WDTHOLD,&WDTCTL ;停止看门狗
mov #0ffffh,R11
mov #0ffffh,R10
mov #0ffffh,R9
call #hex_change_bcd
nop
nop
jmp $

hex_change_bcd
mov #48,R8 ;设置移位次数
clr R12
clr R13
clr R14
clr R15 ;对出口参数进行清零
shift_bit
rla R9
rlc R10 ;对入口函数进行算术左移,当前位移入进位标志位
rlc R11
dadd R12,R12
dadd R13,R13 ;
dadd R14,R14 ;十进制相加,转换
dadd R15,R15
dec R8
jnz shift_bit
ret
//*************中断向量地址****************
org 0FFFEH
dw reset
end
  相关解决方案