版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
電孑斜技大孕學(xué)號:學(xué)生姓名:一、實驗室名稱:計算機學(xué)院實驗中心二、實驗項目名稱:計算機系統(tǒng)結(jié)構(gòu)課程實驗三、實驗原理:學(xué)號:1.由教師給出一個具有基本功能的VenlogHDL流水線源代碼;學(xué)生完成卜.面3個方面的內(nèi)容:(1)自行設(shè)計匯編偽指令格式,完成一個能把自己的匯編指令轉(zhuǎn)換成流水線CPU能夠識別的二進制指令的匯編器,實現(xiàn)語言不限:(2)自行設(shè)計能夠解決數(shù)據(jù)相關(guān)的機制并基于源代碼進行擴展;(3)自行設(shè)計能夠解決控制相關(guān)的機制并基于源代碼進行擴展。四、實驗?zāi)康?幫助學(xué)生理解流水線的運行機制和基于VenlogHDL硬件描述語言的實現(xiàn)技術(shù)。五、實驗內(nèi)容:(一)基本流水線分析1.1認真閱讀和理解源代碼,請詳細按要求回答每個問題。源代碼中文件是按什么樣的規(guī)律來組織的?答:按照子模塊組織源代碼文件。模塊pipelmedcpu_tb用來控制CPU的時鐘等信號,調(diào)用pipelinedcpu模塊(假定為1級模塊,最高級),1級模塊中按順序調(diào)用各個周期以及周期與周期之間的中間寄存器模塊(假定為2級模塊),2級模塊中調(diào)用各自部件模塊(假定為3級模塊)。模塊pipelinedcpu用來控制每級流水線及流水線級之間的控制信號,寄存器信息,其余子模塊用來具體實現(xiàn)每一級流水線的功能。存儲器的實現(xiàn)方式?答:用一個二維數(shù)組reg[31:0]ram[0:31]實現(xiàn),其中第一維代表32位地址,第二維代表32位數(shù)據(jù)接「I有:32位輸入數(shù)據(jù)和輸出,32位地址,一個同步時鐘脈沖elk,一個控制寫入的信號we先對二維數(shù)組進行初始化讀數(shù)據(jù)時不需要時鐘脈沖的激勵,寫數(shù)據(jù)時需要時鐘脈沖的上升沿激勵信號并且we信號為1源代碼文件中的流水線與我們課堂上講的原理電路圖有何相同之處,有何不同之處答:相同:WB級,寫回級使用2路32位的多路選擇器來選擇是獲取ALU的計算結(jié)果還是LOAD指令從數(shù)據(jù)存儲器中讀取出來的數(shù)據(jù)。這里與課堂上所講的內(nèi)容基本相同。流水線都分為五個執(zhí)行級,都是在譯碼級產(chǎn)生各種控制信號,一級一級往后傳,分離的指令存儲器和數(shù)據(jù)存儲器。各個部件以及邏輯都沒有太大差異不同:源代碼文件中的流水線中的ALU部件的輸出接在一個兩路選擇器上,并旦沒有zero輸出端,而課堂上的直接輸出到中間寄存器源代碼文件中沒有關(guān)于消除數(shù)據(jù)相關(guān)的代碼,而課堂上講的原理電路圖有消除數(shù)據(jù)相關(guān)的線路沒有數(shù)據(jù)前推和load前推的相關(guān)實現(xiàn),指令格式的區(qū)別,流水線alu運算部件兩個端II都可以接受立即數(shù)。通過分析,寫出本流水線的控制信號有哪些?對比我們課堂上講的控制信號的差別有哪些?答:本實驗的控制信號主要有:wreg、m2reg、wmem、jaRah】c、alumim分別表示指令是否要寫寄存器、信號是否有數(shù)據(jù)存儲器中的數(shù)據(jù)需要寫回寄存器、是否有指令需要往數(shù)據(jù)存儲器中寫數(shù)據(jù)、流水線寄存器R是要寫入ALU的運算結(jié)果還是EPC的內(nèi)容、指令的操作類型,例如加、減、與、或。、ALU的B輸入端是否要選擇立即數(shù)輸入差別主要有:regrt信號控制目的寄存器是rd或rt,sext信號控制是否需要傳遞立即數(shù),wmem信號控制是否需要訪存,胛1信號控制exe級和mem級之間是傳遞運算結(jié)果還是立即數(shù),這些信號是課堂上的流水線沒有的。1.2針對流水線的指令集,編寫必要的測試指令,分析運算結(jié)果,回答哪些指令的組合能由此流水線源代碼正確實現(xiàn),哪些指令的組合不能由此流水線源代碼正確實現(xiàn)。(要求在實驗報告中寫出所完成的測試指令的組合、每個組合的仿真過程及結(jié)果、每個過程和結(jié)果的必要分析。)(1)第一組指令序列指令序列:addr2rl1addr2rl10addrlr31addilr210addr2r21addr2r310subr2rl13截圖:gjXlinK?4£?D.'iProg^fr久?〔Gimulatjon]<PV:33%,存:5g,2hXJ必必(32W?10413?ti2020-<0263?D2O0O21(M3ni1020050232ti2610101232HM02001232^000000003?ti0000000032QPfcjgSource為皿號”5onch$Hula<ion尖hdowHdpWSjISXI/^ZXXJ?IBira%S□Ch八06m<?I‘1豆巳I#%%%。哀iir11ariaii?>?iicwo上“自Socrces$<rtrc?f?r:?rG3:?必,6”舊W“>,Hcyt__eEr)E[3uqi?SRUmkpiv)tJ[y^jc?<_<ph-j>p<pc?pip<jcv)舊pro—s_eyu>QT?d£Q2tdf£32▼)C3回,£."*<,~》>psf£v)N(W"_pc-?M〈切iV)辦-3?ja)iQ)[v]ia?t_??g-0?-IHwldv)[Vjd?j?K*>i)v£u-?cr)Now:
1000nso|Ma|3i^。mg:。]Or^0.63119aLi^eversionofISESinulator.Siwulavorisdoingcircuitmicialirationprocess.Finish*^circuitlEirializarionproe*53.|?l.vcre".―皿呵*|2P,"£M1『]*r*!?!?<Q3i?C??>?>!<-【PJXR結(jié)果分析:觀察三到九周期的ealu信號分別為(10,1,1,10,1,10,10),第九個周期的ealu為10,該周期執(zhí)行的指令是subi2rlr3;可見第一條指令賦值11=10;第二條指令賦值「2=1;所以最后一條指令subrlrlr2執(zhí)行后結(jié)果為9,符合條件。當(dāng)有數(shù)據(jù)相關(guān)時,就會出問題,再觀察第五、六、七兩個周期,指令的執(zhí)行結(jié)果均為lo故該程序不能解決數(shù)據(jù)相關(guān)問題。(-)匯編器實現(xiàn)2.1自行設(shè)計與所給出的流水線指令的匯編格式,在下表中寫出。指令指令意義Op[31:26]Op2[25:20][19:15][14:10][9:5][4:0]add寄存器加法00000000000100000rdrsrtaddrdrsrtsub寄存器減法00000000001000000rdrsrtsubrdrsrtmul寄存器乘法00000000001100000rdrsrtmulrdrsrtand寄存器與00000100000100000rdrsrtandrdrsrt01寄存器或00000100001000000rdrsrtorrdrsrtxor寄存器異或00000100010000000rdrsrtxorrdrsrtsra算術(shù)右移000010000001shiftrd00000rtsrardrtshiftsrl邏輯右移000010000010shiftrd00000rtsrlrdrtshiftsll邏輯左移000010000011shiftrd00000rtsllrdrtshiftjreg寄存器跳轉(zhuǎn)0000100001000000000000rs00000jregrsaddi立即數(shù)加法00010116位immediatersrtaddirtrsimmemull立即數(shù)乘法00011116位immediatersrtmulirttsimmeandi立即數(shù)與00100116位immediatersrtaddirtrsimmeon立即數(shù)或00101016位immediatersrtorirtrsimmexori立即數(shù)異或00110016位immediatersrtxorirtrsimmeload取整數(shù)數(shù)據(jù)字00110116位offsetrsrtloadrtrsoffsetstore存整數(shù)數(shù)據(jù)字00111016位offsetrsrtstorertrsoffsetbeq相等則跳轉(zhuǎn)00111116位offsetrsrtbeqrtrsoffsetbne不相等則跳轉(zhuǎn)01000016位offsetrsrtbnertrsoffsetlui設(shè)置高位01000116位immediate00000rtluirtimmejump無條件跳轉(zhuǎn)01001026位addressjumpaddress問子程序調(diào)用01001126位address
jaladdress2.2寫出實現(xiàn)語言、主要數(shù)據(jù)結(jié)構(gòu)、主要功能模塊名字和功能、以必要的流程圖。代碼截圖:1224567S910111213141516171827282951525377781224567S91011121314151617182728295152537778793637384S474853545597313233347273742728299495〃代碼如下:略長,咖啡瓜子前排4packagecn.fs21.ia;importjava.util.Arra/List;importjava.util.Iterator;importjava.io.BufferedReader;importjava.ia.File;importjava.iQ.FilerK>tFoundException;importjava.io.FileReader;importjava.io.lOException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Mapj//mainnuxlulepublicclassmain(=}itoneregularmodulepublicclassoneRegextendsinstruct{n}〃moreregularmodulepublicclassNoreRegextendsinstruct{or}〃binarydefaultmodulepublicclassBinaryDafult{on}〃instructmodulepublicabstractclassinstruct(m}〃errorlogpublicclassErrorLog{ttB}〃decodesourcemodulepublicclassdecodesource(—)〃readsourceinstructmodulepublicclassReadsource{tn〃twoRegularmodulepublicclassTwoRegextendsinstruct{n}〃threeRegularmodulepublicclassThreeRegextendsinstruct{=}〃regbinarymodulepublicclassInstructRegBinary(as}21222324252627282930123333901234567S90123421222324252627282930123333901234567S9012343444444444455555c-
51234567
666&6&c//mainmodulepublicclassmain{publicstaticvoidmain(Stringargs[])(instructRegBlnarystructbinary=newinstructRegBinary();ArrayList(cstring>)anylist=(ArrayList<string>)structbinsry.setvalues(;);lterator<5tring>forit=anylist.iterator();while(forit.hasMextC))(system.out?printin(forit.next());}}}ffoneregularmodulepublicclassoneRegextendsinstruct{publicStringge-tRs(>{returnRs;}publicvoidsetRs(Stringrs)(Rs=rs;^OverridepublicStringge-tlnstructstrC)(〃too?Auto-generatedmethodstubreturnline**'frype*”'r,*Rs;}publiclnstructoneReg()(setLine();}publicStringgetlype()(returnType;publicvoidsetType(stringtype){Type=type;}〃mareregularmodulepublicclassMoreRegextendsinstruct{publicvoidsetAddress(Stringaddress)(Address=Mdress;|?@Overri-depublicstringgetlnstructstrC)(returnline+"'"+Type/“士明打勇安}publicInstruetfjoneR.eg{)(setLine();}publicstringgetiype()(787980Si828284858687S38990919293949595979899160101102103104105106107108109110111112112114115//binarydefaultmodulepublicclassBinaryDafult{privatestringopljprivateStringop2jprivateStringop2;privatestringrd;privatestringrs;privatestringrt;publicvoidsetRt(5.tringrt){this.rt=rt;}publicvoidsetlGbit(stringstr>{
op2=&tr.substringC?,6);
op3=str.substring(6,11);
rd=str.substringCilj16);publicvoidset2Gbit(Stringstr){op2=str.substring(0/op3=str.substringCS^rd=str.substringCii^rs=str.substringCie^rt=str.substringCSlj6);ID;16);21);26);publicStringgetlnstructBinaryO{returnopl+op2+""+?op3+""?rd+""+rs?+rt;}publicinstructBinaryDafult()(opi="?wee?";op2=op3=R&eGG0"jrd=n&&0?en;ps=”海?0、;rt=R齡08、;}116117ns11912012112212312412512Spublicvoidsetopl(stringopl)(this.opl=opl;publicvoidsetop2(stringop2)(this.opz=opz;}publicvoidsetOp3(Stringop3)(this.op3=op3;137//instructmodule138Vpublicabstractclassinstruct{13914Qpublicstaticintline=0-141publicstaticvoidsetLine(){142line**;143144publicabstractstringgetiype<);145publicabstractstringgetlnstructstr{);146}147//errorlog148VpublicclassErrorLogf149Vpublicstaticvoiderror(stringstr){150system.out.printin(str)j151System.exit(0);152}153154//decadesourcemodule155Vpublicclassdecodesource(155157Vpublicvoidrelation^{158Listlterator<5tring>it=list.listIterator();159VwhileCit-hasNext()){1G0stringstr=it.next()j161Stringvalues[]=str.split("");162intregNum=map.get(values[e])j163▼if(regNum==3){164stringReg[]=values[l].split(",");165Stringrd=Reg[0]j166VifCit.hasNextO){167str=it.next()j168stringvalue51[]=str.split(”");169regNum=map.get(valuesl[?]);170Vif(regNum==3){171StringRegl[]=valuesl[l].split("j")j172if(pareio(Regl[1])==017311pareio(Regl[2])==9)(174it.previous();175it.add("addi"+""+Reg[。]**Reg[0]*17S*177it.ad<j("addi"十■■十Reg[o]十,,十f?eg[e]十178+e);179}180▼}elseif(regNum==2)(151StringRegl[]=valuesl[l].split("j")j182if(pareio(Regl[6])==018311pareio(Regl[1])==9)(184it.previous();185it.add("addi"+""+Reg[。]**Reg[0]*186*187it.ad<j("addi"十■■十Reg[o]十,,十f?eg[e]十+e);
17S1791801811821831841S51361S71S81S9190191192193194195196197198199200+}}elseif(regMum==2)(stringRegl[J=valuesl[1].splitf",");if(parero(R.egi[e])==e]]rd.co<iipareio(Regi[1])==0)(it.previousO;it.add("addi"?""+Reg[e],+Reg[e]?"Z+01);it.add("addi"+""+Reg[e]廣,Reg[e]?"Z,。);}elseif(regMum==1){StringReg2[]=valuesl[1].split(n,n);if(rd-compareTo(Reg2[0])==0){it.previous。;it.addC^ddi"+■■,Reg[0j+?Reg[0]+"/+e);it.add("addi"十■.骨Reg[e]十■,十Reg[e]十%"十0);}261』262[}203}2C4}205j}26GpublicList<lnstruct>analysis(>(267relationf);265List<Instruct>maplnstruct=ne*iArrayList<>();Stringsourcelnstruct[]=null;if(list!=null){iteratorstring?it=list.iterator<)jwhile(It.hasNextO)(stringstr=it.nextOistringvalues口=str.split("intregNum=map.getCvalues[e]);216switch(reghum){jcase0::if(values.length==2)(instructFJoneRegnone=newinstructioneR.eg();none.setType(values[??]);none.setAddress(values[l]);maplnstruct?add(none);i}else{:ErrorLog.error(M^析指令是出錯"+str);j}break;icase1;instructoneReginstruct=newlnstructoneR.eg:()jif(values.length==2)(223224225226227223▼229230▼231232233234235236237238239223224225226227223▼229230▼231232233234235236237238239V240241242▼243244245246247248▼249250251252253254255256257258259V262261▼2622632G4265266V267268269276271272273274275▼instructoneReginstruct=newinstructoneaegO;if(values.length==2)(instruct.setTy[>e(values[0]>;instruct.setRs(values[1])jmapinstruct.add(instruct)j}else{ErrarLog.error(N^祈指令是出錯w*str)j}break;case2:instructiwoRegtwo=ne*iInstructTwoReg()jsourcelnstruct=values[1].splitH);if(sourcelnstruct.length==3>(two.setType(values[。]);two.setRs(sourceinstruct[e]);two.setRt(sourceinstruct[l]);two.setlnrn(soureelnstruct[2])jmapinstruct.add(two):)elseif(soureelnstruct.length=2)(two.setTypefvalues[0])jfjtwo.setR.s(sourceinstruct[0]};two.setRt(sourceinstruct[e]);two.setinin("6");mapinstruct.M4(two);}else(ErrorLog.error(n^析指令是出錯”十str);}breakjcase3;instructThreeRfcgthree=newInstructThreeReg();if(values[0].canipareToCsra")]values[0].compareTo(,,5rln)==0Ivalues[e].c?npareTo(r,slln)==e){three.setiype(values[0]);sourceinstruct=values[l]if(sourcelnstruct.length==3>(three.setRdCsourceinstruct[e]);three.setRt(sourceinstruct[i]);three?setlmm(sourcelnstruct[2]>;ma^instruct.M4(three);}else(ErrorLog.error(n^折指令是出錯”+str>;}274275V27&27727S27928。281282283284285286287288289290291292V293294295296297298299'▼300▼301302303304V30530&30730S309310311312▼V31531&31731331&32?321322▼323324V32532&three.setType(values[。]);sourceinstruct=values[l].split(R?r,);three.setR.d(sourceInstruct[0]);three.setns(sourceinstruct[i]);three.setR.t(sourceinstruct[2]>;mapinstruct.a<id(three>;}break;default:ErrorLag.ernor(F,p]操作苻指兮與錯了”+str);})returnmapinstruct;}publicAnalyss.ourcein^truct()(rs=newReadSaurceinstruct()jlist=rs.getListInstructsstr();map=rs.getRegF4um()j}〃publicclassReadS-ource{publicMap<StringJInteger>getRegNumf){BufferedReaderbfFileReg=null;FileReaderfileReg=null;Map<string?lnteger>map=newHashNap<>();try(stringregstr=”寄存器fileReg=newFileReader(newFile(regstr));readsourceinstructmodule}catch(FilefwtFoundExceptione)(e.printstackiraceO;bfFileReg=ne*/BufferedReader(fiLeReg);Stringstr;try(while((str=bfFileReg.readLine())!=null)(StringsArray[]=str.split("")jif(sArray.length==2){map.put(sArray[e],newinteger(sArray[1])>;}})catch(lOExceptione}{e.printstackirace();}finally{try(fileReg.close(>;bfFileReg.closeO;331returnmap-j332}333334VpublicList<5tring>getListlnstruct55tr()(335Stringstrinstruct="source.txt";336List<string>instructFromsourcestr;337instructFromsourcestr=ne*iArrayList<>();BBSFileReaderfilelnstruct=null;335try(340filelnstruct=newFileReaderfnewFile(strinstruct));341V}catch(FileriotF-oundExceptionel>(342343el.printstackTrac344}345BufferedReaderbfFileInstruct=newBufferedHeader(filelnstruct);34&stringstr;347▼try(348while((str=bfFileinstruct.readLineO)!=null)(349InstructFromSourceStr.add(str);35?}351)catch(lOExceptione>f352e.print5tackTrace(>;353V}finally(354Vtry(355filelnstruct.close();356bfFilelnstruct.close(>;357V}catch(lOExceptione){358system,out.printin取源程序出錯;359e.printstackTrace();360}361}362363returnInstructFromSourceStrj364}365▼publicMapcstring^string>getRegBinary()(366Mapcstring,5tring>map=newHashMap<>();367BufferedReaderbfFileR.eg=null;3GSFileReaderfileReg=null;369▼tryf、370StringregStr=■二誑制序列.txt七371fileReg=newFileReader(newFile(regstr));372bfFileReg=neiuBufferedReader(fileReg);373}catch(FileriotF-oundEKceptione)(374e.print5tackTrace(>;375}376377Stringstr;378▼try(379▼while((str=bfFileReg.readLine())!=null)(38?stringsArray[]=str.split(w381▼ifCsArray.length==2){3S2ifCsArray[l].length()==5)383map.put(sArray[0],sArray[l]);,3822833S438528G387388229390V291392V3932943953962973983994&S401V402403404V405406407408409410411VV414415416417418419420421V422V423424425426427428429430431432433434?if(sapray[1]-lemgth()==5)raap.put(sArray[0],sArray[l]);else5ystem.out.println(”寄存器所對應(yīng)二進制序列不苻合規(guī)定”);}}}catch(lOExceptione){e.printstacklrace(>;}finally{try{bfFileReg.closeC);-fileReg.closeO;}catch(lOExceptione){e.printstacIcrrace();returnmap;}publicMap<5tring,5tring>getwapoperateBinaryC){Map<stringJstring>map=newnashNap<>();FileReaderfileOpStr=null;try{Stringopstr=”操作碼二波制序列.七虹”;fileop-str=newFileReader(newFile(opstr)}catch(Filer^otFoundExceptione>(e.printstackirac&C);)BufferedReaderbf-fileopstr=neiuBufferedReader(fileopstr);Stringstr;try{while((str=bffileopstr.readLine())!=null)(String5Array[]=str.split(r,n);if(sArray.length==2)(map.put(sArray[e],sArray[l])j)}catch(lOExcepti-one>(e.printstackirace-O;}finally{try(bffileopstr.close();fileopstr.closeC);}catch(lOExceptione){e.printstacIcrrace()j}}returnnap;}〃publictwoRegularmoduleclassTwoRegextendsinstruct{n433434435436437433434435436437438publicclassTwoRegextendsinstruct{privateStringType;privatestringRs;privatestringRt;privateStringimm;publicStringgetlmmC)(returnimmjpublicvoidsetlmm(stringunm)(Imm=imm;TOC\o"1-5"\h\z}publicinstructTwoRegO(setLine();}publicvoidsetType(Stringtype){Type=type;}publicstringgetRsf)(returnRs;}publicvoidsetRs(5tringrs){f?5=rsj}publicStringgetRtf){returnRt;}publicvoidsetRt(stringrt){Rt=rt;}publicstringgetType()(returnType;}goverri-depublicstringgetlnstructstrO(476471472473474475476476471472473474475476477478479480481482483484485〃threeRegularmodulepublicclassThreeRegextendsinstruct(privatestringRs;privatestringRt;privateStringimrujprivatestringType;privatestringRd;publicInstructThreeRegO{setLine0;}publicstringgetRtf){returnRt;}473//threeRegularinodule■■474▼publicclassThreeR.egextendsInstruct{475privatestringRsj476privatestringRt;477privateStringiron;478privatestringType;479privatestringRd;480publicinstructThreeRegO(481setLine()j482)483publicstringgetRtQ(484returnRt;485)486487publicvoid5etRt(stringrt)(4SSRt=rt;489}490491^Override492▼publicstringgetlnstructstr()(493494returnline*MH*Type+n”管Rd",Prs/,495}496497publicStringgetlmm()(498returniron;499)see501publicvoidsetlmm(stringim)(502this.imm=inrn;503}504publicstringgetType()(505returnType;506)507508publicvoidsetTypefstringtype){509Type=type;sie}511512pub-lieStringgetRdf)(513returnRdj514515516publicvoidsetRd{stringrd)(517Rd=rd;518)519526publicstringgetRs()(521returnRs;522}523524publicvoi-dsetRs(stringrs)(52852852953053153253353453553G53753853954054154254354454554654754854955055155255355455555G5575585595605615625635645G55G6567568569570571572573574575576577578〃regbinarymodulepublicclassinstructRegBinary(privateMap<string,string>mapoperateBinary;privateMap<stringjstring〉mapRegBinaryjprivateList<String>listGoa11nstructjprivateList<lnstruct>listinstruct;privateMap<String/lnteger>mapRegMum;p-ublicins-tructRegainary(){Readsourceinstructrs=ne-wReadsourceinstruct();Analyssourceinstructas=newAnalyssourceinstructC);napRegBinary=rs.getRegBinary(>;listinstruct=as.analysis();napRegNuin=rs.getRegMumOjnapaperateBinary=rs.getwapoperateBinary()jlistGoaHnstruct=newArrayList<>()j}InstructBin3rjDafultibd;privateStringBin26bit(stringaddress)(〃轉(zhuǎn)成二進制stringBuffersb*f=toBin(newinteger(address));stringstr=sb-f.reverse().tostring()j■for(inti=0ji<26?sb-f.length()ji,+){str=R0r,+str;}returnstr^}privateStringBinl&bit(stringaddress){//轉(zhuǎn)成二避制StringBirfferst>f=toBin(newinteger(address));stringstr=st>f.reverse().tostring();for(inti=0ji<16-sbf.length()jir)(str=,礦+str;}return:str;}p-ublicList<String>setvalues(){lterator<lnstruct>it=11stInstruct.iterater();instructinstruct;//要解蓬的寄存器StringtypeBinary;//.咎類型對應(yīng)的握作二進制序列Stringiron;//立即數(shù)字符禹Stringrd」rs,rtj//各寄存器的名字intregNun;//寄存器個數(shù)while(it.hasHex±())(instruct=it.nextC)5regNum=mapRegNum.get(instruct.getType())jswitch(regMun){casee:Line201zColumn2258959059159259359458959059159259359459559659761261361461561661761861962。621622623624625626627628629630631632633634635636637638}break;case1:ibd=newinstructBinariDafultO;typeBinary=oapOperateBinary.get(instruct.getType())5rs=mapRefBinary.get(((instructOneReg)instruct).getRs());ibd.setRs(rs);ibd?setopl(typeBinary);ListGoaUnstruct?add(ibd?getlnstructBinary());break;case2;ibd=newinstructBinarjDafultO;if(instruct.getlype().compareTo(nlui")!=0){typeBinary=mapoperateBinary.get(instruct.getiype())jrs=mapRegBinary.get(((lnstructTwoReg)instruct)-getRs());rt=mapRegBinary.getC((lnstructTwoReg)instruct)-getRtO);iron=((instructTwoReg)instruct),getiron()jimm=Binl6bit(imm);if(irwn.length()<=16){it>d.setopl(typeBinary);itxd.setRs(rs);ibd.setRt(rt);it>d?setlGbit(imm);listGoallnstruct.addCibd.getlnstructBinary());}else(ErrorLog.error("立即數(shù)太大"+((instructr^oneReg)Instruct).getlnstructstr());}}else(typeBinary=mapoperateBinary.get(instruct.getiype());〃rs=mapRegBinary.getC((lnstructTwoRe5)//instruct).getRs());rt=mapRegBinary.get(((InstructTwoReg)instruct)-getRt());imm=((InstructTwoReg)instruct).getImm();imm=if(irwn.length()>=16){iM?setopl(typeBinary);itxd.setRt(rt);it>d?setlGbit(imm);listGcallnstruct.addCibd.getlnstructBinary());}else{ErrorLog.error廠立即數(shù)太大"+((instructrwneReg)Instruct).getlnstructstr());}}break;case3:639ibd=newlnstructBinarjDafult(>;640641if(instruct.getType().compareTo("sra")==0
643&4464564G647648inst:njct.getType()?compmreTo(yLr}==e)(typeBinary=map€)perateBinary.get(instruct.getType(>>j643&4464564G647648?get(((lnstructThreeReg)instruct).getR-d());stringop3=((instructThreeReg)instruct).getlimn()jstringBuffersbf=toBinCnewlnteger(ap3));&49650V651G52653654G55656657G58659660V&G1G62663&G4V665666S67668669S70G71672673G74675676G77678679G806S1682&8B6S4685686V6S7688V&89G90691692693694695op3=st>f.reverse().tostring()jif(op3.length()==5)(rt=ma^RegBinary.getCC(InstructThreeReg)instruct).getRt());Stringvalues[]=typeBinary.split(r,,n);itxj?setopl(values[0j>;iM?setop2(values[l]j>;iM.setRd(rd)jitxj.setop3(op3);iM.setRt(rt);listGoallnstruct.add(ibd.getlnstructBinary());}else(,、&49650V651G52653654G55656657G58659660V&G1G62663&G4V665666S67668669S70G71672673G74675676G77678679G806S1682&8B6S4685686V6S7688V&89G90691692693694695stringvalues[]=typeBinary.split(",ibd.setopiCvalues[?]);ibd.setop2(values[1]);ibd.setR.dCrd);ibd.setR.sCrs);ibd.setRt(rt);list^Goallnstruct.ad-d(ibd.getln5truct&inary())j)breakj|!}}returnlistGoallnstruct;}stringBuffertoBin(intx}(StringBirfferresult=newStringBuffer。;do(result.append(xX2);x/=2;}while(x>e);returnresult;}2.3給出匯編器的運行界面(若有),寫出所實現(xiàn)的匯編器的操作步驟及使用說明,并自己設(shè)計并給出測試用例及運行結(jié)果,使得所有指令均能自動生成二進制格式的指令。匯編器的使用步驟:(1)在程序目錄F的mstniction.txt中輸入指令(2)運行程序。(3)打開instruction.txt,發(fā)現(xiàn)在指令的下方依次出現(xiàn)了各條指令對應(yīng)的二進制碼。測試截圖:文件(F)林E)摧式(。)妾CV)幫助(H)addrlOrllrl2subrlOrllrl2inulrlOrllrl2andrlOrllrl2orrlOillz!2grlOrllrl2srarlOrl210srlrlOrl210sllrlOr!210jregxlladdit12xll100inulit12xll100andit12xll100orirl2rll100xorit12xll100load112ill100storerl2rll100beqrl2rll100bnerl2rll100luirl2100jimp100jal10010296c20296c30296c410296c420296c440296c815280c825280c835280c84001601401916clc01916c|2401916c2801916c3001916c3401916c3801916c3c01916c4001916c4401900c480000644c000064(三)數(shù)據(jù)相關(guān)分析及解決數(shù)據(jù)相關(guān)的分析一般指令的數(shù)據(jù)相關(guān)分析有數(shù)據(jù)相關(guān)對應(yīng)數(shù)據(jù)相關(guān)JLassignrow[6*h00]=32,h04400421;//xorassignpg|6%01j二32?hl4000421;〃addirl,r1,1assignrom「6'h02]32fhl4000421;//addirl,rl,lassignroa[6*h03]=32*h04400842;//xorr2,r2,r2assignrom[6'h04J-32*H14000842;//addir2,r2,2is2即第二源操作數(shù)可以是寄存器或者立即數(shù),但根據(jù)字符串解析可以區(qū)分出來,因此這些指令都歸為一類解決數(shù)據(jù)相關(guān)問題。產(chǎn)生相關(guān)的條件:if嗎執(zhí)行訪律寫回取指訪存取指,碼執(zhí)行訪存如上圖所示,相鄰的兩條指令中,如果第二條指令的兩個源操作數(shù)寄存器與上一條指令的目的操作數(shù)寄存器相同,那么第二條指令在譯碼周期從寄存器堆中取源操作數(shù)值的時候,上一條指令還只在執(zhí)行周期,還沒有將最后結(jié)果寫回到相應(yīng)的寄存器中,因此第二條指令取到的源操作數(shù)的值并不是最新的值,因此而產(chǎn)生了數(shù)據(jù)相關(guān)。解決方案:取指詳碼執(zhí)行訪行與回NopNopNop取指誹碼執(zhí)行訪存寫回如上圖所示,在直接相鄰的兩條產(chǎn)生數(shù)據(jù)相關(guān)的指令之間插入三條空指令,這樣在第二條指令譯碼之前,第一條指令己經(jīng)將結(jié)果寫回,第二條指令取到的源操作數(shù)的值是最新的值,數(shù)據(jù)相關(guān)就消除了。以上情況針對相鄰的兩條產(chǎn)生數(shù)據(jù)相關(guān)指令的分析,而對于中間隔了一條或兩條無數(shù)據(jù)相關(guān)指令的兩條指令產(chǎn)生了數(shù)據(jù)相關(guān),解決方案是分別插入兩條、一條空指令。(2)store和條件跳轉(zhuǎn)指令的數(shù)據(jù)相關(guān)分析及解決store和條件跳轉(zhuǎn)指令設(shè)計的格式:op十is+rt+offset對于這兩條指令來說,盤和巡相當(dāng)于源操作數(shù),而它們沒有目的操作數(shù),因此在判斷一般指令的數(shù)據(jù)相關(guān)需要作另外特殊判斷。(3)jreg指令指令格式:op+rs沒有目的寄存器,且只有一個源操作數(shù),可以與條件跳轉(zhuǎn)指令歸為一類判斷。2.數(shù)據(jù)相關(guān)的解決(1)程序流程圖
上圖左邊部分就是匯編器實現(xiàn)部分的流程圖,在此基礎(chǔ)上進行擴展,即如箭頭所指方向,中間兩步替代為右邊部分。(2)測試程序指令:xorr2,r2,r2addr3,r2,r1xorr2,r2,r2addir1,r1,20addir2,r2,10luir1,1翻譯結(jié)果:assignrom6^00]=32^04400421;//xorrl,rl,rlassignrom"6'h01]-321hO0000000;//nopassignrom6'h02]=321h00G00G0O;//nopassignro<n.6,h03]=32,hl4000421;//addiassignrom.6*h04J=32*h00000000;//nopassignrom"6'h05]-321hO0000000;//nopassign^[6^061=32^14000421;//addirl,rl,lassignrom6"h07J32^00000000;//nopassignr(xn6,h0832,h0?000000?|assignrom'6'h09]=321h04400842;//x<:"2,r2,^2assignrow6*h0A1=32^00000000;//nopassignro<n.6"h0BJ=32*h00G00O00;//nopassignrom,6*h0CJ32^14000842;//addi「2/2,2如上圖所示,在產(chǎn)生數(shù)據(jù)相關(guān)的指令前插入了空指令“addirOrOO”。在X11U1X中的仿真結(jié)果:CurremShnulatkmTime:206000nsi3ns100ns2001111111111ns300ns400ns500ns600ns700ns800ns930ns1(K)0nsIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIaPd3i:Ql32110000000以32h0000000&<321i000000堿&2^0000000。<32仙0000016>:32印。00001或32h0000001§,;32hOOOOOOl032hODOOOO,{j>3ZEOOi)0024a字項蜓1:0);3ZhOOOOOOO砍3對044D042#321104401084乜2仙440084為忽li04400Cqj>32'h1400D42j〉32hM00084j[32704401084□ealu[31:0]fI321)00000000>:32h00000001>^3ZhOOOOOO(i2)'32hOOOi\ACJOOuO□中malu[31.0)\32TDOODOODO>;321)000000(.1>^00000002a明walu[31:0)(3ZhQ00Q0000")^00000001以!CIOCK1|I||II__II__II__II_Il_qJ!降皿結(jié)果是正確
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 丁苯橡膠裝置操作工崗前競爭分析考核試卷含答案
- 2025呼倫貝爾扎蘭屯市中小學(xué)教師競爭性比選62人備考題庫附答案
- 淀粉加工工崗前安全文明考核試卷含答案
- 玻璃鋼制品噴射工安全文化水平考核試卷含答案
- 電工合金熔煉及熱變形工安全風(fēng)險能力考核試卷含答案
- 地毯設(shè)計師崗前設(shè)備考核試卷含答案
- 炭素壓型工誠信道德模擬考核試卷含答案
- 玻纖制品后處理工崗前技術(shù)基礎(chǔ)考核試卷含答案
- 2024年黑龍江省特崗教師招聘真題匯編附答案
- 2024年豫章師范學(xué)院輔導(dǎo)員考試筆試真題匯編附答案
- 人工智能推動金融數(shù)據(jù)治理轉(zhuǎn)型升級研究報告2026
- 2026長治日報社工作人員招聘勞務(wù)派遣人員5人備考題庫含答案
- 期末教師大會上校長精彩講話:師者當(dāng)備三盆水(洗頭洗手洗腳)
- 2026年濰坊職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題附答案詳解
- 工兵基礎(chǔ)知識課件
- 2026年貴州省交通綜合運輸事務(wù)中心和貴州省鐵路民航事務(wù)中心公開選調(diào)備考題庫及答案詳解參考
- 2025四川雅安市名山區(qū)茗投產(chǎn)業(yè)集團有限公司招聘合同制員工10人參考題庫附答案
- 人工智能應(yīng)用與實踐 課件 -第5章-智能體開發(fā)與應(yīng)用
- 2025浙江紹興越城黃酒小鎮(zhèn)旅游開發(fā)有限公司編外人員第二次招聘總筆試歷年典型考點題庫附帶答案詳解2套試卷
- 聘用2025年3D建模合同協(xié)議
- 2025-2026學(xué)年西南大學(xué)版小學(xué)數(shù)學(xué)六年級(上冊)期末測試卷附答案(3套)
評論
0/150
提交評論