MIPS指令可以分成以下各类

空操作 no-op; 

寄存器/寄存器传输:用得很广,包括条件传输在内;
  常数加载:作为数值和地址的整型立即数;
    算术/逻辑指令;
      整数乘法、除法和求余数;
           整数乘加;
              加载和存储;
            跳转、子程序调用和分支;
          断点和自陷;
        CP0功能:CPU控制指令
      浮点;
  用户态的受限访问:rdhwr和synci

注:64位版本开头以“d”表示,无符号数以“u”结尾,立即数通常以“i”结尾,字节操作以“b”结尾,双字操作以“d”结尾,字操作以“w”结尾

1、空操作:nop:相当于 sll zero,zero,o,
                    ssnop: equals sll zero,zero,1.
      这个指令不得与其它指令同时发送,这样就保证了其运行要花费至少一个时钟周期。这在简单的流水线的CPU上无关紧要,但在复杂些的实现上对于实现强制的延时很有用。

2、寄存器/寄存器传送:
      move: 通常用跟$zero寄存器的or来实现,或者用addu。
      movf, movt, movn, movz: 条件传送。

3、常数加载:
      dla、la: 用来加载程序中某些带标号的位置或者变量的地址的宏指令;
      dli、li: 装入立即数常数,这是一个宏指令;
      lui: 把立即数加载到寄存器高位。

4、算术/逻辑运算:
      add、addi、dadd、daddi、addu、addiu、daddu、daddiu、dsub、sub、subu:加法指令和减法指令;
      abs,dabs:绝对值;
      dneg、neg、negu:取相反数;
      and、andi、or、ori、xor、nor:逐位逻辑操作指令;
      drol、rol、ror:循环移位指令;
      sll、srl、sra:移位。

5、条件设置指令:
      slt、slti、sltiu、sltu、seq、sge、sle、sne:条件设置。

6、整数乘法、除法和求余数:
      div、mul、rem等等。

7、整数乘加(累加):
      mad等。

8、加载和存储:
      lb、ld、ldl、ldr、sdl、sdr、lh、lhu、ll、sc、pref、sb等操作。

9、浮点加载和存储:
      l.d、l.s、s.d、s.s等

常用MIPS指令集及格式:

MIPS 指令集


MIPS 指令集(共31条)


助记符


指令格式


示例


示例含义


操作及其解释


Bit #


31..26


25..21


20..16


15..11


10..6


5..0


R-type


op


rs


rt


rd


shamt


func


add


000000


rs


rt


rd


00000


100000


add $1,$2,$3


$1=$2+$3


rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1


addu


000000


rs


rt


rd


00000


100001


addu $1,$2,$3


$1=$2+$3


rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1,无符号数


sub


000000


rs


rt


rd


00000


100010


sub $1,$2,$3


$1=$2-$3


rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1


subu


000000


rs


rt


rd


00000


100011


subu $1,$2,$3


$1=$2-$3


rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1,无符号数


and


000000


rs


rt


rd


00000


100100


and $1,$2,$3


$1=$2 & $3


rd <- rs & rt   ;其中rs=$2,rt=$3, rd=$1


or


000000


rs


rt


rd


00000


100101


or $1,$2,$3


$1=$2 | $3


rd <- rs | rt   ;其中rs=$2,rt=$3, rd=$1


xor


000000


rs


rt


rd


00000


100110


xor $1,$2,$3


$1=$2 ^ $3


rd <- rs xor rt   ;其中rs=$2,rt=$3, rd=$1(异或)


nor


000000


rs


rt


rd


00000


100111


nor $1,$2,$3


$1=~($2 | $3)


rd <- not(rs | rt)   ;其中rs=$2,rt=$3, rd=$1(或非)


slt


000000


rs


rt


rd


00000


101010


slt $1,$2,$3


if($2<$3) 
  $1=1 else
   $1=0


if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1


sltu


000000


rs


rt


rd


00000


101011


sltu $1,$2,$3


if($2<$3) 
  $1=1 else
   $1=0


if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
  (无符号数)


sll


000000


00000


rt


rd


shamt


000000


sll $1,$2,10


$1=$2<<10


rd <- rt << shamt  ;shamt存放移位的位数,
  也就是指令中的立即数,其中rt=$2, rd=$1


srl


000000


00000


rt


rd


shamt


000010


srl $1,$2,10


