楊玉華,杜 妍
(1.華北電力大學(xué)數(shù)理系,河北保定071003;2.天津大學(xué)電氣與自動(dòng)化工程學(xué)院,天津300000)
統(tǒng)計(jì)某戶居民的10個(gè)月的月用電量,找出最大月用電量,并計(jì)算出其所對(duì)應(yīng)的電費(fèi)。電費(fèi)計(jì)算按如下規(guī)則:當(dāng)月用電量小于等于200度時(shí),按0.49元/度計(jì)算;當(dāng)月用電量大于等于341度時(shí),按0.79元/度計(jì)算;當(dāng)月用電量在200度-341度之間時(shí),按0.54元/度計(jì)算。將上述計(jì)算結(jié)果在屏幕上顯示出來(lái),要求最大月用電量可達(dá)65536度,即一個(gè)寄存器的最大容量,且電價(jià)以分為單位輸出。如何利用匯編語(yǔ)言編程實(shí)現(xiàn)。文獻(xiàn)[1]討論了二進(jìn)制與其他3種進(jìn)制相互轉(zhuǎn)換的編程思路和算法。文獻(xiàn)[2]討論了一種基于簡(jiǎn)單移位的二進(jìn)制與十進(jìn)制相互轉(zhuǎn)換算法。文獻(xiàn)[3-4]討論了數(shù)制轉(zhuǎn)換的本質(zhì)和方法。但對(duì)于基于匯編語(yǔ)言的32位二進(jìn)制與十進(jìn)制轉(zhuǎn)換的研究文獻(xiàn)還不多見(jiàn)。
需要解決的核心問(wèn)題是實(shí)現(xiàn)最大用電量以十進(jìn)制形式在屏幕上顯示出來(lái)。當(dāng)月用電量位65536度時(shí),電費(fèi)為65536×79=5177265(分),利用匯編語(yǔ)言實(shí)現(xiàn)時(shí)需進(jìn)行16位×16位=32位二進(jìn)制數(shù),存放于兩個(gè)16位寄存器中。將此二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制在屏幕上輸出時(shí),如按照傳統(tǒng)的二、十進(jìn)制轉(zhuǎn)換方法,即除10取余,在進(jìn)行第一次操作時(shí)由于5177265÷10=517726……5,517726>65535,超過(guò)一個(gè)16位寄存器的容量,將立即發(fā)生溢出,計(jì)算終止。因此,針對(duì)此問(wèn)題需另辟蹊徑,從除法的本質(zhì)出發(fā),探求可能的解決方法。
除法作為四則運(yùn)算之一,其實(shí)質(zhì)可以理解為減法運(yùn)算的擴(kuò)展。舉例來(lái)說(shuō),6÷2=3,可看作6在減過(guò)3次2后為0,概括來(lái)說(shuō),商即為被除數(shù)可以減去除數(shù)的最大次數(shù)。在掌握這一簡(jiǎn)單卻關(guān)鍵的原理后,上述問(wèn)題便可迎刃而解。
具體來(lái)說(shuō),當(dāng)電費(fèi)達(dá)到5177265分后,為實(shí)現(xiàn)十進(jìn)制輸出,可以不斷減10,并記錄下減法次數(shù),即為商;完成若干次減法運(yùn)算后首次小于10的被減數(shù)即為余數(shù)。完整程序?qū)崿F(xiàn)如下,全文共180行,其中包含3個(gè)子程序,實(shí)現(xiàn)的功能包括從屏幕輸入10個(gè)用電量,顯示最大用電量及對(duì)應(yīng)電費(fèi)。
輸出結(jié)果示意如下:
本文著眼于除法的本質(zhì),創(chuàng)造性地實(shí)現(xiàn)了32位二、十進(jìn)制轉(zhuǎn)換,克服了運(yùn)用傳統(tǒng)方法時(shí)的溢出現(xiàn)象,并對(duì)進(jìn)行更多位數(shù)的進(jìn)制轉(zhuǎn)換研究工作提供了新的思路。同時(shí)為改進(jìn)電費(fèi)的收費(fèi)系統(tǒng)提供了新的理論依據(jù)。
[1] 白 玉,劉子恒.通過(guò)匯編語(yǔ)言編程實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換[J] .軟件導(dǎo)刊,2007,(7).
[2] 王迎春,吉利久.一種基于簡(jiǎn)單移位的二-十進(jìn)制相互轉(zhuǎn)換算法[J] .電子學(xué)報(bào),2003,31(2):221-224 .
[3] 陳清華等.數(shù)制轉(zhuǎn)換的本質(zhì)和方法[J] .江西師范大學(xué)學(xué)報(bào),2006,30(2):123-126;
[4] 尹建華等.微型計(jì)算機(jī)原理與接口技術(shù)[M] .北京:高等教育出版社,2003:155-156,266-267.