精简指令集(MIPS为例)常用指令特点及其格式

一、指令集

指令集是指一台计算机的全部指令;不同的计算机有不同的指令集,但是在许多方面都有共同之处。早期的计算机有非常简单的指令集:实现简单,许多现代计算机也有简单的指令集。因此,指令集具有精简指令集(RISC)与复杂指令集(CISC)之分,本文主要介绍精简指令集,并以其中的MIPS为例展开。

二、设计原则

设计原则1: 简单源于规整
规整使得实现更简单
简单使得以较低成本实现更高性能成为可能
设计原则2: 越小越快
设计原则3: 加速执行常用操作

小常数出现频率高
立即数操作避免load指令
设计原则4:优秀的设计需要适宜的折中方案
不同的指令格式使译码变得复杂, 但是允许所有指令统一32-bit 字长
使格式尽可能相似

三、常用指令

常用指令汇总

 add rd,rs,rtrd=rs+rt;sub rd,rs,rtrd=rs-rt;addi rt,rs,constantrt=rs+constant;lw rt,rs,constantrt=Address(rs+constant/4);//Address(rs+constant/4)表示:rs对应的数组,索引为constant/4的取值lw rt,rs,constantAddress(rs+constant/4)=rt;sll rt,rs,constantrt=rs<<4;srl rt,rs,constantrt=rs>>4;and rd,rs,rtrd=rs&rt;//按位与,还有andior rd,rs,rtrd=rs|rt;//按位或,还有orinor rd,rs,rt//rt取$zerord=rs~rt;//按位取反beq rs,rt,L1if (rs == rt) 分支跳转到指令L1;bne rs, rt, L1if (rs != rt) 分支跳转到指令L1;j L1无条件跳转到指令 L1slt rd,rs,rtif (rs<rt) rd=1; else rd=0;slti rt,rs,constantif (rs<constant) rt=1; else rt=0;带符号数比较:slt, slti无符号数比较:sltu, sltiu例如:$s0 = 1111 1111 1111 1111 1111 1111 1111 1111$s1 = 0000 0000 0000 0000 0000 0000 0000 0001slt $t0,$s0,$s1  # signed–1 < +1 ===> $t0 = 1sltu $t0,$s0,$s1  # unsigned+4,294,967,295 > +1 ===> $t0 = 0jal 过程标签l跳转到目标地址jr $ra复制 $ra的内容到程序计数器PClb rt, offset(rs)     lh rt, offset(rs)在 rt中用符号位扩展到32 bitslbu rt, offset(rs)    lhu rt, offset(rs)在 rt中用0扩展到32 bitssb rt, offset(rs)     sh rt, offset(rs)只存储最右边的字节/半字lui rt, constant复制16-bit 常数值 到rt的高16位,将rt 的低16位清为 0链接取数:ll rt, offset(rs)条件存数:sc rt, offset(rs)

寄存器用法

$a0 – $a3:参数寄存器 (reg’s 4 – 7)
$v0, $v1:结果值寄存器(reg’s 2 and 3)
$t0 – $t9:临时寄存器,用于存储临时值,可以由被调用者重写
$s0 – $s7:保留寄存器,用于存储变量,必须由被调用者保存/恢复
$gp:静态数据的全局指针(reg 28)
$sp:栈指针(reg 29)
$fp:帧指针(reg 30)
$ra:返回地址(reg 31)

过程调用步骤

1.将参数放在寄存器中
2.将控制转移给过程
3.获得过程所需的存储资源
4.执行过程的操作
5.将结果放在调用者可以访问到的寄存器
6.返回调用点

四、32位指令格式

R-格式指令

op:操作码(opcode)
rs:第一源操寄存器号
rt:第二源操寄存器号
rd:目的寄存器号
shamt:移位的位数(其它指令为00000)
funct:功能码(扩展操作码)

I-格式指令

立即数运算和load/store指令
rt:源寄存器号(store指令)或目的寄存器号(立即数运算和load指令)
立即数:–215 — +215 – 1
地址:rs中的基地址加上偏移量

J-格式指令

跳转 (j和jal) 目标地址可以是代码段的任意位置

