MIPS 通用寄存器.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MIPS 通用寄存器

MIPS 通⽤寄存器 MIPS有32个通⽤寄存器($0-$31),各寄存器的功能及汇编程序中使⽤约定如下: 下表描述32个通⽤寄存器的别名和⽤途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved for assembler) $2-$3 $v0-$v1 函数调⽤返回值(values for results and expression evaluation) $4-$7 $a0-$a3 函数调⽤参数(arguments) $8-$15 $t0-$t7 暂时的(或随便⽤的) $16-$23 $s0-$s7 保存的(或如果⽤,需要SAVE/RESTORE的)(saved) $24-$25 $t8-$t9 暂时的(或随便⽤的) $28 $gp 全局指针(Global Pointer) $29 $sp 堆栈指针(Stack Pointer) $30 $fp 帧指针(Frame Pointer) $31 $ra 返回地址(return address) 下⾯给以详细说明: $0:即$zero,该寄存器总是返回零,为0这个有⽤常数提供了⼀个简洁的编码形式。 move $t0,$t1 实际为 add $t0,$0,$t1 使⽤伪指令可以简化任务,汇编程序提供了⽐硬件更丰富的指令集。 $1:即$at ,该寄存器为汇编保留,由于I型指令的⽴即数字段只有16位,在加载⼤常数时,编译器或 汇编程序需要 把⼤常数拆开,然后重新组合到寄存器⾥。⽐如加载⼀个32位⽴即数需要 lui (装⼊⾼位⽴即数) 和addi两条 指令。像MIPS程序拆散和重装⼤常数由汇编程序来完成,汇编程序必需⼀个临时寄存器来重组 ⼤常数,这 也是为汇编保留$at的原因之⼀。 $2..$3:($v0-$v1)⽤于⼦程序的⾮浮点结果或返回值,对于⼦程序如何传递参数及如何返回,MIPS范 围有⼀套约 定,堆栈中少数⼏个位置处的内容装⼊CPU寄存器,其相应内存位置保留未做定义,当这两个 寄存器不够存 放返回值时,编译器通过内存来完成。 $4..$7:($a0-$a3)⽤来传递前四个参数给⼦程序,不够的⽤堆栈。a0-a3和v0-v1以及ra⼀起来⽀持⼦ 程序/过程 调⽤,分别⽤以传递参数,返回结果和存放返回地址。当需要使⽤更多的寄存器时,就需要堆 栈(stack) 了,MIPS编译器总是为参数在堆栈中留有空间以防有参数需要存储。 $8..$15:($t0-$t7)临时寄存器,⼦程序可以使⽤它们⽽不⽤保留。 $16..$23:($s0-$s7)保存寄存器,在过程调⽤过程中需要保留(被调⽤者保存和恢复,还包括$fp和 $ra),MIPS 提供了临时寄存器和保存寄存器,这样就减少了寄存器溢出(spilling,即将不常⽤的变量放到存 储器的过程), 编译器在编译⼀个叶(leaf)过程(不调⽤其它过程的过程)的时候,总是在临时寄存器分配完 了才使⽤需要 保存的寄存器。 $24..$25:($t8-$t9) 同($t0-$t7) $26..$27:($k0,$k1)为操作系统/异常处理保留,⾄少要预留⼀个。异常(或中断)是⼀种不需要在 程序中显⽰ 调⽤的过程。MIPS有个叫异常程序计数器(exception program counter,EPC)的寄存器,属于 CP0寄存器, ⽤于保存造成异常的那条指令的地址。查看控制寄存器的唯⼀⽅法是把它复制到通⽤寄存器⾥, 指令mfc0 (move from system control)可以将EPC中的地址复制到某个通⽤寄存器中,通过跳转语句(jr) , 程序可以返 回到造成异常的那条指令处继续执⾏。MIPS程序员都必须保留两个寄存器$k0和$k1 ,供操作系 统使⽤。 发⽣异常时,这两个寄存器的值不会被恢复,编译器也不使⽤k0和k1,异常处理函数可以将返回 地址放到这 两个中的任何⼀个,然后使⽤jr跳转到造成异常的指令处继续执⾏。 $28:($gp)为了简化静态数据的访问,MIPS软件保留了⼀个寄存器:全局指针gp(global pointer,$gp) ,全局指针 只想静态数据区中的运⾏时决定的地址,在存取位于gp值上下32KB范围内的数据时,只需要⼀ 条以gp为基 指针的指令即可。在编译时

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档