MIPS指令基础

  • 基本知识
  • MIPS指令集
    • 指令格式
      • I型指令
      • R型指令
      • J型指令
    • 寄存器与编码
    • 指令详情
      • 算数指令
      • 数据传输指令
      • 逻辑指令
      • 分支指令
      • 跳转指令
  • MIPS指令翻译示例
    • 斐波那契数列
    • 字符串复制

基本知识

定义:计算机语言中的基本单词称为指令,一台计算机的全部指令称为该计算机的指令集。
指令集:MIPS(RISC)、ARMv7/ARMv8(RISC)、Intel x86(CISC)。
字(Word):MIPS体系架构中,寄存器大小为32位,称32位为一个字。
补码:计算机中有符号整数的最高位作为符号位,负数使用补码表示,x + (~x) = -1,所以负数的表示形 式为-x = (~x)+1。
逻辑右移与符号右移:位右移时使用0填充高位与使用符号位填充高位的区别。

MIPS指令集

指令格式

32位MIPS指令集的长度均为32位,保持所有指令长度相同,但不同类型指令有不同的格式,为R型MIPS字段命名如下:

op rs rt rd shamt funct
6位 5位 5位 5位 5位 6位
指令操作码 源寄存器1 源寄存器2 目的寄存器 位移量(移位指令) 功能码

I型指令

op rs rt constant or address
6位 5位 5位 16位
指令操作码 源寄存器 目的寄存器 立即数或地址

R型指令

op rs rt rd shamt funct
6位 5位 5位 5位 5位 6位
指令操作码 源寄存器 寄存器2 目的寄存器 位移量(移位指令) 功能码

J型指令

指令:j 10000

op address
6位 26位
2 10000

指令:bne $s0,$s1,Exit

op rs rt address
6位 5位 5位 16位
5 16 17 Exit

寄存器与编码

Register Regsiter Code Value(op字段) Description
zero 0 存储0值,用于辅助计算
v0—>v1 2~3 过程调用:返回值寄存器
a0—>a3 4~7 过程调用:参数寄存器(Argument Register),传递参数值
t0—> t7 8~15 8个临时寄存器(Temporary Register),过程调用时无需保存旧值
s0—> s7 16~23 8个保留寄存器(Saved Register),过程调用时需要被压栈保存并恢复
t8—> t9 24~25 2个临时寄存器(Temporary Register),过程调用时无需保存旧值
gp 28 全局指针(Global Pointer):指向静态数据区的保留寄存器
sp 29 栈指针(Stack Pointer)
fp 30 过程调用:帧指针(Frame Pointer),指向过程帧的第一个字,在过程有局部变量时为变量提供统一的偏移基址
ra 31 过程调用:返回地址寄存器(Return Address Register)
at、k0、k1 32,26,27 at由汇编器保留使用,以进行伪指令的翻译,k0~k1由操作系统保留

指令详情

算数指令

指令 示例 说明
加法 add $s1,$s2,$s3 $s1 = $s2 + $s3
减法 sub $s1,$s2,$s3 $s1 = $s2 - $s3
立即数加法 add $s1,$s2,20 $s1 = $s2 + 20 立即数可为负数

数据传输指令

指令 示例 说明
取字 lw $s1,20($s2) $s1 = memory[$s2 + 20], load word
存字 sw $s1,20($s2) memory[$s2+20] = $s1, store word
取半字 lh $s1,20($s2) $s1 = memory[$s2 + 20], load half
取无符号半字 lhu $s1,20($s2) $s1 = memory[$s2 + 20], load half unsigned
存半字 sh $s1,20($s2) memory[$s2+20] = $s1, store half
取字节 lb $s1,20($s2) $s1 = memory[$s2 + 20], load byte
取无符号半字 lbu $s1,20($s2) $s1 = memory[$s2 + 20], load byte unsigned
存半字 sb $s1,20($s2) memory[$s2+20] = $s1, store byte
取链接字 ll $s1,20($s2) $s1 = memory[$s2+20], load link word,取字作为原子交换的前半部分
存条件字 sc $s1,20($s2) memory[$s2+20] = $s1, $s1 = 0或1,store condition word,如果对应的连接字被更改了,则将寄存器值设置为0
取立即数的高位 lui $s1,20 $s1 = 20∗21620*2^{16}20∗216, load upper immediate

