前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MIPS指令集与简要分析R格式指令I格式指令J格式指令指令分析

MIPS指令集与简要分析R格式指令I格式指令J格式指令指令分析

作者头像
月见樽
发布2018-04-27 14:09:39
8.6K0
发布2018-04-27 14:09:39
举报

R格式指令

基本格式

标记

op

rs

rt

rd

shamt

funct

位数

31-26

25-21

20-16

15-11

10-6

5-0

功能

操作符

源操作数寄存器1

源操作数寄存器2

目的操作数寄存器

位移量

操作符附加段

指令

算数类指令

指令

op

rs

rt

rd

shamt

funct

功能

add

000000

rs

rt

rd

00000

100000

rd=rs+rt

addu

000000

rs

rt

rd

00000

100001

rd=rs+rt(无符号数)

sub

000000

rs

rt

rd

00000

100010

rd=rs-rt

subu

000000

rs

rt

rd

00000

100011

rd=rs+rt(无符号数)

slt

000000

rs

rt

rd

00000

101010

rd=(rs<rt)?1:0

sltu

000000

rs

rt

rd

00000

101011

rd=(rs<rt)?1:0(无符号数)

逻辑类指令

指令

op

rs

rt

rd

shamt

funct

功能

and

000000

rs

rt

rd

00000

100101

rd=rs&rt

or

000000

rs

rt

rd

00000

100101

rd=rs|rt

xor

000000

rs

rt

rd

00000

100110

rd=rs xor rd

nor

000000

rs

rt

rd

00000

100111

rd=!(rs|rt)

位移类指令

指令

op

rs

rt

rd

shamt

funct

功能

sll

000000

00000

rt

rd

shamt

000000

rd=rt<<shamt

srl

000000

00000

rt

rd

shamt

000010

rd=rt>>shamt

sra

000000

00000

rt

rd

shamt

000011

rd=rt>>shamt(符号位保留)

sllv

000000

rs

rt

rd

00000

000100

rd=rt<<rs

srlv

000000

rs

rt

rd

00000

000110

rd=rt>>rs

srav

000000

rs

rt

rd

00000

000111

rd=rt>>rs(符号位保留)

跳转指令

指令

op

rs

rt

rd

shamt

funct

功能

jr

000000

rs

00000

00000

00000

001000

PC=rs

I格式指令

基本格式

标记

op

rs

rd

im

位数

31-26

25-21

20-16

15-0

功能

操作符

源操作数寄存器

目的操作数寄存器

立即数

指令

算数指令

指令

op

rs

rd

im

功能

addi

001000

rs

rd

im

rd=rs+im

addiu

001001

rs

rd

im

rd=rs+im(无符号数)

slti

001010

rs

rd

im

rd=(rs<im)?1:0

sltiu

001011

rs

rd

im

rd=(rs<im)?1:0(无符号数)

逻辑类指令

指令

op

rs

rd

im

功能

andi

001100

rs

rd

im

rd=rs&im

ori

001101

rs

rd

im

rd=rs|im

xori

001110

rs

rd

im

rd=rs xor im

载入类指令

指令

op

rs

rd

im

功能

lui

001111

00000

rd

im

rt=im*65536

lw

100011

rs

rd

im

rt=memory[rs+im]

sw

101011

rs

rd

im

memory[rs+im]=rt

跳转类指令

指令

op

rs

rd

im

功能

beq

000100

rs

rd

im

PC=(rs==rt)?PC+4+im<<2:PC

bne

000101

rs

rd

im

PC=(rs!=rt)?PC+4+im<<2:PC

J格式指令

基本格式

标记

op

address

位数

31-26

25-0

功能

操作符

地址

指令

指令

op

address

功能

j

000010

addr

PC={(PC+4)[31,28],addr,00}

jal

000011

addr

$31=PC;PC={(PC+4)[31,28],addr,00}

指令分析

指令格式

MIPS_order.png

不同格式的指令具有不同的功能,其中:

  • R格式指令为纯寄存器指令,所有的操作数(除移位外)均保存在寄存器中。Op字段均为0,使用funct字段区分指令
  • I格式指令为带立即数的指令,最多使用两个寄存器,同时包括了load/store指令。使用Op字段区分指令
  • J格式指令为长跳转指令,仅有一个立即数操作数。使用Op字段区分指令

数据通路

以上的指令包括以下几种与指令有关的数据通路:

  • 指令——寄存器组:R格式指令均为寄存器指令,需要指令提供寄存器地址
  • 指令——运算单元(ALU):运算指令由指令提供运算类型,同时提供参与运算的立即数和位移量
  • 指令——存储器:load/store指令的寻址方式仅为寄存器偏移量寻址,需要指令提供立即数偏移量
  • 指令——PC:J格式指令需要将指令中的立即数载入PC中

同时还有几种必备的与指令无关的数据通路:

  • 寄存器组——运算单元(ALU):寄存器组为运算单元提供操作数,运算结果存在寄存器组中
  • 寄存器组——存储器:load/store指令的两端
  • 寄存器组——PC:跳转指令与寄存器组有关

当使用哈弗结构时,数据通路框图如下所示:

MIPS_dataflow.png

流水线划分

若使用流水线实现,可以将流水线划分为:取指->译码->准备操作数->执行->回写四个阶段:

  • 取指阶段:按PC从指令寄存器中取出完整的32位指令,之后PC自增
  • 译码阶段:按指令的高6位(Op字段)将指令解释为相应的格式
  • 准备操作数阶段:按指令中的对应字段准备操作数,包括:计算地址(load/store指令),取出寄存器中的操作数置于数据总线(寄存器指令),计算PC值(跳转指令)等
  • 执行阶段:执行指令,包括:访问存储器(load/store指令),ALU运算(计算类指令),刷新PC值(跳转指令)等
  • 回写阶段:将结果存入寄存器中,包括:ALU的运算结果(计算类指令),访存结果(load指令),原PC值(带返回跳转指令)等
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R格式指令
    • 基本格式
      • 指令
        • 算数类指令
        • 逻辑类指令
        • 位移类指令
        • 跳转指令
    • I格式指令
      • 基本格式
        • 指令
          • 算数指令
          • 逻辑类指令
          • 载入类指令
          • 跳转类指令
      • J格式指令
        • 基本格式
          • 指令
          • 指令分析
            • 指令格式
              • 数据通路
                • 流水线划分
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档