資源描述:
《微機(jī)原理 mips匯編程序設(shè)計(jì) mips匯編程序設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、MIPS匯編語(yǔ)言程序設(shè)計(jì)LD(R31,x,R0)BNE(R0,skip,R31)LD(R31,y,R1)ADDC(R1,1,R1)ST(R1,y,R31)skip:...$%$^$&&$&$if(x==0)y=y+1;2010-10-101匯編程序設(shè)計(jì)思路1機(jī)器語(yǔ)言01010110001110001001010010…2匯編3編譯器4典型程序結(jié)構(gòu)及匯編語(yǔ)言設(shè)計(jì)2010-10-102回憶一下:我們已經(jīng)有了UTM的思想讀寫頭?圖靈機(jī)只要根據(jù)每一時(shí)刻讀寫頭讀到的一個(gè)方格的信息和當(dāng)前的內(nèi)部狀態(tài)對(duì)程序進(jìn)行查表,就可以確
2、定下一時(shí)刻的內(nèi)部狀態(tài)和輸出動(dòng)作了。?具體的程序是一個(gè)列表,也叫做規(guī)則表。無(wú)限長(zhǎng)紙帶圖靈機(jī)模型回憶一下:我們已經(jīng)有了UTM的思想1:T查看Tape2和Tape3來(lái)決定圖靈機(jī)的配置T(采用第k個(gè)圖uk靈機(jī))及它的輸入j;2:T查看第一個(gè)磁帶Tape1決定T會(huì)怎么做;uk3:修改磁帶2和3以反映T(j)在計(jì)算過(guò)程中的動(dòng)作和內(nèi)部狀態(tài)變k化;我們的任務(wù)是計(jì)算所有的可計(jì)算的整數(shù)函數(shù)2010-10-104解釋:InterpretationTuring的解釋器模型:?首先是有一個(gè)與問(wèn)題無(wú)關(guān)的通用機(jī)器UTM;M1?為M1編寫一
3、個(gè)簡(jiǎn)單的程序使得M1完成一個(gè)簡(jiǎn)單的功能M2;?M1和程序Pgm一起變成了一個(gè)虛擬的(Virtual)M2;解釋的層次:?在計(jì)算機(jī)中通常我們會(huì)使用多個(gè)不同層次的解釋器來(lái)實(shí)現(xiàn)我們想要的行為,例如:?X86(pentium)上面運(yùn)行著?JavaVM上面又運(yùn)行著?應(yīng)用程序比如ant?數(shù)據(jù)結(jié)構(gòu)比如走迷宮的螞蟻2010-10-105編譯器編譯器的模型:V給定一個(gè)UTMM1;V尋找一個(gè)比較容易寫的語(yǔ)言L2(比如是為了機(jī)器M2設(shè)計(jì)的)并寫一段程序;V編寫一個(gè)Translator使得這個(gè)Translator可以將M2的語(yǔ)言轉(zhuǎn)換
4、為M的語(yǔ)言1Interpretation&Compilation:兩個(gè)不同的提高可編程性的方法.V都容許改變我們的編程的模型V都可以提供一種與平臺(tái)(如處理器)無(wú)關(guān)的編程語(yǔ)言;V都是在現(xiàn)代的計(jì)算機(jī)系統(tǒng)中被廣泛采用2010-10-106Interpretation與Compilation這兩種強(qiáng)有力的工具也有區(qū)別:InterpretationCompilation如何對(duì)待”x+2”計(jì)算x+2產(chǎn)生一個(gè)可以計(jì)算x+2的程序什么時(shí)候計(jì)算在執(zhí)行過(guò)程中在執(zhí)行之前什么代價(jià)(使什么變慢)程序執(zhí)行時(shí)間程序的開發(fā)時(shí)間結(jié)果在什么時(shí)候
5、確定運(yùn)行時(shí)編譯時(shí)我們以后會(huì)經(jīng)常遇到的一個(gè)關(guān)鍵問(wèn)題:是在運(yùn)行時(shí)實(shí)現(xiàn)還是在編譯時(shí)實(shí)現(xiàn)?2010-10-107MIPS匯編器:語(yǔ)法?注釋行以“#”開始;?標(biāo)識(shí)符由字母、下劃線(_)、點(diǎn)(.)構(gòu)成,但不能以數(shù)字開頭,指令操作碼是一些保留字,不能用作標(biāo)識(shí)符;?標(biāo)號(hào)放在行首,后跟冒號(hào)(:),例如.data#將子數(shù)據(jù)項(xiàng),存放到數(shù)據(jù)段中Item:.word1,2#將2個(gè)32位數(shù)值送入地址連續(xù)的內(nèi)存字中.text#將子串即指令或字送入用戶文件段.globalmain#必須為全局變量Main:lw$t0,itemMIPS匯編中的
6、命令見Page6252010-10-108MIPS匯編器:存儲(chǔ)器中位置0x00400020move$s5,$31?匯編語(yǔ)言源文件:.s0x00400024beq$0,$0,fact0x00400028sw$s0,f($0)?特殊符號(hào)“.”(點(diǎn)):表示當(dāng)前位置….text0x00400100ò“.”MIPS匯編命令標(biāo)識(shí)符0x00400100fact:addiu$s0,$0,1ò“l(fā)abel:”0x00400104lw$s1,n($0)?label被賦值為當(dāng)前位置的0x00400108loop:mul$s0,$s
7、1,$s0地址0x0040010Csubu$s1,$s1,1?Fact=0x004001000x00400110bnez$s1,loopò編譯時(shí)就確定了0x00400114addi$31,$s5,4?匯編程序在地址0x00400000開始0x00400118jr$31ò在LW,SW,BEQ,BNE等指令….data0x10000200中都有應(yīng)用0x10000200n:.word42010-10-1090x10000204f:.word0能運(yùn)行的版本(1):.text.text0x00400100main:fa
8、ct:addu$s3,$ra,$0sw$ra,0($s7)ori$s6,$0,0x1000addiu$s0,$0,1sll$s6,$s6,16lw$s1,0($s4)#$s0=n!loop:mul$s0,$s1,$s0addiu$s4,$s6,0x0200subu$s1,$s1,1addiu$s5,$s6,0x0204bnez$s1,loop#f=n!addiu$s7,$s6,0x0208jresu