MIPS指令系統(tǒng)(2010-4-22)_第1頁(yè)
MIPS指令系統(tǒng)(2010-4-22)_第2頁(yè)
MIPS指令系統(tǒng)(2010-4-22)_第3頁(yè)
MIPS指令系統(tǒng)(2010-4-22)_第4頁(yè)
MIPS指令系統(tǒng)(2010-4-22)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MIPS指令系統(tǒng)TANZHIHU匯編語(yǔ)言n CPU主要工作:執(zhí)行指令n 指令是CPU執(zhí)行最主要的操作n 不同類型的CPU執(zhí)行不同指令集pInstruction Set Architecture (ISA).p Intel 80 x86 (Pentium 4), IBM/Motorola PowerPC (Macintosh), MIPS, Intel IA64, .Page 2MIPS體系結(jié)構(gòu)n MIPS公司發(fā)布了第一個(gè)商用RISC結(jié)構(gòu)n 本課程將討論MIPS的一些細(xì)節(jié)n 為什么選擇MIPS而不是Intel 80 x86?p MIPS簡(jiǎn)潔雅致,不會(huì)陷入繁瑣的細(xì)節(jié).p MIPS廣泛應(yīng)用于嵌入式應(yīng)

2、用p X86平臺(tái)主要應(yīng)用于PC領(lǐng)域Page 3匯編語(yǔ)言的變量-寄存器n 匯編語(yǔ)言不能使用變量(C、JAVA可以)p Int a; float b;p 寄存器變量沒有數(shù)據(jù)類型 n 匯編語(yǔ)言的操作對(duì)象是寄存器n 好處:寄存器是最快的數(shù)據(jù)單元n 缺陷:寄存器數(shù)量有限p 編程必須小心,仔細(xì)的高效使用各寄存器n MIPS寄存器字長(zhǎng)-32bits= 1 Wordn MIPS指令集包括32個(gè)通用寄存器n 32 registers in MIPSn $0, $1, $2, $30, $31Page 432個(gè)MIPS寄存器Page 5寄存器編號(hào)MIPS助記符釋義備注0$Zero固定值為0硬件置位23$v0$v1

3、函數(shù)調(diào)用返回值47$a0$a3函數(shù)調(diào)用參數(shù)4個(gè)參數(shù)815$t0$t7暫存寄存器8個(gè)參數(shù)1623$s0$s7通用寄存器調(diào)用之前需保存2425$t8$t9暫存寄存器2個(gè)28$gp全局指針29$sp堆棧指針30$fp幀指針31$ra函數(shù)返回地址1$at匯編器保留2627$k0$k1操作系統(tǒng)保留加減指令n 加法p a = b + c (in C)p add $s0,$s1,$s2 (in MIPS)p C語(yǔ)言變量a, b, c編譯后對(duì)應(yīng)寄存器 $s0,$s1,$s2n 減法p d = e f (in C)p sub $s3,$s4,$s5 (in MIPS)p C語(yǔ)言變量d, e, f編譯后對(duì)應(yīng)寄存器

4、 $s3,$s4,$s5Page 6加減指令n 如何編譯下面的C語(yǔ)言表達(dá)式?a = b + c + d - e;n 編譯成多行匯編指令add $t0, $s1, $s2 # temp = b + cadd $t0, $t0, $s3 # temp = temp + dsub $s0, $t0, $s4 # a = temp - en 一個(gè)簡(jiǎn)單的C語(yǔ)言表達(dá)式變成多行匯編語(yǔ)句n #號(hào)后面是注釋Page 7內(nèi)存數(shù)據(jù)訪問(wèn)指令lw sw lb sb lh shn 讀內(nèi)存指令p g = h + A8; ; (in C)p lw $t0,32($s3) # $t3為A0地址 (in MIPS)p add $

5、s1,$s2,$t0 # g=h+A8n 變址尋址p 偏移量+基址寄存器n 寫內(nèi)存指令p A12 = h + A8; ;p lw $t0,32($t3) # get A8 (in MIPS)p add $t0,$s2,$t0 # A12=h+A8p sw $t0,48($s3) #store A12 Page 8加立即數(shù)n 常數(shù)相加指令p g = g + 4; ; (in C)p Lw $t0, 0($s3) # $t0=4 $s3=Address(4) p add $s1,$s1,$t0 # g=g+4n 立即數(shù)相加指令p addi $s3,$s3,4 # $s3=$s3+4 (in MIP

