COP2000實現(xiàn)補(bǔ)碼Booth乘法_第1頁
COP2000實現(xiàn)補(bǔ)碼Booth乘法_第2頁
COP2000實現(xiàn)補(bǔ)碼Booth乘法_第3頁
COP2000實現(xiàn)補(bǔ)碼Booth乘法_第4頁
COP2000實現(xiàn)補(bǔ)碼Booth乘法_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

I-課程設(shè)計名稱:計算機(jī)組成原理課程設(shè)計課程設(shè)計題目:COP2000實現(xiàn)補(bǔ)碼Booth乘法目錄TOC\o"1-3"\h\z第1章總體設(shè)計方案 21.1設(shè)計原理 21.2設(shè)計思路 21.3設(shè)計環(huán)境 2第2章詳細(xì)設(shè)計方案 32.1總體和各功能模塊詳細(xì)設(shè)計方案 32.2總體和各功能模塊的流程圖 5第3章程序調(diào)試過程與結(jié)果分析 103.1程序調(diào)試過程 103.2結(jié)果分析 10參考資料 15附錄 16第1章總體設(shè)計方案1.1設(shè)計原理課程設(shè)計內(nèi)容:利用COP2000的指令集編程實現(xiàn)兩個7bit(含1bit符號位)補(bǔ)碼相乘的功能,要求被乘數(shù),乘數(shù)是7bit補(bǔ)碼,乘積是13位補(bǔ)碼。實現(xiàn)任務(wù)的基本原理是Booth算法。1.2設(shè)計思路Booth補(bǔ)碼一位乘的設(shè)計主要包括五個功能模塊。①初始化:完成部分積,附加位,循環(huán)次數(shù)的初始化。②求和:根據(jù)YnYn+1的值選擇部分積和[X]補(bǔ)、[-X]補(bǔ)或是0相加。③右移:完成部分積和乘數(shù)部分整體右移一位,其中部分積是算術(shù)右移。④判斷循環(huán)次數(shù):完成一次求和和右移操作后循環(huán)次數(shù)減一,最后一次只求和不進(jìn)行右移操作。⑤結(jié)果輸出:將部分積和乘數(shù)部分分別保存到內(nèi)存中。設(shè)計環(huán)境本次課程設(shè)計的環(huán)境是COP2000實驗平臺自帶的集成開發(fā)環(huán)境,允許用戶進(jìn)行程序的編寫、模擬運(yùn)行、觀察數(shù)據(jù)通路等操作。COP2000實驗平臺對應(yīng)的模型機(jī)為8位機(jī),數(shù)據(jù)總線和地址總線均為8位。它包括了一個標(biāo)準(zhǔn)CPU所具備的所有部件,這些部件包括:運(yùn)算器ALU、累加器A、工作寄存器W、左移門L、直通門D、右移門R、寄存器組R0~R3、程序計數(shù)器PC、地址寄存器MAR、堆棧寄存器ST、中斷向量寄存器IA、輸入端口IN、輸出端口寄存器OUT、程序存儲器EM、指令寄存器IR、微程序計數(shù)器uPC、微程序存儲器uM等。此次課設(shè)是使用COP2000的指令集編程,所使用的部分指令如下:ADDA,R?;將寄存器R?中的值送到累加器A中ADDA,MM;將存儲器MM地址中的值送到累加器A中ADDA,#II;將立即數(shù)II加到累加器中SUBA,#II;從累加器A中減去立即數(shù)II加入累加器A中ANDA,#II;累加器A“與”立即數(shù)IIORA,#II;累加器A“或”立即數(shù)IIMOVA,R?;將寄存器R?的值送到累加器A中MOVA,MM;將存儲器MM地址中的值送到累加器A中MOVA,#II;將立即數(shù)II送到累加器A中MOVMM,A;將累加器A中的值送到存儲器MM地址中MOVR?,#II;將立即數(shù)II送到寄存器R?中JZMM;若零標(biāo)志位置1,跳轉(zhuǎn)到MM地址JMPMM;跳轉(zhuǎn)到MM地址IN;從輸入端口讀入數(shù)據(jù)到累加器A中OUT;將累加器A中的數(shù)據(jù)輸出到輸出端口RRA;累加器A右移CPLA;累加器A取反,再存入累加器A中第2章詳細(xì)設(shè)計方案2.1各功能模塊詳細(xì)設(shè)計方案2.1.1總體設(shè)計方案由于Booth補(bǔ)碼一位乘里包含部分積,乘數(shù)的補(bǔ)碼[Y]補(bǔ),附加位Yn+1,被乘數(shù)的補(bǔ)碼[X]補(bǔ),被乘數(shù)的相反數(shù)的補(bǔ)碼[-X]補(bǔ),還有循環(huán)次數(shù)n。用寄存器R0保存部分積,R1保存循環(huán)的次數(shù),R2保存輸入的被乘數(shù),R3保存輸入的乘數(shù),存儲器0F0H地址空間內(nèi)中保存的是被乘數(shù)的補(bǔ)碼[X]補(bǔ),0F1H中保存的是被乘數(shù)相反數(shù)的補(bǔ)碼[-X]補(bǔ),0F2H中保存乘數(shù)的補(bǔ)碼,0F3H中保存附加位Yn+1,最后的結(jié)果部分積保存在0E0H中,乘數(shù)部分保存在0E1H中。由于被乘數(shù)和乘數(shù)都是包含符號位在內(nèi)的7位補(bǔ)碼,乘積是包含符號位在內(nèi)的13位補(bǔ)碼,其中前7位來自部分積的低7位,后6位來自乘數(shù)部分的前6位。2.1.2初始化模塊設(shè)計方案初始化部分應(yīng)該完成部分積和附加位Yn+1的初始化,即R0初始化為0,0F3H初始化為0,并且循環(huán)次數(shù)初始化為6,即R1被初始化為6(因為乘數(shù)和被乘數(shù)都是包含符號位在內(nèi)的7位補(bǔ)碼,因此循環(huán)次數(shù)為6)。之后還應(yīng)該完成被乘數(shù)和乘數(shù)的輸入,分別將被乘數(shù)和乘數(shù)的補(bǔ)碼存放到R2和R3中。接著判斷被乘數(shù)的正負(fù),將被乘數(shù)的補(bǔ)碼及其相反數(shù)的補(bǔ)碼以雙符號位的形式存放到0F0H和0F1H中(正數(shù)的雙符號位是00,負(fù)數(shù)的雙符號位是11,運(yùn)算過程中采用雙符號位是為了防止假溢出,其最高位才是真正的符號位),最后將乘數(shù)的補(bǔ)碼存到0F2H中。2.1.3求和模塊設(shè)計方案根據(jù)乘數(shù)部分的最低位Yn和附加位Yn+1的值來確定部分積和哪個數(shù)相加,當(dāng)YnYn+1是00時,部分積加0;YnYn+1是01,部分積加[X]補(bǔ);YnYn+1是10時,部分積加[-X]補(bǔ);YnYn+1是11,部分積加0。判斷YnYn+1的值的過程如下,先判斷Yn的值,接著再判斷附加位Yn+1,若部分積加0,則直接進(jìn)入下一模塊,即右移模塊,否則,部分積加上[X]補(bǔ)或[-X]補(bǔ)再進(jìn)入下一模塊。在求和過程中使用雙符號位補(bǔ)碼。2.1.4右移模塊設(shè)計方案右移過程需將部分積和乘數(shù)部分整體右移一位,部分積的右移是算術(shù)右移,即要保留符號位,部分積的最低位應(yīng)移到乘數(shù)部分的最高位,乘數(shù)部分的最低位應(yīng)移到附加位部分,由于部分積、乘數(shù)、附加位是分開存放的,如果直接移位會導(dǎo)致最低位丟失數(shù)據(jù)。因此應(yīng)該先將乘數(shù)的最低位保存到附加位,再將乘數(shù)右移一位,之后將部分積最低位保存到乘數(shù)的最高位,再將部分積右移。但由于部分積采用雙符號位運(yùn)算,部分積在移位之后要判斷次高位是0還是1,若是0,說明原來的部分積是正數(shù),應(yīng)將部分積的最高位寫成0,否則,說明部分積原來是負(fù)數(shù),應(yīng)將最高位寫成1。右移完之后接循環(huán)模塊。2.1.5判斷循環(huán)次數(shù)模塊設(shè)計方案當(dāng)求和和右移運(yùn)行完成后,就完成了一次循環(huán),這時循環(huán)次數(shù)應(yīng)該減一,接著判斷是否是最后一次循環(huán),若不是最后一次循環(huán),轉(zhuǎn)去執(zhí)行求和模塊,再執(zhí)行右移模塊,若是最后一次循環(huán),則只執(zhí)行求和模塊而不再右移,接著轉(zhuǎn)輸出模塊。2.1.6結(jié)果輸出模塊設(shè)計方案要求結(jié)果是包含符號位在內(nèi)的13位補(bǔ)碼,對于部分積,先將后六位數(shù)保留再判斷部分積的最高位的符號,若是1,將部分積的次高位寫為1,若是0,將部分積的次高位寫為0,這樣就將部分積的后7位保留。然后再將乘數(shù)部分的前六位保留,將部分積和乘數(shù)部分分別存到0E0H和0E1H中,并將結(jié)束輸出。2.2總體和各功能模塊的流程圖2.2.1總控流程圖總控流程包括初始化、求和、右移、判斷循環(huán)次數(shù)、輸出五個模塊??偪亓鞒倘鐖D2.1所示。圖2.1總控流程圖2.2.2初始化模塊流程圖初始化部分包括部分積、附加位和循環(huán)次數(shù)的初始化并且要輸入被乘數(shù)的補(bǔ)碼和乘數(shù)的補(bǔ)碼。初始化流程圖如圖2.2所示。圖2.2初始化模塊流程圖說明:部分積,附加位和循環(huán)次數(shù)分別保存在R0、內(nèi)存中的0F3H單元、R1中,[X]補(bǔ)存放在R2和0F0H(以雙符號位的形式)中,[-X]補(bǔ)存放在0F1H(以雙符號位的形式)中,[Y]補(bǔ)存放在R3和0F2H中。X代表被乘數(shù),Y代表乘數(shù)。#00H->R0表示將立即數(shù)00H存放到R0中,M(0F3H)表示內(nèi)存中的0F3H單元,#06H->R1表示將立即數(shù)06H存到R1中。2.2.3求和模塊流程圖求和模塊要根據(jù)YnYn+1的值選擇部分積和[X]補(bǔ)或[-X]補(bǔ)還是0相加。具體求和模塊流程圖如圖2.3所示。圖2.3求和模塊流程圖說明:Yn指的是乘數(shù)部分的最后一位,Yn+1指的是附加位,X代表被乘數(shù)。2.2.4右移模塊流程圖右移模塊包括部分積和乘數(shù)部分的右移,在右移之前應(yīng)先把乘數(shù)部分的最后一位移到附加位上,再將乘數(shù)部分右移,然后將部分積的最后一位存到乘數(shù)部分的最高位,再將部分積右移。部分積右移完之后,判斷部分積的次高位是0還1,再把部分積的最高位寫成相應(yīng)的數(shù),這樣,部分積保存的就是雙符號數(shù),避免運(yùn)算的時候出現(xiàn)假溢出。右移模塊流程圖如圖2.4所示。圖2.4右移模塊流程圖2.2.5判斷循環(huán)次數(shù)模塊流程圖當(dāng)右移過程執(zhí)行完后,進(jìn)入判斷循環(huán)次數(shù)模塊,若循環(huán)次數(shù)不為0,則進(jìn)入求和和右移模塊,否則,進(jìn)入求和模塊,即最后一次不進(jìn)行右移操作。判斷循環(huán)次數(shù)流程圖如圖2.5所示。圖2.5判斷循環(huán)次數(shù)模塊流程圖2.2.6輸出模塊流程圖輸出模塊輸出最后13位補(bǔ)碼的16進(jìn)制表示。部分積的后7位保存在0E0H中的后7位,乘數(shù)部分的前6位保存在0E1H中的后6位。輸出模塊流程圖如圖2.6所示圖2.6輸出模塊流程圖說明:因為在運(yùn)算過程中部分積使用的是雙符號位,而運(yùn)算結(jié)果是單符號位,部分積最高位保存的是運(yùn)算結(jié)果的真實符號,所以在得出運(yùn)算結(jié)果后應(yīng)該判斷部分積最高位的值,然后將部分積的次高位置成相應(yīng)的值,再保存部分積后7位的值從而得出單符號位的結(jié)果。第3章程序調(diào)試過程與結(jié)果分析3.1程序調(diào)試過程1、在求和過程中,一開始使用的是單符號位運(yùn)算,但在調(diào)試過程中發(fā)現(xiàn),有時候會出現(xiàn)假溢出的現(xiàn)象導(dǎo)致結(jié)果出錯,之后將部分積改為雙符號位運(yùn)算之后,結(jié)果不再出錯,且部分積最高位才是結(jié)果真正的符號位。2、在右移過程中,剛開始設(shè)計的時候想的不周到,直接將乘數(shù)部分右移一位,但這時會將乘數(shù)部分最后一位丟失,從而不知道右移之后附加位變成什么值。之后將整個循環(huán)過程改為:先判斷乘數(shù)部分最后一位的值,將部分積改為相應(yīng)的值,接著將乘數(shù)部分移位,再判斷部分積最后一位的值,將乘數(shù)最高位改為相應(yīng)的值,最后判斷部分積次高位的值并將部分積最高位置成相應(yīng)的值。3、在輸出結(jié)果時,疏忽題目的要求是生成13位補(bǔ)碼,直接將部分積包括雙符號位在內(nèi)的8位補(bǔ)碼存到0E0H中,解決方法是:判斷部分積最高位的值,將部分積次高位置成和最高位一樣的值,然后將最高位置成0,這樣部分積的有效部分只有7位存到0E0H中的后7位,乘數(shù)部分前6位保存到0E1H的后6位。3.2結(jié)果分析設(shè)[X]補(bǔ)=1010101,[Y]補(bǔ)=0010111;1、初始化過程R0初始化為00H,R1初始化為06H,R2里存的是[X]補(bǔ)(55H),R3里存的是[Y]補(bǔ)(17H)。[X]補(bǔ)(雙符號且值是D5H)存放到0F0H中,[-X]補(bǔ)(雙符號且值是2BH)存放到0F1H中,[Y]補(bǔ)存放到0F2H中,附加位存放到0F3H中,0F3H初始化為0。初始化結(jié)果如圖3.1和3.2所示。圖3.1初始化結(jié)果圖3.2初始化結(jié)果求和過程①以第一次求和過程為例,先判斷YnYn+1=10,取出[-X]補(bǔ)(雙符號且值為2BH)到A中,準(zhǔn)備進(jìn)行求和操作,結(jié)果如圖3.3所示。圖3.3取出[-X]補(bǔ)到A②[-X]補(bǔ)和部分積相加結(jié)果為2BH,將新的部分積存入R0。如圖3.4所示。圖3.4部分積+[-X]補(bǔ)3、右移過程完成一次整體右移之后,部分積是15H,乘數(shù)是4BH,附加位為01H。即R0是15H,0F2H為4BH,0F3H為01H如圖3.5和3.6所示。圖3.5第一次右移之后的部分積結(jié)果圖3.6第一次右移之后乘數(shù)和附加位的結(jié)果循環(huán)次數(shù)減一R1由6變?yōu)?,結(jié)果如圖3.7所示。圖3.7循環(huán)次數(shù)由6變?yōu)?最后結(jié)果輸出部分積結(jié)果為70H,保存在0E0H中,乘積結(jié)果為23H,保存在0E1H中,結(jié)果如圖3.8所示。圖3.8結(jié)果輸出參考資料[1]唐朔飛.計算機(jī)組成原理(第2版)[M].北京:高等教育出版社,2008[2]COP2000實驗指導(dǎo)附錄MOVR0,#00000000B;部分積R0初始化為0MOVA,#00000000BMOV0F3H,A;附加位初始化為0MOVR1,#00000110B;循環(huán)次數(shù)R1初始化為6MOVA,#1010101B;輸入被乘數(shù)[X]補(bǔ)的補(bǔ)碼形式MOVR2,A;被乘數(shù)補(bǔ)碼存到R2中ANDA,#1000000B;判斷被乘數(shù)是正還是負(fù)數(shù)JZM1;若被乘數(shù)是正數(shù)轉(zhuǎn)M1MOVA,R2;被乘數(shù)是負(fù)數(shù)ADDA,#10000000B;將被乘數(shù)的補(bǔ)碼寫成雙符號位補(bǔ)碼MOV0F0H,A;將被乘數(shù)的補(bǔ)碼存到0F0HCPLAADDA,#00000001BMOV0F1H,A;求出被乘數(shù)的相反數(shù)的補(bǔ)碼[-X]補(bǔ)存到0F1HJMPM2M1:MOVA,R2ADDA,#00000000B;將被乘數(shù)的補(bǔ)碼寫成雙符號位補(bǔ)碼MOV0F0H,A;被乘數(shù)的補(bǔ)碼存到0F0HCPLAADDA,#00000001BMOV0F1H,A;求出被乘數(shù)相反數(shù)的補(bǔ)碼存到0F1HJMPM2M2:MOVA,#0010111B;輸入乘數(shù)的補(bǔ)碼形式并保存在R3中MOVR3,AMOV0F2H,A;將乘數(shù)的補(bǔ)碼存放到0F2HS0:MOVA,0F2H;將乘數(shù)的補(bǔ)碼送到A中ANDA,#0000001B;判斷Yn是0還是1JZS1;如果Yn=0轉(zhuǎn)S1MOVA,0F3H;如果Yn=1則接著判斷附加位是0還是1ANDA,#0000001BJZS3;附加位是0轉(zhuǎn)S3S4:MOVA,0F2H;將乘數(shù)的補(bǔ)碼送到A中ANDA,#0000001B;判斷乘數(shù)最后一位是0還是1JZS5;若是0轉(zhuǎn)S5MOVA,0F3H;若是1則將附加位變?yōu)?ORA,#0000001BMOV0F3H,A;將新的附加位存到0F3HJMPLOOPS3:MOVA,0F1H;取出[-X]補(bǔ)送到A中ADDA,R0;[-X]補(bǔ)+部分積MOVR0,A;將新的部分積存到R0中JMPS4S5:MOVA,0F3HANDA,#0000000B;將附加位置成0MOV0F3H,AJMPLOOP;無條件跳轉(zhuǎn)到LOOPS1:MOVA,0F3HANDA,#0000001B;判斷附加位是0還是1JZS2;若附加位是0,轉(zhuǎn)S2MOVA,0F0HADDA,R0;若附加位是1,部分積+[X]補(bǔ)MOVR0,AJMPS4S2:JMPS4;直接跳轉(zhuǎn)到S4LOOP:MOVA,0F2HRRAMOV0F2H,A;將乘數(shù)的補(bǔ)碼右移一位存到0F2HMOVA,R0ANDA,#00000001B;取出部分積并判斷部分積的最低位是0還是1JZS6;若部分積的最低位是0轉(zhuǎn)S6MOVA,0F2H;若部分積最低位是1ORA,#1000000B;將乘數(shù)的最高位置1MOV0F2H,AJMPLOOP1S6:MOVA,0F2HANDA,#0111111BMOV0F2H,A;將乘數(shù)補(bǔ)碼的最高位變成0存到0F2HJMPLOOP1LOOP1:MOVA,R0RRAMOVR0,A;將部分積右移一位存到R0中ANDA,#01000000B;判斷部分積次高位的符號JZS7;若部分積次高位是0轉(zhuǎn)S7MOVA,R0;若部分積次高位是1ORA,#10000000B;將部分積最高位寫為1并存到R0M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論