楊玉華,杜 妍
(1.華北電力大學數理系,河北保定071003;2.天津大學電氣與自動化工程學院,天津300000)
統計某戶居民的10個月的月用電量,找出最大月用電量,并計算出其所對應的電費。電費計算按如下規則:當月用電量小于等于200度時,按0.49元/度計算;當月用電量大于等于341度時,按0.79元/度計算;當月用電量在200度-341度之間時,按0.54元/度計算。將上述計算結果在屏幕上顯示出來,要求最大月用電量可達65536度,即一個寄存器的最大容量,且電價以分為單位輸出。如何利用匯編語言編程實現。文獻[1]討論了二進制與其他3種進制相互轉換的編程思路和算法。文獻[2]討論了一種基于簡單移位的二進制與十進制相互轉換算法。文獻[3-4]討論了數制轉換的本質和方法。但對于基于匯編語言的32位二進制與十進制轉換的研究文獻還不多見。
需要解決的核心問題是實現最大用電量以十進制形式在屏幕上顯示出來。當月用電量位65536度時,電費為65536×79=5177265(分),利用匯編語言實現時需進行16位×16位=32位二進制數,存放于兩個16位寄存器中。將此二進制數轉換為十進制在屏幕上輸出時,如按照傳統的二、十進制轉換方法,即除10取余,在進行第一次操作時由于5177265÷10=517726……5,517726>65535,超過一個16位寄存器的容量,將立即發生溢出,計算終止。因此,針對此問題需另辟蹊徑,從除法的本質出發,探求可能的解決方法。
除法作為四則運算之一,其實質可以理解為減法運算的擴展。舉例來說,6÷2=3,可看作6在減過3次2后為0,概括來說,商即為被除數可以減去除數的最大次數。在掌握這一簡單卻關鍵的原理后,上述問題便可迎刃而解。
具體來說,當電費達到5177265分后,為實現十進制輸出,可以不斷減10,并記錄下減法次數,即為商;完成若干次減法運算后首次小于10的被減數即為余數。完整程序實現如下,全文共180行,其中包含3個子程序,實現的功能包括從屏幕輸入10個用電量,顯示最大用電量及對應電費。







輸出結果示意如下:

本文著眼于除法的本質,創造性地實現了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.