6、S)Page 9指令實(shí)例語(yǔ)義注釋加add $s1,$s2,$s3$s1=$s2+$s3寄存器尋址減sub $s1,$s2,$s3$s1=$s2-$s3寄存器尋址加立即數(shù)addi $s1,$s2,100$s1=$s2+100寄存器尋址+立即數(shù)尋址取字lw $s1,100($s2)$s1=Mem$s2+100寄存器尋址+變址尋址存字sw $s1,100($s2)Mem$s2+100=$s1寄存器尋址+變址尋址條件判斷指令 beq reg1,reg2,labeln C語(yǔ)言條件判斷指令I(lǐng)f (a=b) i=1; else i=2; n 等效C指令 If (a=b) goto L1; i=2; goto

7、 L2;L1:i=1;L2:Page 10n 等效MIPS指令 beq $s0,$s1,L1 addi $s3,$Zero,2 j L2; L1:addi $s3,$Zero,1L2:n MIPS數(shù)據(jù)傳送指令 addi $s3,$Zero,1 # $s3=1 add $s3,$2,$Zero # $s3=$s2MIPS 條件判斷指令n 條件跳轉(zhuǎn)p If (reg1=reg2) goto Label1 (C語(yǔ)言)p beq reg1,rege2,Label1 (MIPS指令)p bne reg1,rege2,Label2n 無(wú)條件跳轉(zhuǎn)指令p goto Label; (C語(yǔ)言)p J label

8、(MIPS指令)p beq $Zero,$Zero,label (MIPS指令)Page 11邏輯運(yùn)算n 移位指令p a=b2; C語(yǔ)言p sll $s1,$s2,2 # shift leftp srl $s1,$s2,2 # shift rightn 邏輯運(yùn)算p and $t0,$t1,$t2 # t0=t1&t2p or $t0,$t1,$t2 # t0=t1|t2p andi $t0,$t1,100 # t0=t1&100p ori $t0,$t1,100 # t0=t1|100Page 12循環(huán)結(jié)構(gòu)n C語(yǔ)言簡(jiǎn)單循環(huán)結(jié)構(gòu),A為int數(shù)組pdo g = g + Ai; i

9、 = i + j; while (i != h);n 重寫代碼pLoop: g = g + Ai;i = i + j;if (i != h) goto Loop;n 編譯后的變量映射: Page 13ghijA0$s1$s2$s3$s4$s5循環(huán)結(jié)構(gòu)n 最后編譯的MIPS代碼:Loop: sll $t1,$s3,2 # $t1= 4*I addu $t1,$t1,$s5 # $t1=addr A+4i lw $t1,0($t1) # $t1=Ai addu $s1,$s1,$t1 # g=g+Ai addu $s3,$s3,$s4 # i=i+j bne $s3,$s2,Loop # goto

10、 Loop # if i!=hn 原始C代碼: Loop:g = g + Ai; i = i + j; if (i != h) goto Loop;Page 14比較指令 slt sltin MIPS比較指令(Set on Less Than)n slt reg1,reg2,reg3n if (reg2 reg3) (C語(yǔ)言) reg1 = 1; else reg1 = 0;n If (gh) goto Less; n (用slt,bne 兩條指令實(shí)現(xiàn))n slt $t0,$s0,$s1 # $t0 = 1 if ghbne $t0,$0,Less # goto Less # if $t0!=

11、0 # (if (gh) Less: Page 15MIPS過(guò)程調(diào)用n C語(yǔ)言函數(shù)調(diào)用int function(int a ,int b) return (a+b);n MIPS實(shí)現(xiàn)過(guò)程調(diào)用的機(jī)制p 返回地址寄存器 $rap 參數(shù)寄存器 $a0, $a1, $a2, $a3p 返回值寄存器 $v0 $v1p 局部變量 $s0$s7p 堆棧指針 $spPage 16過(guò)程調(diào)用實(shí)現(xiàn)機(jī)制 sum(a,b); /* a,b:$s0,$s1 */int sum(int x, int y) return x+y; 1000 add $a0,$s0,$zero # x = a1004 add $a1,$s1,

