32位mips指令说明 您所在的位置:网站首页 mps什么指令 32位mips指令说明

32位mips指令说明

2023-08-23 18:33| 来源: 网络整理| 查看: 265

                             空指令(1条) nop指令

                             逻辑运算指令(8条) and、or、xor、nor指令

当功能码是6b100100时,表示是and指令,逻辑“与”运算。

指令用法为:and  rd,rs,rt。

指令作用为:rd ← rs AND rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑“与”运算,运算结果保存到地址为rd的通用寄存器中。

当功能码是6b100101时,表示是or指令,逻辑“或”运算。

指令用法为:or  rd,rs,rt。

指令作用为:rd ← rs OR rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑“或”运算,运算结果保存到地址为rd的通用寄存器中。

当功能码是6b100110时,表示是xor指令,异或运算。

指令用法为:xor rd,rs,rt。

指令作用为:rd ← rs XOR rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行逻辑“异或”运算,运算结果保存到地址为rd的通用寄存器中。

当功能码是6b100111时,表示是nor指令,或非运算。

指令用法为:nor rd,rs,rt。

指令作用为:rd ← rs NOR rt,将地址为rs的通用寄存器的值,与地址为rt的通用寄存器的值进行逻辑“或非”运算,运算结果保存到地址为rd的通用寄存器中。

andi、xori、ori指令

当指令码是6b001100,表示是andi指令,逻辑“与”运算。

指令用法为:andi rt,rs,immediate。

指令作用为:rt ← rs AND zero extended(immediate),将地址为rs的通用寄存器的值与指令中立即数进行零扩展后的值进行逻辑“与”运算,运算结果保存到地址为rt的通用寄存器中。

当指令码是6b001110,表示是xori指令,异或运算。

指令用法为:xori rt,rs,immediate。

指令作用为:rt ← rs XOR zero_extended(immediate),将地址为rs的通用寄存器的值与指令中立即数进行零扩展后的值进行逻辑“异或”运算,运算结果保存到地址为rt的通用寄存器中。

当指令码是6b001101,表示是ori指令,或运算。

指令用法为:ori rs,rt,immediate,作用是将指令中的16位立即数进行无符

号扩展至32位,然后与索引为rs的通用寄存器的值进行逻辑“或”运算,运算结果保存到索引为rt的通用寄存器中。

lui指令

指令用法为:lui rt,immediate。

指令作用为:rt ← immediate ll 016,将指令中的16bit立即数保存到地址为rt的通用寄存器的高16位。另外,地址为rt的通用寄存器的低16位使用0填充。

 

                             移位指令(6条) sll、sllv,sra、srav、srl、srlv 指令

当功能码是6b000000,表示是sll指令,逻辑左移。

指令用法为:sll rd,rt,sa。

指令作用为:rd ← rt > sa(logic),将地址为rt的通用寄存器的值向右移sa位,空出来的位置使用0填充,结果保存到地址为rd的通用寄存器中。

当功能码是6b000011,表示是sra指令,算术右移。

指令用法为:sra rd,rt,sa。

指令作用为:rd ← rt >> sa(arithmetic),将地址为rt的通用寄存器的值向右移sa位,空出来的位置使用r[31]的值填充,结果保存到地址为rd的通用寄存器中。

当功能码是6b000100,表示是sllv指令,逻辑左移。

指令用法为:sllv rd,rt,rs。

指令作用为:rd ← rt > rs[4:0](logic),将地址为rt的通用寄存器的值向右移位,空出来的位置使用0填充,结果保存到地址为rd的通用寄存器中。移位位数由地址为rs的寄存器值的第0-4bit确定。

当功能码是6b000111,表示是srav指令,算术右移。

指令用法为:srav rd,rt,rs。

指令作用为:rd ← rt >> rs[4:0](arithmetic),将地址为rt的通用寄存器的值向右移位,空出来的位置使用rt[31]填充,结果保存到地址为rd的通用寄存器中。移位位数由地址为rs的寄存器值的第0-4bit确定。

总结来说,这6条移位操作指令可以分为两种情况:sllv、srav、srlv这3条指令的助记符最后有“v”,表示移位位数是通过寄存器的值确定的,sl、sra、srl这3条指令的助记符最后没有“v”,表示移位位数就是指令中第6-10bit的sa值。

                          移动操作指令(6条) movn、movz、mfhi、mthi、mflo、mtlo指令

当功能码为6b001011时,表示是movn指令。

指令用法为:movn rd,rs,rt。

指令作用为:if rt ≠ 0 then rd ← rs,判断地址为rt的通用寄存器的值。如果不为零,那么将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变。movn是Move Conditional on Not Zero的意思。

当功能码为6b001010时,表示是movz指令。

指令用法为:movz rd,rs,rt。

指令作用为:if rt = 0 then rd ← rs,与上面movn指令的作用正好相反,判断地址为rt的通用寄存器的值。如果为零,那么将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变。movz是Move Conditional on Zero的意思。

当功能码为6b010000时,表示是mfhi指令。

指令用法为:mfhi rd。

指令作用为:rd ← hi,将特殊寄存器HI的值赋给地址为rd的通用寄存器。

当功能码为6b010010时,表示是mflo指令。

指令用法为:mflo rd。

指令作用为:rd ← lo,将特殊寄存器LO的值赋给地址为rd的通用寄存器。

当功能码为6b010001时,表示是mthi指令。

指令用法为:mthi rs。

指令作用为;hi ← rs,将地址为rs的通用寄存器的值赋给特殊寄存器HI。

当功能码为6b010011时,表示是mtlo指令。

指令用法为:mtlo rs。

指令作用为:lo ← rs,将地址为rs的通用寄存器的值赋给特殊寄存器LO。

                         算术操作指令(21条) add、addu、sub、subu、slt,sltu 指令

当功能码是6b100000时,表示add指令,加法运算。

指令用法为:add rd,rs,rt。

指令作用为:rd ← rs+rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行加法运算,结果保存到地址为rd的通用寄存器中。但是有一种特殊情况:如果加法运算溢出,那么会产生溢出异常,同时不保存结果。

当功能码是6b100001时,表示addu指令,加法运算。

指令用法为:addu rd,rs,rt。

指令作用为:rd ← rs+rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行加法运算,结果保存到地址为rd的通用寄存器中。add指令的不同之处在于addu指令不进行溢出检查,总是将结果保存到目的寄存器。

当功能码是6b100010时,表示sub指令,减法运算。

指令用法为:sub rd,rs,rt。

指令作用为:rd ← rs-rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行减法运算,结果保存到地址为rd的通用寄存器中。但是有一种特殊情况:如果减法运算溢出,那么产生溢出异常,同时不保存结果。

当功能码是6b100011时,表示subu指令,减法运算。

指令用法为:subu rd,rs,rt。

指令作用为:rd ← rs-rt,将地址为rs的通用寄存器的值与地址为rt的通用寄存器的值进行减法运算,结果保存到地址为rd的通用寄存器中。与sub指令的不同之处在于:subu指令不进行溢出检查,总是将结果保存到目的寄存器。

当功能码是6b101010时,表示slt指令,比较运算。

指令用法为:slt rd,rs,rt。

指令作用为:rd ←(rs



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有