基于汇编语言的32位二进制、十进制转换及应用*
2013-09-22杨玉华
杨玉华,杜 妍
(1.华北电力大学数理系,河北保定071003;2.天津大学电气与自动化工程学院,天津300000)
1 问题的提出
统计某户居民的10个月的月用电量,找出最大月用电量,并计算出其所对应的电费。电费计算按如下规则:当月用电量小于等于200度时,按0.49元/度计算;当月用电量大于等于341度时,按0.79元/度计算;当月用电量在200度-341度之间时,按0.54元/度计算。将上述计算结果在屏幕上显示出来,要求最大月用电量可达65536度,即一个寄存器的最大容量,且电价以分为单位输出。如何利用汇编语言编程实现。文献[1]讨论了二进制与其他3种进制相互转换的编程思路和算法。文献[2]讨论了一种基于简单移位的二进制与十进制相互转换算法。文献[3-4]讨论了数制转换的本质和方法。但对于基于汇编语言的32位二进制与十进制转换的研究文献还不多见。
2 问题的分析
需要解决的核心问题是实现最大用电量以十进制形式在屏幕上显示出来。当月用电量位65536度时,电费为65536×79=5177265(分),利用汇编语言实现时需进行16位×16位=32位二进制数,存放于两个16位寄存器中。将此二进制数转换为十进制在屏幕上输出时,如按照传统的二、十进制转换方法,即除10取余,在进行第一次操作时由于5177265÷10=517726……5,517726>65535,超过一个16位寄存器的容量,将立即发生溢出,计算终止。因此,针对此问题需另辟蹊径,从除法的本质出发,探求可能的解决方法。
3 方法的提出
除法作为四则运算之一,其实质可以理解为减法运算的扩展。举例来说,6÷2=3,可看作6在减过3次2后为0,概括来说,商即为被除数可以减去除数的最大次数。在掌握这一简单却关键的原理后,上述问题便可迎刃而解。
具体来说,当电费达到5177265分后,为实现十进制输出,可以不断减10,并记录下减法次数,即为商;完成若干次减法运算后首次小于10的被减数即为余数。完整程序实现如下,全文共180行,其中包含3个子程序,实现的功能包括从屏幕输入10个用电量,显示最大用电量及对应电费。
输出结果示意如下:
4 结束语
本文着眼于除法的本质,创造性地实现了32位二、十进制转换,克服了运用传统方法时的溢出现象,并对进行更多位数的进制转换研究工作提供了新的思路。同时为改进电费的收费系统提供了新的理论依据。
[1] 白 玉,刘子恒.通过汇编语言编程实现进制转换[J] .软件导刊,2007,(7).
[2] 王迎春,吉利久.一种基于简单移位的二-十进制相互转换算法[J] .电子学报,2003,31(2):221-224 .
[3] 陈清华等.数制转换的本质和方法[J] .江西师范大学学报,2006,30(2):123-126;
[4] 尹建华等.微型计算机原理与接口技术[M] .北京:高等教育出版社,2003:155-156,266-267.