資源描述:
《mips 體系結(jié)構(gòu)和匯編語言快速入門》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、MIPS體系結(jié)構(gòu)和匯編語言快速入門譯者:SonicFu,NortheasternUniversity,Boston,MA,USA譯者按:有修改,無刪減,初學(xué)必讀。學(xué)習(xí)筆記,拋磚引玉!網(wǎng)上有一個(gè)老版本,不如此版全面。英文原版:http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm#IOSystemCalls本文分3部分:1、寄存器2、程序結(jié)構(gòu)框架3、編寫匯編程序概要:數(shù)據(jù)類型和文法?數(shù)據(jù)類型:字節(jié),byte占用(8bit),halfword占2byte=16bit),word占用(4byt
2、e=32bit)?一個(gè)字符需要一個(gè)Byte的空間;?一個(gè)整數(shù)需要1個(gè)Word(4Byte)的空間;?MIPS結(jié)構(gòu)的每條指令長度都是32bit寄存器?MIPS體系架構(gòu)有32個(gè)通用寄存器。在匯編程序中,可以用編號$0到$31來表示;?也可以用寄存器的名字來進(jìn)行表示,例如:$sp,$t1,$ra….?有兩個(gè)特殊的寄存器Lo,Hi,用來保存乘法/除法的運(yùn)算結(jié)果;此2寄存器不能直接尋址,只能用特殊的指令:mfhi和mflo來aceess其中的內(nèi)容。(含義:mfhi=movefromHi,mflo=MovefromLow.)?堆棧(Stack)的增長方向是:從內(nèi)存的
3、高地址方向,向低地址方向;表格1:寄存器的編號名稱及分類編號寄存器名稱寄存器描述0Zero第0號寄存器,其值始終為01$at(AssemblerTemporary)是Assembler保留的寄存器2~3$v0~$v1(values)保存表達(dá)式或函數(shù)返回的結(jié)果(arguments)作為函數(shù)的前四個(gè)入?yún)?。在子函?shù)調(diào)用的過程中不4-7$a0-$a3會被保留。(temporaries)Callersavedifneeded.Subroutinescanusewithout8-15$t0-$t7saving.供匯編程序使用的臨時(shí)寄存器。在子函數(shù)調(diào)用的過程中不會被保
4、留。(savedvalues)-Calleesaved.16-23$s0-$s7Asubroutineusingoneofthesemustsaveoriginalandrestoreitbeforeexiting.在子函數(shù)調(diào)用的過程中會被保留。(temporaries)Callersavedifneeded.Subroutinescanusewithout24-25$t8-$t9saving.供匯編程序使用的臨時(shí)寄存器。在子函數(shù)調(diào)用的過程中不會被保留。這是對$t0-$t7的補(bǔ)充。26-27$k0-$k1保留,僅供中斷(interrupt/trap)處理
5、函數(shù)使用.globalpointer.全局指針。Pointstothemiddleofthe64Kblockof28$gpmemoryinthestaticdatasegment.指向固態(tài)數(shù)據(jù)塊內(nèi)存的64K的塊的中間。29$spstackpointer堆棧指針,指向堆棧的棧頂。savedvalue/framepointer保存的值/幀指針30$s8/$fp其中的值在函數(shù)調(diào)用的過程中會被保留31$rareturnaddress返回地址匯編程序結(jié)構(gòu)框架匯編源程序代碼本質(zhì)上是文本文件。由數(shù)據(jù)聲明、代碼段兩部分組成。匯編程序文件應(yīng)該以.s為后綴,以在Spim軟件
6、中進(jìn)行模擬。(實(shí)際上ASM也行。)數(shù)據(jù)聲明部分在源代碼中,數(shù)據(jù)聲明部分以.data開始。聲明了在代碼中使用的變量的名字。同時(shí),也在主存(RAM)中創(chuàng)建了對應(yīng)的空間。程序代碼部分在源代碼中,程序代碼部分以.text開始。這部分包含了由指令構(gòu)成的程序功能代碼。代碼以main:函數(shù)開始。main的結(jié)束點(diǎn)應(yīng)該調(diào)用exitsystemcall,參見后文有關(guān)systemcall的介紹。程序的注釋部分使用#符號進(jìn)行注釋。每行以#引導(dǎo)的部分都被視作注釋。一個(gè)MIPS匯編程序框架:#Commentgivingnameofprogramanddescriptionoffun
7、ction#Template.s#Bare-bonesoutlineofMIPSassemblylanguageprogram.data#variabledeclarationsfollowthisline#....text#instructionsfollowthislinemain:#indicatesstartofcode(firstinstructiontoexecute)#...#Endofprogram,leaveablanklineafterwardstomakeSPIMhappy編寫MIPS匯編程序:Content:PartI:數(shù)據(jù)的聲明
8、PartII:數(shù)據(jù)的裝載和保存(Load/Store指令)PartIII:尋址P