• MIPS 指令集(共31条)


    MIPS 指令集(共31条)

    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寄存器。

    原:https://blog.csdn.net/qq_41848006/article/details/82256626

  • 相关阅读:
    Android中ExpandableListView控件基本使用
    GitHub具体教程
    Could not load file or assembly&#39;System.Data.SQLite.dll&#39; or one of its depedencies
    Codeforces Round #253 (Div. 1) B. Andrey and Problem
    c语言中的位移位操作
    深入浅出JMS(一)——JMS简单介绍
    Java回顾之集合
    Java回顾之网络通信
    Java回顾之I/O
    Java回顾之多线程同步
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11627205.html
Copyright © 2020-2023  润新知