逻辑指令

指令 示例 说明
and $s1,$s2,$s3 $s1 = $s2 & $s3
or $s1,$s2,$s3 $s1 = $s2 | $s3
或非 nor $s1,$s2,$s3 $s1 = ~($s2 | $s3)
立即数与 andi $s1,$s2,20 $s1 = $s2 & 20
立即数或 ori $s1,$s2,20 $s1 = $s2 | 20
逻辑左移 sll $s1,$s2,10 $s1 = $s2 << 10
逻辑右移 srl $s1,$s2,10 $s1 = $s2 >> 10

分支指令

指令 示例 说明
相等时分支 beq $s1,$s2,25 if($s1 == $s2) goto PC + 4 + 25 * 4, branch equal
不等时分支 bne $s1,$s2,25 if($s1 != $s2) goto PC + 4 + 25 * 4, branch not equal
小于时置位 slt $s1,$s2,$s3 if($s2 < $s3) $s1 = 1 else $s1 = 0, set less than
无符号小于时置位 sltu $s1,$s2,$s3 if($s2 < $s3) $s1 = 1 else $s1 = 0, set less than unsigned

跳转指令

指令 示例 说明
跳转 j 2500 goto 2500 * 4, jump
寄存器跳转 jr $ra goto $ra, jump register
跳转并链接 jal 2500 $ra = PC + 4, goto 4 * 2500, jump and link

MIPS指令翻译示例

斐波那契数列

int fact(int n)
{if(n < 1) return 1;else return (n * fact(n - 1));
}

下面为上述程序的 MIPS汇编代码

fact: addi  $sp, $sp, -8          //sp指针预留8字节sw    $ra, 4($sp)           //保存返回地址sw    $a0, 0($sp)           //保存参数nslti  $t0, $a0, 1           //if n < 1 $t0 = 1 else $t0 = 0beq   $t0, $zero, L1        //if n >= 1 goto L1addi  $v0, $zero, 1         //return 1addi  $sp, $sp, 8           //弹栈jr    $ra                   //寄存器跳转
L1:  addi  $a0, $a0, -1          //参数更新为n-1jal   fact                  //链接跳转lw    $a0, 0($sp)           //取当前的参数值nlw    $ra, 4($sp)           //将返回地址加载到$raaddi  $sp, $sp, 8           //弹栈mul   $v0, $v0, $a0         //return n * fact(n - 1)jr    $ra                   //寄存器跳转

字符串复制

void strcpy(char x[], char y[])
{int i;i = 0;while((x[i] = y[i]) != '\0')i += 1;
}
 addi $sp, $sp, -4sw   $s1, 0($sp)          //保存s1内容add  $t1, $zero, $%zero    //$t1 = 0
L1: add  $t2, $t1, $a2         //$t2 = y + iadd  $t3, $t1, $a1         //$t3 = x + ilbu  $s1, 0($t2)           //$s1 = y[i]sb   $s1, 0($t3)           //x[i] = $s1addi $t1, $t1, 1           //$t1 = $t1 + 1bne  $s1, $zero, L1        //if $s1 == 0 goto L1lw   $s1, 0($sp)           //恢复s1内容addi $sp, $sp, 4         jr   $ra

