




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
..計算機組成原理課程設計報告__計算機XX班__XX__XXX完成時間:一、課程設計目的1.在實驗機上設計實現機器指令及對應的微指令〔微程序并驗證,從而進一步掌握微程序設計控制器的基本方法并了解指令系統與硬件結構的對應關系;2.通過控制器的微程序設計,綜合理解計算機組成原理課程的核心知識并進一步建立整機系統的概念;3.培養綜合實踐及獨立分析、解決問題的能力。二、課程設計的任務針對COP2000實驗儀,從詳細了解該模型機的指令/微指令系統入手,以實現乘法和除法運算功能為應用目標,在COP2000的集成開發環境下,設計全新的指令系統并編寫對應的微程序;之后編寫實現乘法和除法的程序進行設計的驗證。三、課程設計使用的設備〔環境1.硬件COP2000實驗儀PC機2.軟件COP2000仿真軟件四、課程設計的具體內容〔步驟1.詳細了解并掌握COP2000模型機的微程序控制器原理,通過綜合實驗來實現該模型機指令系統的特點:COP2000模型機的指令為8位,根據操作的內容,可以有0到2個操作數。每個操作數支持5種尋址方式,包括累加器A尋址,寄存器R0~R3尋址,寄存器R0~R3間接尋址,內存直接尋址以及立即數尋址。COP2000模型機指令的最低兩位<IR0和IR1>用來尋址R0~R3四個寄存器;IR2和IR3與ELP微控制信號,Cy和Z兩個程序狀態信號配合,控制PC的置數即程序的轉移。各種轉移的條件判斷邏輯如下所示:PC置數邏輯當ELP=1時,不允許PC被預置當ELP=0時當IR3=1時,無論Cy和Z什么狀態,PC被預置當IR3=0時若IR2=0,則當Cy=1時PC被預置若IR2=1,則當Z=1時PC被預置本模型機時序控制采用不定長機器周期的同步控制方式,一條指令最多分四個節拍。系統提供的默認指令系統包括以下7類指令:算術運算指令:邏輯運算指令:數據傳輸指令:跳轉指令:ADDA,R?ADDA,R?ADDA,MMADDA,#IIADDCA,R?ADDCA,?ADDCA,MMADDCA,#IISUBA,R?SUBA,R?SUBA,MMSUBA,#IISUBCA,?SUBCA,R?SUBCA,MMSUBCA,#IIANDA,R?ANDA,R?ANDA,MMANDA,#IIORA,R?ORA,R?ORA,MMORA,#IICPLAMOVA,R?MOVA,R?MOVA,MMMOVA,#IIMOVR?,AMOVR?,AMOVMM,AMOVR?,#IIJCMMJZMMJMPMMCALLMMRET移位指令:中斷返回指令:輸入/輸出指令:RRARLARRCARLCARETIREADMMWRITEMMINOUT該模型機微指令系統的特點〔包括其微指令格式的說明等:COP2000模型機的微指令字長為24位,全部為操作控制部分,不含順序控制字段。微指令編碼采用混合表示法,微地址形成采用計數器方式。微指令格式為水平型微指令。下面分別從為操作控制和順序控制兩方面進行說明:a. 微操作控制24位微操作控制信號含義如下表:表1:COP2000模型機24位微控制信號功能控制信號含義XRD:外部設備讀信號,當給出了外設的地址后,輸出此信號,從指定外設讀數據。EMWR:程序存儲器EM寫信號。EMR:程序存儲器EM讀信號。PCOE:將程序計數器PC的值送到地址總線ABUS上。EMEN:將程序存儲器EM與據總線DBUS接通由EMWR和EMRD決定是將DBS數據寫到EM中,還從EM讀數據送到DBUS。IRE:將程序存儲器EM讀的數據打入指令寄存器IR和微指計數器uP。EINT:中斷返回時清除中斷響應和中斷請求標志,便于下次中斷。ELP:PC打入允許,與指令寄存器的IR3IR2位結合控制程序跳轉。MARE:將數據總線DBUS上數據打入地址寄存器MA。MAROE:將地址寄存器MAR的送到地址總線ABUS上。OUTE:將數據總線DBUS上數據送到輸出端口寄存器OUT里。STE:將數據總線DBUS上數據存入堆棧寄存器ST中。RRD:讀寄存器組R0-R3,寄器?的選由指令的最低兩位決定。WR:寫寄存器組R0-R3,寄器?的選由指令的最低兩位決定。CN:決定運算器是否帶進位移位,CN=1帶進位,CN=0不帶進。FEN:將標志位存入ALU內部的標志寄存器。X2X1X0:X2、X1、X0三位組合來譯碼選擇將數據送到DBUS上的寄存器。WEN:將數據總線DBUS的值打入工作寄存器W中。AEN:將數據總線DBUS的值打入累加器A中。S2S1S0S2、S1、S0三位組合決定ALU做何種運算。X2X1X0被選中寄存器S2S1S0運算000IN000A+W001IA001A-W010ST010AORW011PC011AANDW100D100A+W+Cy101R101A-W-Cy110L110NOTA111無111Ab. 順序控制COP2000微程序控制器的微地址生成部件是一個計數器,分別控制該計數器的使能端〔自動加一和置數端〔跳轉至其他指令對應的位程序地址生成微命令的地址。2。計算機中實現乘法和除法的原理〔1無符號乘法①實例演示:1010×1011=1101110無符號乘法的實例演示如圖1所示:1010×1011 0000+10101010+101011110+0000 011110+1010〔01101110即:1001×0110=1101110②硬件原理框圖:被乘數〔不變被乘數〔不變0M3M2M1ALUADDZF控制邏輯0 0 0 0A3ASHR乘數〔部分和圖1:乘法件原理圖③算法流程圖:〔2無符號除法①實例演示:無符號除法使用加減交替法,若余數為正,則下一步執行減法,商置1;反之商置0,下一步執行加法。001111011-110110101011+110100010011-110111011111+110111111001+110100000110123÷13商為9,余數為6②硬件原理框圖:被除數〔部分余數被除數〔部分余數+商D7D6D5D4D3D2D1D0ALUZFADDSUB控制邏輯A3A2除數SHR③算法流程圖:3.對應于以上算法如何分配使用COP2000實驗儀中的硬件由于循環控制運算時會占用累加器A,因此參與運算的操作數均應保存在通用寄存器R0~R3中。資源分配如下:直接乘法: R0:中間結果及最終結果R1:被乘數〔每次運算左移1位R2:乘數〔每次運算右移1位加減交替除法: R0:被除數〔部分余數,最終得到余數R1:除數〔初始化時左移4位,每次計算時右移1位R2:商〔低4位R3:計數器4.在COP2000集成開發環境下設計全新的指令/微指令系統設計結果如表所示〔可按需要增刪表項新的指令集〔設計兩個不同指令集要分別列表助記符機器碼1機器碼2指令說明_FATCH_000000XX00-03實驗機占用,不可修改。復位后,所有寄存器清0,首先執行_FATCH_指令取指。ADDR?,#II000001XX04-07II?←R?+立即數ADDR?,A000010XX08-0B?←A+R?SUBR?,#II000011XX0C-0FII?←R?-立即數IISUBR?,A000100XX10-13R?←MOVR?,#II000101XX14-17R?←MOVA,R?000110XX18-1BA←SHLR?000111XX1C-1F3?不帶進左移1位SHRR?001000XX20-23?不帶進右移1位PUSHA001001XX24-27A壓棧POPA001010XX28-2B將棧頂元素值給AMOVR?,A001011XX2C-2F?←AANDA,#II001100XX30-33II與立即數運算JZMM001101XX34-37MMZF=1時跳轉JMPMM001111XX3C-3FMM跳轉JCMM010000XX40-43MMCF=1時跳轉新的微指令集5.用設計完成的新指令集編寫實現無符號二進制乘法、除法功能的匯編語言程序〔1乘法MOVR0,#00H MOVR1,#09H MOVR2,#09HLOOP1: SUBR2,#00H JZLOOP3 MOVA,R2 ANDA,#01H JZLOOP2 MOVA,R1 ADDR0,ALOOP2: SHLR1 SHRR2 JMPLOOP1LOOP3: END〔2除法MOVR0,#86H MOVR1,#09H MOVR2,#00H MOVR3,#05H MOVA,R1 ANDA,#0FFH JZLOOP3 SHLR1 SHLR1 SHLR1 SHLR1 MOVA,R0 PUSHA MOVA,R1 SUBR0,A JCLOOP1 JMPLOOP3LOOP1: POPA MOVR0,A SHLR2 SHRR1 SUBR3,#01H JZLOOP4 MOVA,R0 PUSHA MOVA,R1 SUBR0,A JCLOOP1LOOP2: SHLR2 SHRR1 ADDR2,#01H SUBR3,#01H JZLOOP4 MOVA,R0 PUSHA MOVA,R1 SUBR0,A JCLOOP1 JMPLOOP2LOOP3: MOVR2,#0FFHLOOP4: END6.上述程序的運行情況〔跟蹤結果程序運行的過程乘法匯編指令程序地址機器碼指令說明微程序PCPC運行時寄存器或存儲器的值_FATCH_0000實驗機占用,不可修改。復位后,所有寄存器清0,首先執行_FATCH_指令取指。CBFFFF+1寫入EM:14MOVR0,#00001400將立即數00H存放到寄存器R0中。C7FBFFCBFFFF+1+1+1寫入EM:14EM:00R0:00MOVR1,#09021509將立即數09H存放到寄存器R1中。C7FBFFCBFFFF+1+1+1寫入EM:15EM:09R1:09MOVR2,#09041609將立即數09H存放到寄存器R2中。C7FBFFCBFFFF+1+1+1寫入EM:16EM:09R2:09SUBR2,#00060E00寄存器R2減去立即數00H后存入寄存器R2中,改變標志位FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM:0EEM:0EA:09EM:00EM:00JZ15083415若零標志位置1,跳轉到15H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:15MOVA,R20A1A將累加器A中的數存放到寄存器R2中。FFF7F7CBFFFF+1+1寫入EM:1AEM:1AW:09ANDA,#010B3001累加器A中的數與立即數01H做與運算,結果存入累加器A中C7FFEFFFFE93CBFFFF+1+1+1+1寫入EM:30EM:01EM:01A=01JZ110D3411若零標志位置1,跳轉到11H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:11MOVA,R10F19將累加器A中的數存放到寄存器R1中。FFF7F7CBFFFF+1+1寫入EM:19EM:19A:09ADDR0,A1008寄存器R0中的值加上累加器A中的值,結果存入寄存器R0中FFF7EFFFFA98CBFFFF+1+1+1寫入EM:08EM:08W=00EM:01R0=09SHLR1111D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM:1DEM:1DA:09EM:1DR1:12SHRR21222寄存器R2中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM:22EM:22A:09EM:22R2:04JMP06133C06跳轉到06H地址。C6FFFFCBFFFF寫入+1+1寫入EM:3CEM:06SUBR2,#00060E00寄存器R2減去立即數00H后存入寄存器R2中,改變標志位FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM:0EEM:0EW:04EM:00EM:00JZ15083415若零標志位置1,跳轉到15H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:15MOVA,R20A1A將累加器A中的數存放到寄存器R2中。FFF7F7CBFFFF+1+1寫入EM:1AEM:1AA=04ANDA,#010B3001累加器A中的數與立即數01H做與運算,結果存入累加器A中C7FFEFFFFE93CBFFFF+1+1+1+1寫入EM:30EM:01W:01EM:01A:00JZ110D3411若零標志位置1,跳轉到11H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:11SHLR1111D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM:1DEM:1DA:12EM:1DR1:24SHRR21222寄存器R2中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM:22EM:22A:04EM:22R2:02JMP06133C06跳轉到06H地址。C6FFFFCBFFFF寫入+1+1寫入EM:3CEM:06SUBR2,#00060E00寄存器R2減去立即數00H后存入寄存器R2中,改變標志位FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM:0EEM:0EA:02EM:00W:00EM:00JZ15083415若零標志位置1,跳轉到15H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:15MOVA,R20A1AFFF7F7CBFFFF+1+1寫入EM:1AEM:1AA=02ANDA,#010B3001寄存器R2與立即數01H,只改變標志位,并不改變R2中的數值。C7FFEFFFFE93CBFFFF+1+1+1+1寫入EM:30EM:01W:01EM:01A:00JZ110D3411若零標志位置1,跳轉到11H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:11SHLR1111D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM:1DEM:1DA:24EM:1DR1:48SHRR21222寄存器R2中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM:22EM:22A:02EM:22R2:01JMP06133C06跳轉到06H地址。C6FFFFCBFFFF寫入+1+1寫入EM:3CEM:06SUBR2,#00060E00寄存器R2減去立即數00H后存入寄存器R2中,改變標志位FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM:0EEM:0EA:01EM:00W:00EM:00JZ15083415若零標志位置1,跳轉到15H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:15MOVA,R20A1AFFF7F7CBFFFF+1+1寫入EM:1AEM:1AA=01ANDA,#010B3001寄存器R2與立即數01H,只改變標志位,并不改變R2中的數值。C7FFEFFFFE93CBFFFF+1+1寫入+1+1寫入+1EM:30EM:01W:01EM:01A:01EM:01JZ110D3411若零標志位置1,跳轉到11H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:11MOVA,R10F19將累加器A中的數存放到寄存器R1中。FFF7F7CBFFFF+1+1寫入EM:19EM:19A=48ADDR0,A1008寄存器R0中的值加上累加器A中的值,結果存入寄存器R0中FFF7EFFFFA98CBFFFF+1+1+1寫入EM:08EM:08W:09EM:08R0:51SHLR1111D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM:1DEM:1DA:48EM:1DR1:90SHRR21222寄存器R2中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM:22EM:22A:01EM:22R2:00JMP06133C06跳轉到06H地址。C6FFFFCBFFFF寫入+1+1寫入EM:3CEM:06SUBR2,#00060E00寄存器R2減去立即數00H后存入寄存器R2中,改變標志位FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM:0EEM:0EA:00EM:00W:00EM:00JZ15083415若零標志位置1,跳轉到15H地址。C6FFFFCBFFFF寫入+1+1寫入EM:34EM:15_FATCH_0000實驗機占用,不可修改。復位后,所有寄存器清0,首先執行_FATCH_指令取指。CBFFFF+1寫入EM:00除法:匯編指令程序地址機器碼指令說明微程序PCPC運行時寄存器或存儲器的值_FATCH000實驗機占用,不可修改。復位后,所有寄存器清0,首先執行_FATCH_指令取指。CBFFFF+1寫入EM=14MOVR0,#86H001486將立即數86H存放到寄存器R0中。C7FBFFCBFFFF+1+1+1寫入EM=14EM=86R0=86MOVR1,#09H021509將立即數09H存放到寄存器R1中。C7FBFFCBFFFF+1+1+1寫入EM=15EM=09R1=09MOVR2,#00H041600將立即數00H存放到寄存器R2中。C7FBFFCBFFFF+1+1+1寫入EM=16EM=00R2=00MOVR3,#05H061705將立即數05H存放到寄存器R3中。C7FBFFCBFFFF+1+1+1寫入EM=17EM=05R3=05MOVA,R10819將寄存器R1的數存入累加器A中FFF7F7CBFFFF+1+1寫入EM=19EM=19A=09ANDA,#FF0930FF累加器A中的數和立即數FFH作與運算結果存入累加器A中C7FFEFFFFE93CBFFFF+1+1+1+1寫入EM=30EM=FFW=FFEM=FFW=FFJZ370B3437若零標志位置1,跳轉到37H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=37SHLR10D1D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1DEM=1DEM=1DR1=12SHLR10E1D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1DEM=1DA=12EM=1DR1=24SHLR10F1D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1DEM=1DA=24EM=1DR1=48SHLR1101D寄存器R1中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1DEM=1DA=48EM=1DR1=90MOVA,R01118將寄存器R0中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=18EM=18A=86PUSHA1224將累加器A中的數據壓入堆棧寄存器ST。FFEF9FCBFFFF+1+1寫入EM=24EM=24ST=86MOVA,R11319將寄存器R1中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=19EM=19A=90SUBR0,A1410從寄存器R0中減去累加器A中的數,并影響標志位。FFFF8FFFF7F7FFFA99CBFFFF+1+1+1+1寫入EM=10EM=10W=90EM=10EM=10R0=F6JC19154019若進位標志位置1,跳轉到19H地址。C6FFFFCBFFFF寫入+1+1寫入EM=40EM=40PC=19POPA1928將堆棧寄存器ST的棧頂數據賦給累加器A。FFFF57CBFFFF+1+1寫入EM=28EM=28A=86MOVR0,A1A2C將累加器A中的數放入寄存器R0中。FFFB9FCBFFFF+1+1寫入EM=2CEM=2CR0=86SHLR21B1E寄存器R2中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1EEM=1EA=00EM=1ESHRR11C21寄存器R1中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM=21EM=21A=90EM=21R1=48SUBR3,#01H1D0F01從寄存器R3中減去立即數01H,并影響標志位。FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM=0FEM=0FA=05EM=01EM=01R3=04JZ391F3489若零標志位置1,跳轉到39H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=39MOVA,R02118將寄存器R0中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=18EM=1DA=86PUSHA2224將累加器A中的數據壓入堆棧寄存器ST。FFEF9FCBFFFF+1+1寫入EM=24EM=24ST=86MOVA,R12319將寄存器R1中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=19EM=19A=48SUBR0,A2410從寄存器R0中減去累加器A中的數,并影響標志位。FFFF8FFFF7F7FFFA99CBFFFF+1+1+1+1寫入EM=10EM=10W=48EM=10A=86EM=10R0=3EJC19254019若進位標志位置1,跳轉到19H地址。C6FFFFCBFFFF寫入+1+1寫入EM=40EM=19SHLR2271E寄存器R2中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1EEM=1EA=00EM=1ESHRR12821寄存器R1中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM=21EM=21A=48EM=21R1=24ADDR2,#01H290601將立即數01H加入到寄存器R2中,并影響標志位。FFF7F7C7FFEFFFFA98CBFFFF+1+1寫入+1+1+1EM=06EM=06A=00EM=01EM=01R2=01SUBR3,#01H2B0F01從寄存器R3中減去立即數01H,并影響標志位。FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM=0FEM=0FA=04EM=01EM=01R3=03JZ392D3439若零標志位置1,跳轉到39H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=39MOVA,R02F18將寄存器R0中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=18EM=18A=3EPUSHA3024將累加器A中的數據壓入堆棧寄存器ST。FFEF9FCBFFFF+1+1寫入EM=24EM=24ST=3EMOVA,R13119將寄存器R1中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=19EM=19A=24SUBR0,A3210從寄存器R0中減去累加器A中的數,并影響標志位。FFFF8FFFF7F7FFFA99CBFFFF+1+1+1+1寫入EM=10EM=10W=24EM=10A=3EEM=10R0=1AJC19334019若進位標志位置1,跳轉到19H地址。C6FFFFCBFFFF寫入+1+1寫入EM=40EM=19JMP27353C27跳轉到27H地址。C6FFFFCBFFFF寫入+1+1寫入EM=3CEM=27SHLR2271E寄存器R2中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1EEM=1EA=01EM=1ER2=02SHRR12821寄存器R1中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM=21EM=21A=24EM=21R1=12ADDR2,#01290601將立即數01H加入到寄存器R2中,并影響標志位。FFF7F7C7FFEFFFFA98CBFFFF+1+1+1+1+1寫入EM=06EM=06A=02EM=01W=01EM=01R2=03SUBR3.#012B0F01從寄存器R3中減去立即數01H,并影響標志位。FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM=0FEM=0FA=03EM=01EM=01R3=02JZ392D3439若零標志位置1,跳轉到39H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=39MOVA,R02F18將寄存器R0中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=18EM=18A=1APUSHA3024將累加器A中的數據壓入堆棧寄存器ST。FFEF9FCBFFFF+1+1寫入EM=24EM=24ST=1AMOVA,R13119將寄存器R1中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=19EM=19A=12SUBR0,A3210從寄存器R0中減去累加器A中的數,并影響標志位。FFFF8FFFF7F7FFFA99CBFFFF+1+1+1+1寫入EM=10EM=10W=12EM=10A=1AEM=10R0=08JC19334019若進位標志位置1,跳轉到19H地址。C6FFFFCBFFFF寫入+1+1寫入EM=40EM=19JMP27353C27跳轉到27H地址。C6FFFFCBFFFF寫入+1+1寫入EM=3CEM=27SHLR2271E寄存器R2中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1+1+1寫入EM=1EEM=1EA=03EM=1ER2=06SHRR12821寄存器R1中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1+1+1寫入EM=21EM=21A=12EM=21R1=09ADDR2,#01290601將立即數01H加入到寄存器R2中,并影響標志位。FFF7F7C7FFEFFFFA98CBFFFF+1+1+1+1+1寫入EM=06EM=06A=06EM=01W=01EM=01R2=07SUBR3,#012B0F01從寄存器R3中減去立即數01H,并影響標志位。FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM=0FEM=0FA=02EM=01EM=01R3=01JZ392D3439若零標志位置1,跳轉到39H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=39MOVA,R02F18將寄存器R0中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=18EM=18A=08PUSHA3024將累加器A中的數據壓入堆棧寄存器ST。FFEF9FCBFFFF+1+1寫入EM=24EM=24ST=08MOVA,R13119將寄存器R1中的數放入累加器A中。FFF7F7CBFFFF+1+1寫入EM=19EM=19A=09SUBRO,A3210從寄存器R0中減去累加器A中的數,并影響標志位。FFFF8FFFF7F7FFFA99CBFFFF+1+1+1+1寫入EM=10EM=10W=09EM=10A=08EM=10R0=FFJC19334019若進位標志位置1,跳轉到19H地址。C6FFFFCBFFFF寫入+1+1寫入EM=40EM=19POPA3528將堆棧寄存器ST的棧頂數據賦給累加器A。FFFF57CBFFFF+1+1寫入EM=28EM=28A=08MOVR0,A1A2C將累加器A中的數放入寄存器R0中。FFFB9FCBFFFF+1+1寫入EM=2CEM=2CR0=08SHLR2271E寄存器R2中的數不帶進位向左移一位,并不影響標志位。FFF7F7FFF9DFCBFFFF+1寫入+1+1EM=1EEM=1EA=07EM=1ER2=0ESHRR12821寄存器R1中的數不帶進位向右移一位,并不影響標志位。FFF7F7FFF9BFCBFFFF+1寫入+1+1EM=21EM=21A=09EM=21R1=04SUBR3,#012B0F01從寄存器R3中減去立即數01H,并影響標志位。FFF7F7C7FFEFFFFA99CBFFFF+1+1+1+1+1寫入EM=0FEM=0FA=01EM=01EM=01R3=00JZ391F3439若零標志位置1,跳轉到39H地址。C6FFFFCBFFFF寫入+1+1寫入EM=34EM=39_FATCH0000實驗機占用,不可修改。復位后,所有寄存器清0,首先執行_FATCH_指令取指。CBFFFF+1寫入EM=007.設計結果說明1、最先調試時JMP,JC,JZ這些轉移指令全部無效,仔細檢查微程序沒發現有錯誤,經查閱資料發現這幾個指令的機器碼1的第五位和第六位必須對應〔JMP—11,JC—00,JZ—01。2、本來我是先設計指令系統,但是我發現我設計的指令太繁瑣,而且無法估計到底用到哪些指令,最后我放棄先設計指令系統,先寫完匯編程序再設計指令系統。3、在寫除法匯編程序的時候當減掉比被除數〔中間結果更大的余數時,在后面只是簡單的加上余數是無法還原被除數〔中間結果。用一個堆棧,在減余數的之前將被除數〔中間結果壓進棧,當余數大于被除數〔中間結果時,減了以后將棧頂元素值賦給被除數〔中間結果。4、本來設計了一條"SUBR1,R2"這樣的指令。但是在寫指令對應的微指令時,發現這條指令在這個模型機里無法實現。因為在指令中不能同時出現兩個操作數都是寄存器R?。最后我將寄存器R2的值送到累加器A中,然后設計"SUBR1,A"指令。五、本次課程設計的總結體會〔不少于200字通過本次課程設計,我鞏固了所學的《計算機組成原理》中有關指令系統、總線系統等方面的知識,進一步加深了對COP2000實驗儀的使用方法的了解,能夠更加熟練的使用COP2000實驗儀,同時還讓我復習并運用了算法設計與分析和匯編語言的內容。通過這次課程設計,既鍛煉了我的動手能力,又鍛煉了我的動腦能力,使我理論聯系實際,使所學的知識不再枯燥無味,將所學的知識運用到實際,讓我掌握這些知識更牢固。在查找資料的同時也鍛煉了自己的自學能力,還提高了獲取有用信息的能力。本次課程設計對我來說是一次很好的實踐機會,讓我能夠過活學活用知識,在實踐中加深對所學課程的理解,同時加強了我的動手能力,讓我充分認識到了實踐的重要性。在今后的學習和工作中,我要更多注重提高自己的動手能力,在實踐中學習更多的知識。擴展:1.無符號8位乘8位〔1初始化以及輸入乘數與被乘數首先是將部分積初始化送到寄存器R0中,乘數放入R1,被乘數放入R2。直接進行到地址LOOP部分。<2>運算過程首先從乘數最低位開始判斷,將R1放于寄存器A中并和立即數#01H相與,此時可以判斷乘數最低位是0或1。基于語句JZNEXT,當前面的判斷結果是0,跳轉到地址NEXT;否則順序執行程序。跳轉到NEXT,即當程序乘數最低位為0時,將R0不變;順序執行程序,即當乘數最低位為1時,將R0與R2相加,判斷最低位是0還是1,當判斷結果是0,跳轉到NEXT1,否則順序執行程序,所得到的結果送到寄存器R0中,存入數據后無條件跳轉到NEXT2,判斷是否是最后一位。然后進行移位操作。在移位前需要考慮R0的最低位是0或1,因為部分積移到的數值也是結果的部分,就是保存在結果低位的部分,也就是寄存器R1中,所以要保留移掉部分,此時判斷R0最低位。利用語句JZNEXT1,當前面的判斷結果是0,標志位為1,跳轉到地址NEXT1;否則順序執行程序。當部分積最低位是1時,右移R0,進行保存;當部分積最低位是0時,右移R0、R1,進行保存。每次循環結束都要進入結果輸出部分JZNEXT3。〔3顯示乘積的結果最后循環控制程序結束。因為乘法的結果是16位,而此時16位結果的高八位存放在R0,低八位存放于R1。顯示結果為R0顯示的數據加上R1顯示的數據開始開始乘數最低位為1R1YN部分積與被乘數相加部分積不變部分積最低位為1?NY部分積右移乘數右移并加10000000部分積右移乘數右移將部分積右移八次加上乘數寄存器里的數,得到乘積結果循環結束?NY結束輸入部分積、乘數和被乘數結果輸出判斷乘數末位是否為1,應用MOVA,R1和ANDA,#01語句,將乘數與1相與,得出末位結果。然后利用JZNEXT,如果結果是0,則跳轉到地址NEXT;否則順序執行程序。〔1NEXT,即當乘數最低位為0時,R0不變;〔2順序執行程序,即當乘數最低位為1時,將R0與R2相加,所得到的結果送到寄存器R0中。在移位前需要考慮R0的最低位是0或1,因為部分積移到的數值也是結果的部分,就是保存在結果低位的部分,也就是寄存器R1中,所以要保留移掉部分,此時判斷R0最低位。先應用MOVA,R0和ANDA,#01,將部分積與1相與,得出末位結果。利用JZNEXT1,當前面的結果是0,跳轉到地址NEXT1;否則順序執行程序。當部分積最低位是1時,右移R0,右移R1加10000000,進行保存;當部分積最低位是0時,右移R0、R1,進行保存。開始開始乘數最低位為1?YN部分積與被乘數相加部分積不變部分積最低位為1?NY部分積右移乘數右移并加10000000部分積右移乘數右移結束匯編代碼:MOVR0,#00HMOVR1,#32HMOVR2,#95HMOVR3,#08HLOOP:MOVA,R1ANDA,#01HJZNEXTMOVA,R0ADDA,R2MOVR0,AANDA,#01HJZNEXT1MOVA,R0RRAMOVR0,AMOVA,R1RRAORA,#80HMOVR1,AJMPNEXT2NEXT1:MOVA,R0RRAMOVR0,AMOVA,R1RRAMOVR1,AJMPNEXT2NEXT:MOVA,R0ANDA,#01HJZNEXT1MOVA,R0RRAMOVR0,AMOVA,R1RRAORA,#80HMOVR1,AJMPNEXT2NEXT2:MOVA,R3SUBA,#01HORA,#00HJZNEXT3MOVR3,AJMPLOOPNEXT3:JMPNEXT3補碼運算:采用偉福COP2000試驗箱,設計并實現定點補碼一位乘〔booth。要求:采用的算法為定點補碼一位乘booth算法,乘數和被乘數規定為6位,其中首位為符號位。數據要求以原碼的形式輸入,采用補碼方式進行運算。實驗數據從試驗箱的開關輸入,運算的結果在OUT寄存器中顯示。設計原理:比較YnYn+1的狀態執行相應的操作。如下圖是補碼一位乘的運算規則:表1.1Booth算法操作表說明乘數Yn附加位Yn+1說明00附加位、乘數、部分積→1位01部分積加[X]補附加位、乘數、部分積→1位10部分積加[-X]補附加位、乘數、部分積→1位11附加位、乘數、部分積→1位需要說明的是此操作表是在當n≠0時,當n=0時,判斷YnYn+1,運算規則同此操作表只是不移位。即在運算的最后一步,乘積不再右移。設計思路:構造補碼一位乘的初始化所需要的數值因為補碼一位乘的算法需要先求出[X]補、[-X]補、[Q]補,所以先將[X]補、[-X]補、[Q]補分別存貯到0F0H到0F2H存儲單元中。因為部分積和附加位的初始值都是0,所以在0E0H單元存入附加位初始值0,在R0中存入部分積初始值0。其他數的處理:將輸入的一個值Q求出補碼作為乘數Y,并存入R2中;另一個值X存入R1中,根據它來求出[X]補、[-X]補;本實驗規定乘數和被乘數為8位,數據位為7位,所以要完成7次操作,但最后一次不移位,在R3寄存中存入數值n=7,每次操作完成后減1。〔2運算并輸出根據乘數末位及附加位來確定執行的操作,每完成一次操作R3中的數值減一。判斷R3的數值是否為零,若不為零,則繼續循環上述操作,若為零,則循環結束,判斷此時的乘數末位及附加位,再按運算規則進行一次操作,但是不移位,然后結束運算。即開始時Yn+1=0,部分積初值為0,每一步乘法由YnYn+1決定原部分積加[X]補或加[-X]補或加0,再右移一位得到新的部分積,以此重復n步,第n+1步由YnYn+1決定部分積加[X]補或加[-X]補或加0,但不移位,即得最后結果,最后先把乘數的最終結果從OUT寄存其中顯示出來,再將部分積的最終結果從OUT寄存其中顯示出來。〔3實現方式在掌握COP2000試驗箱的體系結構后,充分利用試驗箱提供的匯編語言,以及有限的硬件資源,完成程序的編寫。1算術邏輯運算指令ADDA,R?-----------將寄存器R?的值加入累加器A中ADDA,#II----------立即數II加入累加器A中SUBA,#II-----------從累加器中減去立即數II后加入累加器A中ANDA,R?------------累加器A"與"寄存器R?的值ANDA,#II----------累加器A"與"立即數II的值ORA,R?-----------累加器A"與"寄存器R?的值ORA,#II----------累加器A"與"立即數II的值CPLA----------------累加器A取反,再存入累加器A中〔2數據傳送指令MOVA,R?------------將寄存器R?的值送到累加器A中MOVA,#II-----------將立即數II送到累加器A中MOVR?,A------------將累加器A中的值送到寄存器R?中MOVR?,#II----------將立即數II送到寄存器R?中RRA-----------------累加器右移指令RLA-----------------累加器左移指令〔3跳轉指令JZMM---------------若零標志位置1,跳轉到MM地址JMPMM---------------跳轉到MM地址流程圖:根據運算規則循環相乘判斷乘數末位和附加位YnYn+1,根據運算規則進行循環,其中移位時附加位要與乘數末位保持一致,乘數的首位要與部分積的末位保持一致,部分積移位后的首位要與移位前的首位一致,并且根據數據位的個數決定循環幾次。流程圖如圖2.2:圖2.2循環相乘流程圖具體說明:乘法開始后,先將Y與01H進行"與"運算,判斷Yn的末位,再將附加位與01H進行"與"運算,判斷附加位的末位Yn+1,根據Yn和附加位Yn+1的狀態決定部分積與被乘數相加還是相減,或是不加也不減,然后根據進行算術移位。移位操作需要先判斷乘數Y的末位,如果Yn為1,則附加位為1,反之為0,將乘數右移一位,在判斷部分積的末位,若部分積末位為0,將移位后的乘數首位置0,反之置1,再判斷部分積首位為1,移位后的部分積首位仍置1,移位的操作流程圖如圖2.3:匯編代碼:;r3循環次數MOVA,#07HMOVR3,A;r0=0部分積初始化MOVA,#00HMOVR0,AMOV0E0H,A;inputtor1MOVA,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 轉變思維監理師試題及答案
- 計算機三級嵌入式考試的知識點總結試題及答案
- 珠寶首飾設計及定制合作合同
- 嵌入式設備的效率優化試題及答案
- 現代農業園區租賃經營合同書
- 機械工程CAD應用技術試題
- 全面掌控的2025年行政組織理論考試試題及答案
- 行政組織環境適應性的試題及答案
- 公路工程施工工藝細節的掌握與應用試題及答案
- 附合同安全協議書范本
- 《消防檢查指導手冊》(2024版)
- 電網數字化項目工作量度量規范應用指南(2020版)
- 旅游目的地管理(雙語)知到智慧樹章節測試課后答案2024年秋海南熱帶海洋學院
- 【MOOC】跨文化交際-蘇州大學 中國大學慕課MOOC答案
- 龍湖薪酬管理制度
- 第37屆中國化學奧林匹克(初賽)有機試題解析
- 2021年春期國開電大《C語言程序設計》網上形考(任務1至4)答案
- 九年級人生規劃教案
- 茉莉花簡譜E調(薩克斯適用)
- 2025年湖北省武漢市中考數學模擬考試試卷及答案解析
- 《教育心理學(第3版)》全套教學課件
評論
0/150
提交評論