$1=$2>>10


rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1


sra


000000


00000


rt


rd


shamt


000011


sra $1,$2,10


$1=$2>>10


rd <- rt >> shamt  ;(arithmetic) 注意符号位保留
 其中rt=$2, rd=$1


sllv


000000


rs


rt


rd


00000


000100


sllv $1,$2,$3


$1=$2<<$3


rd <- rt << rs  ;其中rs=$3,rt=$2, rd=$1


srlv


000000


rs


rt


rd


00000


000110


srlv $1,$2,$3


$1=$2>>$3


rd <- rt >> rs  ;(logical)其中rs=$3,rt=$2, rd=$1


srav


000000


rs


rt


rd


00000


000111


srav $1,$2,$3


$1=$2>>$3


rd <- rt >> rs  ;(arithmetic) 注意符号位保留
 其中rs=$3,rt=$2, rd=$1


jr


000000


rs


00000


00000


00000


001000


jr $31


goto $31


PC <- rs


I-type


op


rs


rt


immediate


addi


001000


rs


rt


immediate


addi $1,$2,100


$1=$2+100


rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2


addiu


001001


rs


rt


immediate


addiu $1,$2,100


$1=$2+100


rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2


andi


001100


rs


rt


immediate


andi $1,$2,10


$1=$2 & 10


rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2


ori


001101


rs


rt


immediate


andi $1,$2,10


$1=$2 | 10


rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2


xori


001110


rs


rt


immediate


andi $1,$2,10


$1=$2 ^ 10


rt <- rs xor (zero-extend)immediate ;其中rt=$1,rs=$2


lui


001111


00000


rt


immediate


lui $1,100


$1=100*65536


rt <- immediate*65536 ;将16位立即数放到目标寄存器高16
         位,目标寄存器的 低16位填0


lw


100011


rs


rt


immediate


lw $1,10($2)


$1=memory[$2
 +10]


rt <- memory[rs + (sign-extend)immediate] ;rt=$1,rs=$2


sw


101011


rs


rt


immediate


sw $1,10($2)


memory[$2+10]
 =$1


memory[rs + (sign-extend)immediate] <- rt ;rt=$1,rs=$2


beq


000100


rs


rt


immediate


beq $1,$2,10


if($1==$2) 
 goto PC+4+40


if (rs == rt) PC <- PC+4 + (sign-extend)immediate<<2


bne


000101


rs


rt


immediate


bne $1,$2,10


if($1!=$2)
 goto PC+4+40


if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2


slti


001010


rs


rt


immediate


slti $1,$2,10


if($2<10) 
  $1=1 else
   $1=0


if (rs <(sign-extend)immediate) rt=1 else rt=0 ;
   其中rs=$2,rt=$1


sltiu


001011


rs


rt


immediate


sltiu $1,$2,10


if($2<10) 
  $1=1 else
   $1=0


if (rs <(zero-extend)immediate) rt=1 else rt=0 ;
  其中rs=$2,rt=$1


J-type


op


address


j


000010


address


j 10000


goto 10000


PC <- (PC+4)[31..28],address,0,0   ;address=10000/4


jal


000011


address


jal 10000


$31<-PC+4;
 goto 10000


$31<-PC+4;PC <- (PC+4)[31..28],address,0,0
   ;address=10000/4

注 意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。

MIPS指令可以分成以下各类,布布扣,bubuko.com

时间: 2024-10-10 03:03:27

MIPS指令可以分成以下各类的相关文章

MIPS指令学习二

1.MIPS寻址方式 MIPS架构的寻址模式有寄存器寻址.立即数寻址.寄存器相对寻址和PC相对寻址4种,其中寄存器相对寻址.PC相对寻址介绍如下: 1.1.寄存器相对寻址 这种寻址模式主要被加载/存储指令使用,其对一个16位的立即数进行符号扩展,然后与指定通用寄存器的值相加,从而得到有效地址. 通用寄存器GRP   +   16位立即数做符号扩展      =       有效地址 1.2.PC相对寻址 这种寻址模式主要被转移指令使用.在转移指令中有一个16位的立即数,将其左移2位并进行符号扩展

自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇,我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.andi.or.ori.xor.xori.nor.lui,其中ori指令已经实现了,本章要实现其余7条指令. MIPS32指令集架构中定义的移位操作指令有6条:sll.sllv.sra.srav.srl.srlv. MIPS32指令集架构中定义的空指令有2条:nop.ssnop.其中ssnop是一种特殊类型的空操作