计算机原理与设计-32位MIPS 指令相关推荐

  1. 32位mips指令说明

                                 空指令(1条) nop指令                              逻辑运算指令(8条) and.or.xor.nor指令 ...

  2. 计算机组成与原理如何书写DEC微指令,计算机组成原理课程设计16位机微程序控制器指令系统设计与实现.doc...

    计算机组成原理课程设计16位机微程序控制器指令系统设计与实现 一.设计题目 16位机微程序控制器指令系统的设计与实现 二.设计目的 通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令 ...

  3. 32位MIPS流水线CPU设计

    32位MIPS流水线CPU设计 一. 实验信息 二. 实验内容 (一) 设计原理及实验方案 1.总体设计思路: 2.基础指令部分原理图: 3.扩展指令后controls赋值的真值表:(与单周期几乎相同 ...

  4. 计算机原理课程设计 第二版pdf,计算机原理课程设计.pdf

    第 1 页 共 10 页 计算机原理课程设计 计算机原理课程设计 成员信息成员信息 小组编号 8 成员信息 姓名 学号 实验分工 分值比例 组长 XXX 20040602XXXX 编写测试程序 总体测 ...

  5. 计算机原理与设计verilog pdf,计算机原理与设计: Verilog HDL版

    摘要: 李亚民教授长期从事计算机原理和体系结构的教学与研究,他的新书<计算机原理与设计--VerilogHDL版>讲述计算机原理,计算机设计以及如何用VerilogHDL实现设计.主要内容 ...

  6. 现在使用计算机字长是多少位,现在使用的计算机字长都是32位

    语音内容: 大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 现在使用的计算机字长不一定是32位,还有64位的.若一台计算机的字长为32位,则表明该计算机在CPU中能够作为一个整体 ...

  7. mips的旁路_64位MIPS指令处理器的流水线设计

    1 引言 随着集成电路设计和工艺技术的发展,嵌入式系统(SOC)已经在PDA.机顶盒.手机等信息终端中被广泛应用.他不仅减小了电路尺寸,而且具有成本低廉,可靠性高,功耗低等优点.可以说嵌入式系统是未来 ...

  8. 32位mips运算器logisim_很多网友问32位低功耗MCU设计

    传统的低功耗 MCU 设计都是以8位MCU为主,因为8 位内核阈门相对较少,运行或泄露电流低,售价也相对低廉.但是,许多新兴的应用都需要比8位内核更大的处理效率.近年智慧生活的抬头.物联网的建立,手持 ...

  9. 【2020/12/4修订】【梳理】计算机组成与设计 第2章 指令(docx)

    配套教材: Computer Organization and Design: The Hardware / Software Interface (5th Edition) 这是专业必修课<计 ...

最新文章

  1. UVA 141 The Spot Game
  2. 通信大数据应用未来还有很大的想象空间
  3. 关于C++中vector和set使用sort方法进行排序
  4. Python3实现32位整数翻转
  5. CVPR 2019 论文大盘点—人体姿态篇
  6. dz后台html,discuz X1.5 论坛后台站长常用操作小结
  7. 9.2 配置rsync+inotify实时同步
  8. 【AI教程】AI科研绘图
  9. Linux系统之安装mariadb方法
  10. Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional Archit
  11. 贝壳找房上海研发全员被优化,公司回应来了!
  12. 【Codeforces301E】Yaroslav and Arrangements
  13. VMR-21论文总结
  14. Java程序启动QQ(九)
  15. windows 2008 r2或win7安装SP1补丁,安装sqlserver 2012
  16. 简洁明了的插值音频重采样算法例子 (附完整C代码)
  17. uview——switch开关 列表修改状态
  18. 浙大版《C语言程序设计》第四版(何钦铭颜晖) 第8章 指针 课后习题答案
  19. 使 ASP.NET Web 站点易于访问
  20. 三种方法在当前目录下打开cmd命令窗口

热门文章

  1. 隐私安全计算-不经意传输的原理与应用
  2. 杭州江南专修学校计算机应用,2021年杭州江南专修学院高级护理招生计划及专业介绍-升学乐中职网...
  3. win7右下角的小喇叭消失
  4. win10 快捷键大全
  5. WUtooL是什么软件,WUtooL怎么用?
  6. 2022-2027年(新版)中国基因检测行业发展状况及投资前景预测报告
  7. R语言对基因进行GO注释(附代码)
  8. PLSQL Developer安装、OCI库、tnsnames.ora配置
  9. 易经中的64个大智慧
  10. Dr. Dre卖耳机,荣登嘻哈歌手收入榜首