精简指令集(MIPS为例)常用指令特点及其格式相关推荐

  1. MIPS介绍与MIPS汇编的常用指令

    描述 CTF做题时会遇见MIPS汇编的题目,而我们接触的是8086汇编,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; 1. List 1 在不同的设备中,汇编语言对应着不同的机器语言指令集 ...

  2. 不懂精简指令集还敢说自己是程序员?

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 作者丨码农的荒岛求生 来源丨码农的荒岛求生 内存与编译器 时间来到了1980s年代,此时容量" ...

  3. MIPS指令集的常用指令分类和相关解释

    MIPS指令集的常用指令分类和相关解释 MIPS 一些基本概念 MIPS指令集的六种指令格式 R型指令: I型计算类指令 I型取数类指令: I型条件判断类指令: J型指令: MIPS指令集的常用指令 ...

  4. 精简指令集的特点_精简指令集有哪些指令

    [推荐阅读] 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 精简指令集计算机RISC的特点是指令及其 ...

  5. linux mips汇编指令集,MIPS汇编与指令

    一.MIPS寄存器 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16. ...

  6. linux登录指令 pgsql_一句一例解读20条Linux常用指令,学会了你就入门了

    玩过Linux的朋友都知道,Linux是基于命令行的操作系统,学习Linux必须学习Linux的指令,但是Linux的指令群非常庞大,很多"小白"无从下手,作者根据多年授课经验,总 ...

  7. 嵌入式系统——复杂指令集系统与精简指令集系统(CISCRISC)

    1. 指令集系统   在计算机系统结构发展过程中,指令集系统有两个截然不同的发展方向.一个是增强指令的功能,设置一些功能复杂的指令,把一些原来由软件实现的.常用的功能改用硬件的指令系统来实现,这种计算 ...

  8. ARM内核,RISI(精简指令集),32位系统

    1.ARM ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器.全称为Advanced RISC Machine.ARM处理器本身是32位设计,但也配备16位指令集,一般来讲 ...

  9. ARM处理器 CISC(复杂指令集)与RISC(精简指令集)

    博文背景: 最近想学习一些树莓派的知识,便看了一本书<树莓派开始,玩转Linux>,在阅读此书的时候,顺便把其中不懂的知识重新梳理一些,算是作为自己的读书笔记了. 有感兴趣的同学,可以一起 ...

  10. 未来是属于 ARM 为代表的精简指令集还是 x86 为代表的复杂指令集?

    转载地址:https://www.zhihu.com/question/20783321 分析一: 这里简单来谈一下,ARM和X86之间为什么不太具有可比性的问题.要搞清楚这个问题首先要明白什么是架构 ...

最新文章

  1. python密码测试代码_python使用正则表达式检测密码强度源码分享
  2. linux系统主要常见目录结构
  3. 自适应中值滤波及实现
  4. mysql查询1971年以前_mysql查询昨天 一周前 一月前 一年前的数据
  5. 关情纸尾-----Quartz2D-绘制富文本,绘制图片.
  6. 启动后显示不了数据_90后都买不起房?统计数据显示:90后成了城市租房主力!...
  7. Java技术面试汇总
  8. Error:Cannot find bean: org.apache.struts.taglib.html.BEAN in any scope
  9. 在Vue项目中添加vue router
  10. win7便笺重启计算机后还有吗,Win7电脑关机后,记在便签小工具上的内容还在吗?...
  11. win10开启快速启动,关机时电源键一直亮着无法正常关机。。。
  12. C++游戏天堂——经典型(2)
  13. Proximal Policy Optimization (PPO)详解
  14. 养老保险缴费率上调 谁来买单?
  15. 好用的android app,6款好用的Android手机App
  16. PDF文档如何用关键字精确查找?
  17. iphone手机safari浏览器访问网站滚动条不显示问题解决办法
  18. 猿创征文|我的四个月Java学习成长之路——从基础到框架再到项目
  19. 计算机系毕业论文写什么,计算机系的毕业论文 怎么写?
  20. 迅速用Github展开团队协作

热门文章

  1. SQLGrammarException :could not execute query a.user not exists解决
  2. java父类可以强转为子类吗_java父类可以强制转化成子类吗?
  3. 详解 Flink 指标、监控与告警
  4. Netflix:如何打造开放协作的实时 ETL 平台?
  5. 开源大数据生态下的 Flink 应用实践
  6. 一个电商项目【拉手团购】购物App(已开源)
  7. 3 缓存文件写入失败_分布式缓存数据库一致性问题
  8. 计算机教师继续教育心得,教师继续教育培训个人心得体会
  9. constraintlayout布局新特性_进阶ConstraintLayout-2.0新特性
  10. linux中ifi_info的英文全称,【DNS服务器IP地址-域名注册查询-CDN加速技术】