MIPS指令系统(2010-4-22)资料_第1页
MIPS指令系统(2010-4-22)资料_第2页
MIPS指令系统(2010-4-22)资料_第3页
MIPS指令系统(2010-4-22)资料_第4页
MIPS指令系统(2010-4-22)资料_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MIPS指令系统TANZHIHU汇编语言n CPU主要工作:执行指令n 指令是CPU执行最主要的操作n 不同类型的CPU执行不同指令集pInstruction Set Architecture (ISA).p Intel 80 x86 (Pentium 4), IBM/Motorola PowerPC (Macintosh), MIPS, Intel IA64, .Page 2MIPS体系结构n MIPS公司发布了第一个商用RISC结构n 本课程将讨论MIPS的一些细节n 为什么选择MIPS而不是Intel 80 x86?p MIPS简洁雅致,不会陷入繁琐的细节.p MIPS广泛应用于嵌入式应

2、用p X86平台主要应用于PC领域Page 3汇编语言的变量-寄存器n 汇编语言不能使用变量(C、JAVA可以)p Int a; float b;p 寄存器变量没有数据类型 n 汇编语言的操作对象是寄存器n 好处:寄存器是最快的数据单元n 缺陷:寄存器数量有限p 编程必须小心,仔细的高效使用各寄存器n MIPS寄存器字长-32bits= 1 Wordn MIPS指令集包括32个通用寄存器n 32 registers in MIPSn $0, $1, $2, $30, $31Page 432个MIPS寄存器Page 5寄存器编号MIPS助记符释义备注0$Zero固定值为0硬件置位23$v0$v1

3、函数调用返回值47$a0$a3函数调用参数4个参数815$t0$t7暂存寄存器8个参数1623$s0$s7通用寄存器调用之前需保存2425$t8$t9暂存寄存器2个28$gp全局指针29$sp堆栈指针30$fp帧指针31$ra函数返回地址1$at汇编器保留2627$k0$k1操作系统保留加减指令n 加法p a = b + c (in C)p add $s0,$s1,$s2 (in MIPS)p C语言变量a, b, c编译后对应寄存器 $s0,$s1,$s2n 减法p d = e f (in C)p sub $s3,$s4,$s5 (in MIPS)p C语言变量d, e, f编译后对应寄存器

4、 $s3,$s4,$s5Page 6加减指令n 如何编译下面的C语言表达式?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 一个简单的C语言表达式变成多行汇编语句n #号后面是注释Page 7内存数据访问指令lw sw lb sb lh shn 读内存指令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 写内存指令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加立即数n 常数相加指令p g = g + 4; ; (in C)p Lw $t0, 0($s3) # $t0=4 $s3=Address(4) p add $s1,$s1,$t0 # g=g+4n 立即数相加指令p addi $s3,$s3,4 # $s3=$s3+4 (in MIP

6、S)Page 9指令实例语义注释加add $s1,$s2,$s3$s1=$s2+$s3寄存器寻址减sub $s1,$s2,$s3$s1=$s2-$s3寄存器寻址加立即数addi $s1,$s2,100$s1=$s2+100寄存器寻址+立即数寻址取字lw $s1,100($s2)$s1=Mem$s2+100寄存器寻址+变址寻址存字sw $s1,100($s2)Mem$s2+100=$s1寄存器寻址+变址寻址条件判断指令 beq reg1,reg2,labeln C语言条件判断指令If (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数据传送指令 addi $s3,$Zero,1 # $s3=1 add $s3,$2,$Zero # $s3=$s2MIPS 条件判断指令n 条件跳转p If (reg1=reg2) goto Label1 (C语言)p beq reg1,rege2,Label1 (MIPS指令)p bne reg1,rege2,Label2n 无条件跳转指令p goto Label; (C语言)p J label

8、(MIPS指令)p beq $Zero,$Zero,label (MIPS指令)Page 11逻辑运算n 移位指令p a=b2; C语言p sll $s1,$s2,2 # shift leftp srl $s1,$s2,2 # shift rightn 逻辑运算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循环结构n C语言简单循环结构,A为int数组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循环结构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语言) reg1 = 1; else reg1 = 0;n If (gh) goto Less; n (用slt,bne 两条指令实现)n slt $t0,$s0,$s1 # $t0 = 1 if ghbne $t0,$0,Less # goto Less # if $t0!=

11、0 # (if (gh) Less: Page 15MIPS过程调用n C语言函数调用int function(int a ,int b) return (a+b);n MIPS实现过程调用的机制p 返回地址寄存器 $rap 参数寄存器 $a0, $a1, $a2, $a3p 返回值寄存器 $v0 $v1p 局部变量 $s0$s7p 堆栈指针 $spPage 16过程调用实现机制 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 # 跳转,调用过程sum1016 2000 sum: add $v0,$a0,$a1 # 过程入口2004 jr $ra # new # 返回主程序instructionPage 17J 10161008 jal sum1012过程调用机制n JAL Label #link and jump n 等效于如下指令$ra=PC+4; #save next instruction address J Labeln 过程返回指令Jr $ra #return to main progr

13、amn 问题:利用$ra做返回地址,如果过程嵌套如何返回?p $ra 会被多次覆盖p 利用堆栈保存$raPage 18多级过程调用int sumSquare(int x, int y) return mult(x,x)+ y; n 主程序调用sumSquare(x,y), sumSquare 调用mult(x,y).n 调用sumSquare(x,y)时 $ra保存一次,保证该过程执行完毕后能返回主程序。n 但调用 mult时会覆盖$ran 在调用mult时需要保存 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 注意:除了返回地址以外,函数参数等会覆盖的变量都需要入栈Page 20“push”“pop”32位定长MIPS指令格式(R型指令

15、)n OP:指令的基本操作-操作码n Rs:第一个源操作数寄存器n Rt:第二个源操作寄存器n Rd:存放结果的目的操作寄存器n Shamt:偏移量,用于移位指令n Funct:函数,对操作码进行补充Page 21OPRSRtshamtRd6bitsfunct5bits5bits5bits5bits6bitsR 型指令MIPS指令格式 (R型指令)Page 226bits5bits5bits5bits5bits6bits指令格式OPrsrtrdshamtfunctaddR0RegRegReg03210sub减R0RegRegReg03410andR0RegRegReg36orR0RegRegR

16、eg37norR0RegRegReg39sllR0RegRegReg0srlR0RegRegReg2jrR0REG0008addR018191732n add $s1,$s2,$s3 # machine code 0 x2538820MIPS指令格式 (I、J型指令)Page 236bits5bits5bits5bits5bits6bits指令格式OPrsrtrdshamtfunctaddR0RegRegReg03210addiI8RegReg16bits 立即数lwI35RegReg16bits 立即数swI43RegReg16bits 立即数andiI12RegReg16bits 立即数oriI13RegReg16bits 立即数beqI4RegReg16bits 立即数(相对寻址)bneI5RegReg16bits 立即数(相对寻址)jJ226bit 立即数(伪直接寻址)jalJ326bit 立即数(伪直接寻址)MIPS指令格式Page 24OPRSRtshamtRd6bitsfunct5bits5bits5bits5bits6bitsOPRSRt6bits立即数5bits5bits16bitsOP6bits立即数26bitsR 型指令I 型指令J 型指令MIPS寻址方式总结n 寄存器寻址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论