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