3.6 MIPS指令简介

计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86指令所提供的动辄上千页的指令说明,MIPS指令只用这两页纸就可以说清楚了. MIPS指令的基本格式就分为这三种:R型,I型和J型. R型指的是寄存器型: I型指的是立即数型: J型指的是转移型. 我们用这张表对MIPS的指令进行不同纬度的分类,横轴是按照指令的格式分为R型.I型和J型,纵轴则是根据指

计算机组成原理--MIPS指令的表示和逻辑操作

计算机组成原理--10.5 1.计算机中指令的表示 前言: 指令在计算机内部是用高低电平表示的,并且看上去和数的表示是一样的.实际上,指令的各个部分都可以看成数,将这些数拼在一起就构成了指令.(实际上指令和数据的存储确确实实是一样的--都是二进制数) 在接下来的学习中需要用的部分的寄存器,所以在这里先做简单引入. 寄存器$s0~$s7映射到寄存器16~23,寄存器$t0~$t7映射到寄存器8~15.(这里s和t都只是标号,在之后的学习中我们会知道,s代表保留寄存器,t代表临时寄存器) 指令格式:

[zt]系统中常用MIPS指令

指令 功能 应用实例 LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2) LH 从存储器中读取半个字的数据到寄存器中 LH R1, 0(R2) LW 从存储器中读取一个字的数据到寄存器中 LW R1, 0(R2) LD 从存储器中读取双字的数据到寄存器中 LD R1, 0(R2) L.S 从存储器中读取单精度浮点数到寄存器中 L.S R1, 0(R2) L.D 从存储器中读取双精度浮点数到寄存器中 L.D R1, 0(R2) LBU 功能与LB指令相同,但读出的是不带符号的数

处理器架构——从RISC与CISC到x86、ARM、MIPS

1.CISC(Complex Instruction SetComputer,复杂指令集计算机) 复杂指令集(CISC,Complex Instruction Set Computer)是一种微处理器指令集架构(ISA),每个指令可执行若干低阶操作,诸如从内存读取.储存.和计算操作,全部集于单一指令之中. CISC特点: 1.指令系统庞大,指令功能复杂,指令格式.寻址方式多: 2.绝大多数指令需多个机器周期完成: 3.各种指令都可访问存储器: 4.采用微程序控制: 5.有专用寄存器,少量: 6.

x86、ARM和MIPS

指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86(CISC).ARM和MIPS(RISC).   ARM-RISC是为了提高处理器运行速度而设计的芯片体系,它的关键技术在于流水线操作即在一个时钟周期里完成多条指令.相较复杂指令集CISC而言,以RISC为架构体系的ARM指令集的指令格式统一.种类少.寻址方式少,简单的指令意味着相应硬件线路可以尽量做到最佳化,从而提高执行速率.因为指令集的精简,所以许多工作必须组合简单的指令,而针对复杂组合的工作便需要由编译程

MIPS ABI n32

ABI是应用程序二进制接口的简称,用于标识处理器的工作模式及规范目标文件的编码格式. MIPS指令集架构自MIPS3起正式支持64位工作模式,故编码可以遵从o32(o意思是old).n32(n意思是new)与n64等ABI. o32与n64即纯粹的32位与64位模式,二者除指针与变量类型的长度差异外,n64还用寄存器来传递更多的参数,性能有所提高. 性能方面,64位环境并不一定优于32位环境.前者在带来更大地址空间的同时,也带来了成倍增长的系统开销.例如,指针与变量类型的长度变化几乎等同于去掉了

【十分钟教会你汇编】MIPS编程入门(妈妈说标题要高大上,才会有人看&gt;_&lt;!)

无意中找到一篇十分好用,而且篇幅也不是很大的入门教程,通篇阅后,再把“栗子”敲一遍,基本可以有一个比较理性的认识,从而方便更好地进一步深入学习. 废话不多说,上干货(英语好的直接跳过本人的渣翻译了哈——!纯本人手打原创,有错请指教,要转载请声明出处,谢~~): MIPS Architecture and Assembly Language Overview MIPS架构及其汇编初步 (开始之前稍微再提下,整体分为4个结构:) 1: 寄存器种类: 2: 算术及寻址指令 3: 程序结构 4: 系统调