孫曉麗 富坤 耿恒山 王曉東 秘海曉
摘要:該文描述了一套在八位微程序控制的模型計(jì)算機(jī)上通過編程實(shí)現(xiàn)定點(diǎn)原碼一位乘法的設(shè)計(jì)方案。通過對(duì)定點(diǎn)原碼一位乘法的算法分析,繪制出了原碼一位乘法操作流程控制圖,利用模型計(jì)算機(jī)現(xiàn)有指令系統(tǒng)設(shè)計(jì)機(jī)器操作步驟并編寫相應(yīng)匯編語言程序,達(dá)到了在八位模型計(jì)算機(jī)中實(shí)現(xiàn)定點(diǎn)原碼一位乘法的預(yù)期目的。通過本實(shí)驗(yàn),加深了讀者對(duì)模型機(jī)工作原理的理解,開拓了讀者的思維。
關(guān)鍵詞:計(jì)算機(jī)組成原理;模型機(jī);原碼一位乘法;微程序
中圖分類號(hào):TP313文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)22-5347-04
The Implementation of Point-Original Multiplication Based on 8-Bit Model Computer
SUN Xiao-li, FU Kun, GENG Heng-shan, WANG Xiao-dong, MI Hai-xiao
(School of Computer Science and Engineering, Hebei University of Technology, Tianjin 300401, China)
Abstract: This article describes a design to achieve a point-original multiplication by programming in 8-bit model computer of the micro program control. Through its algorithm analysis, the operation process control charts of the point-original multiplication can be mapped out. In this paper, the purpose of achieving point-original multiplication is realized by taking advantage of existing model computer instruction set as well as programming corresponding assembly language programs. By the experiment, it is probable to help readers understand the working principle of the model machine easily and expand their thinking.
Key words: computer organization; model computer; point-original multiplication; micro program
計(jì)算機(jī)組成原理課程是大學(xué)本科計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的主干課程,而計(jì)算機(jī)組成原理課程設(shè)計(jì)是學(xué)習(xí)這門課程的關(guān)鍵實(shí)踐環(huán)節(jié)。在目前,大部分高校開設(shè)的實(shí)驗(yàn)課程以驗(yàn)證型實(shí)驗(yàn)為主,這樣的實(shí)驗(yàn)缺乏綜合性、設(shè)計(jì)性,不利于對(duì)學(xué)生的動(dòng)手能力、設(shè)計(jì)能力的和創(chuàng)新意識(shí)的培養(yǎng)。該文針對(duì)傳統(tǒng)實(shí)驗(yàn)的不足,設(shè)計(jì)了一套基于8位微程序控制的模型計(jì)算機(jī)實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)方案。通過實(shí)驗(yàn)環(huán)節(jié),進(jìn)一步融合貫通所學(xué)內(nèi)容,明確計(jì)算機(jī)內(nèi)部各個(gè)模塊的工作流程及其原理,并利用簡單指令系統(tǒng)實(shí)現(xiàn)在8位模型計(jì)算機(jī)上的定點(diǎn)原碼一位乘法運(yùn)算,使讀者有了更大的想象空間、發(fā)揮空間,開拓了思維。
1定點(diǎn)原碼一位乘法算法簡介
原碼一位乘法是從手算演變而來的:即用兩個(gè)操作數(shù)的絕對(duì)值相乘,乘積的符號(hào)為兩操作數(shù)符號(hào)的異或值(同號(hào)為正,異號(hào)為負(fù))。以小數(shù)為例:設(shè)X= Xs.X1X2X3X4X5X6,Y= Ys.Y1Y2Y3Y4Y5Y6,則X*=|X|=00. X1X2X3X4X5X6,Y*=|Y|= 00.Y1Y2Y3Y4 Y5Y6。
乘積R=|X|×|Y|
符號(hào)Rs=Xs⊕Ys
式中:Rs為乘積的符號(hào),Xs和Ys為被乘數(shù)和乘數(shù)的符號(hào)。
原碼一位乘的運(yùn)算規(guī)則如下:
乘積的符號(hào)位由兩原碼符號(hào)位異或運(yùn)算結(jié)果決定。
參加運(yùn)算的操作數(shù)取其絕對(duì)值。
令乘數(shù)的最低位作為判定位,若為“1”,加被乘數(shù);若為“0”,則加0。
累加后的部分積和乘數(shù)均右移一位。
重復(fù)n次③和④。
2實(shí)驗(yàn)平臺(tái)介紹
本實(shí)驗(yàn)采用的硬件平臺(tái)為8位單總線結(jié)構(gòu)模型機(jī),其分為四大模塊:存儲(chǔ)模塊,運(yùn)算模塊,微程序控制模塊和時(shí)序模塊。存儲(chǔ)模塊主要功能是實(shí)現(xiàn)存儲(chǔ)器的讀寫操作;運(yùn)算器模塊實(shí)現(xiàn)操作碼和運(yùn)算結(jié)果的輸入輸出,數(shù)據(jù)和地址信息采用分時(shí)復(fù)用的原則對(duì)總線實(shí)現(xiàn)共享;時(shí)序脈沖模塊主要作用就是實(shí)現(xiàn)微程序的時(shí)序控制;微程序控制部分的主要作用是將指令譯碼成控制信息,并按操作次序?qū)⑦@些信息連接到有關(guān)部件,執(zhí)行指令規(guī)定的操作。本模型機(jī)有24位控制位,用以控制寄存器的輸入、輸出,選擇運(yùn)算器的運(yùn)算功能,存儲(chǔ)器的讀寫。
3原碼一位乘法運(yùn)算的實(shí)現(xiàn)
在八位的原碼一位乘運(yùn)算中需用多個(gè)寄存器,除了被乘數(shù)存放的寄存器以外,還需要三個(gè)寄存器,分別存放乘數(shù)及部分積的低位、部分積的高位和計(jì)數(shù)器,再配上加法器及其他相應(yīng)電路來完成乘法運(yùn)算。當(dāng)前應(yīng)用于教學(xué)實(shí)驗(yàn)的8位微程序控制的模型計(jì)算機(jī)組成實(shí)驗(yàn)平臺(tái)只包括三個(gè)通用寄存器組,因此本實(shí)驗(yàn)的運(yùn)算需要借助存儲(chǔ)器6116芯片來完成。乘數(shù)、被乘數(shù)以及部分積均存入存儲(chǔ)器,用670芯片的C寄存器作計(jì)數(shù)器。將乘數(shù)調(diào)入寄存器,判斷其最低位并右移一位寫回存儲(chǔ)器。根據(jù)乘法最后一位確定部分積是加被乘數(shù)還是加0(乘數(shù)最低位是1,則部分積加上被乘數(shù)絕對(duì)值,否則部分積加0),若加被乘數(shù),則將其調(diào)入寄存器進(jìn)行運(yùn)算,然后判斷部分積的最后一位,確定部分積右移后,移入乘數(shù)的是0還是1,逐位運(yùn)算后加入符號(hào)位即可。8位微程序控制的模型計(jì)算機(jī)組成實(shí)驗(yàn)平臺(tái)上原碼一位乘運(yùn)算基本配置框圖如圖1所示。
圖1 8位微程序控制的模型計(jì)算機(jī)組成實(shí)驗(yàn)平臺(tái)上原碼一位乘運(yùn)算基本配置
3.1原碼一位乘法操作流程
乘法運(yùn)算前,670芯片的A寄存器被清0,作為初始部分積,被乘數(shù)原碼存放在6116芯片的X單元中,乘數(shù)原碼存放在Q單元,計(jì)數(shù)器C中存放乘數(shù)的位數(shù)n(該文運(yùn)算采用雙符號(hào)8位數(shù))。乘法開始后,首先確定乘積的符號(hào),由于本實(shí)驗(yàn)采用的實(shí)驗(yàn)平臺(tái)是針對(duì)本科教學(xué)的,其簡化了指令系統(tǒng),使其更利于學(xué)生從整體上把握計(jì)算機(jī)的工作流程,因此該平臺(tái)的指令系統(tǒng)中不存在異或指令,故該文采用加法來實(shí)現(xiàn)符號(hào)位的判定,求出乘積的符號(hào)并存于S處,接著將被乘數(shù)和乘數(shù)從原碼形式轉(zhuǎn)換為絕對(duì)值形式。然后再根據(jù)乘法末位是1還是0來決定部分積是否加上被乘數(shù),并邏輯右移一位,重復(fù)n次,最后加上符號(hào)位,即得運(yùn)算結(jié)果。
原碼一位乘法控制流程如圖2所示。
3.2機(jī)器操作步驟設(shè)計(jì)
本實(shí)驗(yàn)以X=+0.110101,Y=-0.101010為例,則[X]原=00.110101,[Y]原=11.101010,根據(jù)機(jī)器完成的功能,可以分成以下幾種操作過程:
1)預(yù)置地址操作
將開關(guān)K8置于輸入位置,合上開關(guān)K6(單指運(yùn)行狀態(tài)),按A3鍵進(jìn)行總清;將初始地址00000001置于數(shù)據(jù)開關(guān)上,按A2鍵輸入初始地址。
2)輸入程序操作
若地址沒有置好,則重新做第1)步中操作,若地址已置好,K8、K6保持原來狀態(tài);輸入初始地址后,將要輸入的程序置于數(shù)據(jù)開關(guān)上,按A1鍵,這時(shí)輸入的內(nèi)容和單元的地址分別由數(shù)據(jù)燈和地址燈同時(shí)顯示;如果下一個(gè)字節(jié)緊接上一個(gè)單元存放,則回到第2)步,將輸入的下一條程序置于數(shù)據(jù)開關(guān)處,直至程序全部輸入完畢。
第一步:輸入被乘數(shù)、乘數(shù)、部分積以及輔助運(yùn)算數(shù)據(jù)。根據(jù)實(shí)驗(yàn)平臺(tái)的特點(diǎn),本實(shí)驗(yàn)將被乘數(shù)、乘數(shù)、部分積均存入存儲(chǔ)器6116芯片中,同時(shí)利用精簡后指令集系統(tǒng)(只包含30條指令和3條面板控制指令),指令系統(tǒng)中不存在“異或”以及“右移多位”指令,根據(jù)該模型指令系統(tǒng)情況本實(shí)驗(yàn)采用“加法”和“與”指令結(jié)合完成。在輸入乘數(shù)、被乘數(shù)時(shí),利用與0011 1111進(jìn)行“與指令”操作,取得乘數(shù)及被乘數(shù)的絕對(duì)值并存入存儲(chǔ)器中,內(nèi)存存儲(chǔ)結(jié)構(gòu)如圖3所示。
第二步:利用“與”指令取得乘數(shù)、被乘數(shù)的符號(hào),并根據(jù)乘數(shù)與被乘數(shù)的符號(hào)位判斷積的符號(hào),然后將符號(hào)寫入1000 1111地址單元內(nèi),如表1存儲(chǔ)符號(hào)位所示。
本示例中走分支1,將乘積符號(hào)0011 0000寫入1000 1111地址單元內(nèi)。
第三步,除兩位符號(hào)位外,兩個(gè)6位數(shù)相乘,總共需要進(jìn)行6次加法運(yùn)算和6次移位運(yùn)算(移位操作通過與輔助數(shù)據(jù)進(jìn)行加法運(yùn)算)。進(jìn)行運(yùn)算時(shí),由乘數(shù)的末位數(shù)值確定被乘數(shù)是否與原部分積相加,然后右移一位,形成新的部分積,同時(shí)乘數(shù)也右移一位,由次低位作新的末位,空出最高位放置部分積的最低位。每次做加法時(shí),被乘數(shù)僅僅與原部分積的高位相加,其低位被移至乘數(shù)所空出的高位位置。本實(shí)驗(yàn)平臺(tái)中寄存器不是級(jí)聯(lián)的,因此無法直接實(shí)現(xiàn)將部分積的低位移至乘數(shù)的高位。本實(shí)驗(yàn)通過判斷部分積的最低位是0還是1來確定乘數(shù)是直接右移一位還是與0011 1111做與運(yùn)算。運(yùn)算過程如表2所示。
圖2原碼一位乘法控制流程
圖3內(nèi)存存儲(chǔ)結(jié)構(gòu)
表1存儲(chǔ)符號(hào)位
表2原碼一位乘法運(yùn)算過程
第四步,調(diào)整輸出結(jié)果。在存儲(chǔ)器中,部分積的高6位、低6位和乘積的符號(hào)位分別存儲(chǔ)在6116芯片的不同內(nèi)存里,為了方便結(jié)果的輸出顯示,需對(duì)其進(jìn)行調(diào)整。首先判斷部分積的第7位是否為1,若為1則溢出停機(jī),否則將部分積的高6位(00100010)右移兩位至低6位(00110010)部分積的存儲(chǔ)單元的高兩位(001000)和(10110010),然后將符號(hào)位加上部分積高位單元的第5位和第6位,再進(jìn)行存儲(chǔ)(00111000)。
3)檢查內(nèi)存
用第1)步中的方法,將要檢查的單元地址0000 0001預(yù)置好;將開關(guān)K8置于檢查處,合上開關(guān)K6;按A1,這時(shí)被查單元地址和內(nèi)容均分別由地址燈和數(shù)據(jù)燈顯示;若順序檢查下一個(gè)單元內(nèi)容,則再按A1鍵,否則重新預(yù)置要檢查的地址,重復(fù)上面操作直到檢查完畢。
4)運(yùn)行操作
用第1)步中的方法,把要執(zhí)行的程序入口地址預(yù)置好;根據(jù)需要可合上單微指開關(guān)K7或單指令開關(guān)K6(當(dāng)這兩個(gè)開關(guān)均打開,機(jī)器自動(dòng)連續(xù)運(yùn)行),并置K8于運(yùn)行處;按A1鍵后,機(jī)器開始執(zhí)行程序。
4結(jié)束語
以上遵循分析、設(shè)計(jì)、實(shí)現(xiàn)的思路,設(shè)計(jì)了一套基于NJS-1的八位原碼一位乘法的方案,該方案是對(duì)組成原理課程的加深和延續(xù)。通過對(duì)原碼一位乘法運(yùn)算的設(shè)計(jì),使讀者進(jìn)一步理解機(jī)器中乘法是如何進(jìn)行運(yùn)算的,加深其對(duì)計(jì)算機(jī)工作原理的理解,尤其是指令系統(tǒng)的工作原理,以及各部件間的協(xié)調(diào)和配合;同時(shí)提供讀者一種如何在現(xiàn)有實(shí)驗(yàn)平臺(tái)上利用簡單指令系統(tǒng)實(shí)現(xiàn)復(fù)雜機(jī)器指令的設(shè)計(jì)方案,從而開拓讀者的思維,對(duì)全面提高教學(xué)質(zhì)量具有長足意義。
參考文獻(xiàn):
[1]耿恒山.計(jì)算機(jī)組成原理[M].北京:機(jī)械工業(yè)出版社,2009.
[2]劉永鐸.手工模擬計(jì)算機(jī)進(jìn)行原碼一位乘法的實(shí)現(xiàn)方案[J].甘肅廣播電視大學(xué)學(xué)報(bào),2008,18(4):84-86.
[3]王曉蘭. JZYL-II型計(jì)算機(jī)組成原理實(shí)驗(yàn)平臺(tái)研制與開發(fā)[J]].實(shí)驗(yàn)室研究與探索,2009,28(9):80-82.
[4]張宇華,周瑩.《計(jì)算機(jī)組成原理》綜合性、設(shè)計(jì)性實(shí)驗(yàn)的開發(fā)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2004(9):98-100.
[5]張宇華.《計(jì)算機(jī)組成原理》實(shí)驗(yàn)的開發(fā)與提高[J].現(xiàn)代計(jì)算機(jī),2010(4):93-95.
[6]戚梅,程勇.計(jì)算機(jī)組成原理實(shí)驗(yàn)教程[M].北京:北京航空航天大學(xué)出版社,2008.
[7]任益夫,從艷,劉喜梅.一種定點(diǎn)原碼一位乘法器的設(shè)計(jì)與實(shí)現(xiàn)[J].開發(fā)研究與設(shè)計(jì)技術(shù),2007(8):443-447.
[8]唐朔飛,劉旭東,包健,熊桂喜.“計(jì)算機(jī)組成原理”課程教學(xué)實(shí)施方案[J].中國大學(xué)教學(xué),2010(11):42-45.