12、$zero # y = b 1008 addi $ra,$zero,1016 # $ra=10161012 j sum # 跳轉(zhuǎn),調(diào)用過(guò)程sum1016 2000 sum: add $v0,$a0,$a1 # 過(guò)程入口2004 jr $ra # new # 返回主程序instructionPage 17J 10161008 jal sum1012過(guò)程調(diào)用機(jī)制n JAL Label #link and jump n 等效于如下指令$ra=PC+4; #save next instruction address J Labeln 過(guò)程返回指令Jr $ra #return to main progr

13、amn 問(wèn)題:利用$ra做返回地址,如果過(guò)程嵌套如何返回?p $ra 會(huì)被多次覆蓋p 利用堆棧保存$raPage 18多級(jí)過(guò)程調(diào)用int sumSquare(int x, int y) return mult(x,x)+ y; n 主程序調(diào)用sumSquare(x,y), sumSquare 調(diào)用mult(x,y).n 調(diào)用sumSquare(x,y)時(shí) $ra保存一次,保證該過(guò)程執(zhí)行完畢后能返回主程序。n 但調(diào)用 mult時(shí)會(huì)覆蓋$ran 在調(diào)用mult時(shí)需要保存 sumSquare的返回地址Page 19堆棧操作n sumSquare: addi $sp,$sp,-8 # space on

14、 stacksw $ra, 4($sp) # save ret addrsw $a1, 0($sp) # save yadd $a1,$a0,$zero # mult(x,x)jal mult # call multlw $a1, 0($sp) # restore yadd $v0,$v0,$a1 # mult()+ylw $ra, 4($sp) # get ret addraddi $sp,$sp,8 # restore stackjr $ran mult: .n 注意:除了返回地址以外,函數(shù)參數(shù)等會(huì)覆蓋的變量都需要入棧Page 20“push”“pop”32位定長(zhǎng)MIPS指令格式(R型指令

15、)n OP:指令的基本操作-操作碼n Rs:第一個(gè)源操作數(shù)寄存器n Rt:第二個(gè)源操作寄存器n Rd:存放結(jié)果的目的操作寄存器n Shamt:偏移量,用于移位指令n Funct:函數(shù),對(duì)操作碼進(jìn)行補(bǔ)充Page 21OPRSRtshamtRd6bitsfunct5bits5bits5bits5bits6bitsR 型指令MIPS指令格式 (R型指令)Page 226bits5bits5bits5bits5bits6bits指令格式OPrsrtrdshamtfunctaddR0RegRegReg03210sub減R0RegRegReg03410andR0RegRegReg36orR0RegRegR

16、eg37norR0RegRegReg39sllR0RegRegReg0srlR0RegRegReg2jrR0REG0008addR018191732n add $s1,$s2,$s3 # machine code 0 x2538820MIPS指令格式 (I、J型指令)Page 236bits5bits5bits5bits5bits6bits指令格式OPrsrtrdshamtfunctaddR0RegRegReg03210addiI8RegReg16bits 立即數(shù)lwI35RegReg16bits 立即數(shù)swI43RegReg16bits 立即數(shù)andiI12RegReg16bits 立即數(shù)oriI13RegReg16bits 立即數(shù)beqI4RegReg16bits 立即數(shù)(相對(duì)尋址)bneI5RegReg16bits 立即數(shù)(相對(duì)尋址)jJ226bit 立即數(shù)(偽直接尋址)jalJ326bit 立即數(shù)(偽直接尋址)MIPS指令格式Page 24OPRSRtshamtRd6bitsfunct5bits5bits5bits5bits6bitsOPRSRt6bits立即數(shù)5bits5bits16bitsOP6bits立即數(shù)26bitsR 型指令I(lǐng) 型指令J 型指令MIPS尋址方式總結(jié)n 寄存器尋址

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論