寄存器指令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为基
       指针的指令即可。在编译时,数据须在以gp为基指针的64KB范围内。
$29:($sp)MIPS硬件并不直接支撑堆栈,你可以把它用于别的目标,但为了应用别人的程序或让别人应用你的程
       序, 还是要遵守这个约定的,但这和硬件没有关系。
$30:($fp)GNU MIPS C编译器应用了侦指针(frame pointer),而SGI的C编译器没有应用,而把这个寄存器当作保
       存寄存器应用($s8),这节省了调用和返回开销,但增加了代码生成的复杂性。
$31:($ra)寄存返回地址,MIPS有个jal(jump-and-link,跳转并链接)指令,在跳转到某个地址时,把下一条指令的
       地址放到$ra中。用于支撑子程序,例如调用程序把参数放到$a0~$a3,然后jal X跳到X过程,被调过程实现后
       把结果放到$v0,$v1,然后应用jr $ra返回。
另外,MIPS对CPU的控制通过协处理器0(CP0)来实现。

文章结束给大家分享下程序员的一些笑话语录: Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/12/3074188.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(JAVA)Random类

package com.book.lite;import java.util.Random;/*** author zhangyu* date 2021年08月19日 11:57 下午* Math.random()获取随机数,底层调用Random类* Random类* 1.构造方法* 2.nextInt(int n )*/public class RandomDemo {public static void main(String[] args)…

SIFT算法

介绍这个算法的网上的博客很多,这个百度一下就有很多篇,我写一下我的认识。 前面考虑的一个图像的特征点是角点,这边提出了,图像的特征点可以是一个斑点,就像 明显的就是部分向日葵的原型就是一个特征,而这…

(JAVA)超大整数运算

package com.book.lite;import java.math.BigInteger;/*** author zhangyu* date 2021年08月21日 4:27 下午* Biginterger类,超大数的四则运算*/ public class BigIntegerDemo {public static void main(String[] args) {methon_3();}public static BigInteger meth…

PHP中过滤数组中的元素

演示使用自定义函数删除数组中的偶数元素。 <?php function myfunc(&$arr){//自定义一个过滤函数$jcount($arr);for($i0;$i<$j;$i){if($arr[$i]%20)unset($arr[$i]);} }$arrarray(23,14,37,263,244,379,100,153,150);//定义一个数组 echo 数组进行过滤之前的信息&am…

(JAVA)超大小数运算

package com.book.lite;import java.math.BigDecimal;/*** author zhangyu* date 2021年08月21日 4:56* 双精度大数据运算* divide()除法运算。* public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) (被除数&#xff0c;保留位数&#xff0c;舍入方法…

(JAVA)格式化输出日期

1.使用子类SimpleDateFormet() 2.使用父类DateFormet package com.book.lite;import javafx.scene.input.DataFormat;import java.text.*; import java.util.Date;/*** author zhangyu* date 2021年08月21日 5:23 下午* Date 类&#xff1a;输出系统日期* 1.空参构造器* 2.传…

windows下使用MinGW+msys编译ffmpeg

本文参考了网络上的不少文章&#xff0c;但由于版本环境的问题参考文章并不能直接指导编译&#xff0c;本文吸收多方经验&#xff0c;并在自己多次编译实验的基础上写成&#xff0c;欢迎转载&#xff0c;请注名出处。 FFmpeg是在Linux平台下开发的&#xff0c;但它同样可以在…

(JAVA)Calender类

package com.book.lite;import sun.misc.ClassFileTransformer;import java.util.Calendar;/*** author zhangyu* date 2021年08月22日 4:22 下午* java.util.Calender类&#xff0c; 生活中的日历进行对象封装* 1.abstract Calender类* 2.使用子类GregorianCalendar类 数据类…

Schema evolution in Avro, Protocol Buffers and Thrift

http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html 当想要数据, 比如对象或其他类型的, 存到文件或是通过网络传输, 需要面对的问题是序列化问题 对于序列化, 当然各个语言都提供相应的包, 比如, Java serialization, Ruby’s ma…

(JAVA)获取对象

Student.java package cn.book.objectarr;/*** author zhangyu* date 2021年08月22日 6:57 下午*/ public class Student {private String name;private int age;public Student(){}public Student(String name,int age){this.age age;this.name name;}public String getName…

JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

转&#xff1a;http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码&#xff0c;也不会对这些 ASCII 标点符号进行编码&#xff1a; - _ . ! ~ * ( ) 。 //其他字符&#xff08;比如 &#xff1a;;/?:&$,# v…

(JAVA)CollectionDemo1

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月22日 10:19 下午* 使用集合添加add()* 使用集合移除&#xff0c;返回boolean值*/ public class CollectionDemo {public static void main(String[]…

林俊卿咽音练声法八个步骤(纯净版视频加图文)(转)

原文链接&#xff1a;http://zgwhyyj.blog.sohu.com/81794726.html 读原著一直是研究者提倡的正确获得原创资料及其精神方法的一种最佳方式!观察了“土豆”和“我乐”、“新浪”等网站中关于“林俊卿咽音练声法八个步骤”的视频&#xff0c;内容中穿插的“经历、荣誉、传人”等…

(JAVA)CollectionDemo2

package cn.cast.collection;import java.util.ArrayList; import java.util.Collection;/*** author zhangyu* date 2021年08月23日 11:02 下午* Collection接口中&#xff0c;带有All的方法* removeAll,containsAll,addAll,retainAll* 返回值&#xff1a;调用者集合发生改变返…

(JAVA)CollectionDemo3

package cn.cast.collection;import com.sun.tools.jdi.EventSetImpl;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;/*** author zhangyu* date 2021年08月24日 11:40 下午* 获取Collectuon 接口有一个方法* Iterator iterator()* 返回…

VS 2012 找回消失的“创建单元测试”

日前&#xff0c;看到91哥的分享&#xff0c;聽說&#xff0c;建立單元測試的選單回來了!!! 得知這消息真的又驚又喜&#xff0c;馬上就照著以下步驟實作一次。 http://serena-yeoh.blogspot.tw/2013/02/visual-studio-2012-create-unit-test.html 不過在動手實作的時候&#x…