MIPS指令集-mars-cpu

这篇具有很好参考价值的文章主要介绍了MIPS指令集-mars-cpu。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MIPS通用寄存器

MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下:

下表描述32个通用寄存器的别名和用途

REGISTER

NAME

USAGE

$0

$zero

常量0(constant value 0)

$1

$at

保留给汇编器(Reserved for assembler)

$2-$3

$v0-$v1

函数调用返回值(values for results and expression evaluation)

$4-$7

$a0-$a3

函数调用参数(arguments)

$8-$15

$t0-$t7

暂时的(或随便用的)

$16-$23

$s0-$s7

保存的(或如果用,需要SAVE/RESTORE的)(saved)

$24-$25

$t8-$t9

暂时的(或随便用的)

$28

$gp

全局指针(Global Pointer)

$29

$sp

堆栈指针(Stack Pointer)

$30

$fp

帧指针(Frame Pointer)

$31

$ra

返回地址(return address)

mips寄存器,Logisim,linux,开发语言,arm开发

 文章来源地址https://www.toymoban.com/news/detail-719580.html

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指令相同,但读出的是不带符号的数据

LBU R1, 0(R2)

LHU

功能与LH指令相同,但读出的是不带符号的数据

LHU R1, 0(R2)

LWU

功能与LW指令相同,但读出的是不带符号的数据

LWU R1, 0(R2)

SB

把一个字节的数据从寄存器存储到存储器中

SB R1, 0(R2)

SH

把半个字节的数据从寄存器存储到存储器中

SH R1,0(R2)

SW

把一个字的数据从寄存器存储到存储器中

SW R1, 0(R2)

SD

把两个字节的数据从寄存器存储到存储器中

SD R1, 0(R2)

S.S

把单精度浮点数从寄存器存储到存储器中

S.S R1, 0(R2)

S.D

把双精度数据从存储器存储到存储器中

S.D R1, 0(R2)

DADD

把两个定点寄存器的内容相加,也就是定点加

DADD R1,R2,R3

DADDI

把一个寄存器的内容加上一个立即数

DADDI R1,R2,#3

DADDU

不带符号的加

DADDU R1,R2,R3

DADDIU

把一个寄存器的内容加上一个无符号的立即数

DADDIU R1,R2,#3

ADD.S

把一个单精度浮点数加上一个双精度浮点数,结果是单精度浮点数

ADD.S F0,F1,F2

ADD.D

把一个双精度浮点数加上一个单精度浮点数,结果是双精度浮点数

ADD.D F0,F1,F2

ADD.PS

两个单精度浮点数相加,结果是单精度浮点数

ADD.PS F0,F1,F2

DSUB

两个寄存器的内容相减,也就是定点数的减

DSUB R1,R2,R3

DSUBU

不带符号的减

DSUBU R1,R2,R3

SUB.S

一个双精度浮点数减去一个单精度浮点数,结果为单精度

SUB.S F1,F2,F3

SUB.D

一个双精度浮点数减去一个单精度浮点数,结果为双精度浮点数

SUB.D F1,F2,F3

SUB.PS

两个单精度浮点数相减

SUB.SP F1,F2,F3

DDIV

两个定点寄存器的内容相除,也就是定点除

DDIV R1,R2,R3

DDIVU

不带符号的除法运算

DDIVU R1,R2,R3

DIV.S

一个双精度浮点数除以一个单精度浮点数,结果为单精度浮点数

DIV.S F1,F2,F3

DIV.D

一个双精度浮点数除以一个单精度浮点数,结果为双精度浮点数

DIV.D F1,F2,F3

DIV.PS

两个单精度浮点数相除,结果为单精度

DIV.PS F1,F2,F3

DMUL

两个定点寄存器的内容相乘,也就是定点乘

DMUL R1,R2,R3

DMULU

不带符号的乘法运算

DMULU R1,R2,R3

MUL.S

一个双精度浮点数乘以一个单精度浮点数,结果为单精度浮点数

DMUL.S F1,F2,F3

MUL.D

一个双精度浮点数乘以一个单精度浮点数,结果为双精度浮点数

DMUL.D F1,F2,F3

MUL.PS

两个单精度浮点数相乘,结果为单精度浮点数

DMUL.PS F1,F2,F3

AND

与运算,两个寄存器中的内容相与

ANDR1,R2,R3

ANDI

一个寄存器中的内容与一个立即数相与

ANDIR1,R2,#3

OR

或运算,两个寄存器中的内容相或

ORR1,R2,R3

ORI

一个寄存器中的内容与一个立即数相或

ORIR1,R2,#3

XOR

异或运算,两个寄存器中的内容相异或

XORR1,R2,R3

XORI

一个寄存器中的内容与一个立即数异或

XORIR1,R2,#3

BEQZ

条件转移指令,当寄存器中内容为0时转移发生

BEQZ R1,0

BENZ

条件转移指令,当寄存器中内容不为0时转移发生

BNEZ R1,0

BEQ

条件转移指令,当两个寄存器内容相等时转移发生

BEQ R1,R2

BNE

条件转移指令,当两个寄存器中内容不等时转移发生

BNE R1,R2

J

直接跳转指令,跳转的地址在指令中

J name

JR

使用寄存器的跳转指令,跳转地址在寄存器中

JR R1

JAL

直接跳转指令,并带有链接功能,指令的跳转地址在指令中,跳转发生时要把返回地址存放到R31这个寄存器中

JAL R1 name

JALR

使用寄存器的跳转指令,并且带有链接功能,指令的跳转地址在寄存器中,跳转发生时指令的放回地址放在R31这个寄存器中

JALR R1

MOV.S

把一个单精度浮点数从一个浮点寄存器复制到另一个浮点寄存器

MOV.S F0,F1

MOV.D

把一个双精度浮点数从一个浮点寄存器复制到另一个浮点寄存器

MOV.D F0,F1

MFC0

把一个数据从通用寄存器复制到特殊寄存器

MFC0 R1,R2

MTC0

把一个数据从特殊寄存器复制到通用寄存器

MTC0 R1,R2

MFC1

把一个数据从定点寄存器复制到浮点寄存器

MFC1 R1,F1

MTC1

把一个数据从浮点寄存器复制到定点寄存器

MTC1 R1,F1

LUI

把一个16位的立即数填入到寄存器的高16位,低16位补零

LUI R1,#42

DSLL

双字逻辑左移

DSLL R1,R2,#2

DSRL

双字逻辑右移

DSRL R1,R2,#2

DSRA

双字算术右移

DSRA R1,R2,#2

DSLLV

可变的双字逻辑左移

DSLLV R1,R2,#2

DSRLV

可变的双字罗伊右移

DSRLV R1,R2,#2

DSRAV

可变的双字算术右移

DSRAV R1,R2,#2

SLT

如果R2的值小于R3,那么设置R1的值为1,否则设置R1的值为0

SLT R1,R2,R3

SLTI

如果寄存器R2的值小于立即数,那么设置R1的值为1,否则设置寄存器R1的值为0

SLTI R1,R2,#23

SLTU

功能与SLT一致,但是带符号的

SLTU R1,R2,R3

SLTUI

功能与SLT一致,但不带符号

SLTUI R1,R2,R3

MOVN

如果第三个寄存器的内容为负,那么复制一个寄存器的内容到另外一个寄存器

MOVN R1,R2,R3

MOVZ

如果第三个寄存器的内容为0,那么复制一个寄存器的内容到另外一个寄存器

MOVZ R1,R2,R3

TRAP

根据地址向量转入管态

ERET

从异常中返回到用户态

MADD.S

一个双精度浮点数与单精度浮点数相乘加,结果为单精度

MADD.D

一个双精度浮点数与单精度浮点数相乘加,结果为双精度

MADD.PS

两个单精度浮点数相乘加,结果为单精度

MFC0  把一个数据从通用寄存器复制到特殊寄存器

mips寄存器,Logisim,linux,开发语言,arm开发

 

mips寄存器,Logisim,linux,开发语言,arm开发

 mips寄存器,Logisim,linux,开发语言,arm开发

mips寄存器,Logisim,linux,开发语言,arm开发

mips寄存器,Logisim,linux,开发语言,arm开发 

mips寄存器,Logisim,linux,开发语言,arm开发 

mips寄存器,Logisim,linux,开发语言,arm开发 

mips寄存器,Logisim,linux,开发语言,arm开发 

mips寄存器,Logisim,linux,开发语言,arm开发 

 

mips寄存器,Logisim,linux,开发语言,arm开发

mips寄存器,Logisim,linux,开发语言,arm开发 

 

mips寄存器,Logisim,linux,开发语言,arm开发

mips寄存器,Logisim,linux,开发语言,arm开发 

mips寄存器,Logisim,linux,开发语言,arm开发 

 mips寄存器,Logisim,linux,开发语言,arm开发

 

2. 算数运算指令
  算数运算指令的所有操作数都是寄存器,不能直接使用RAM地址或间接寻址。
  操作数的大小都为 Word (4-Byte)
  指令格式与实例 注释
  move $t5, $t1       // $t5 = $t1;
  add $t0, $t1,       // $t2 $t0 = $t1 + $t2; 带符号数相加
  sub $t0, $t1,       // $t2 $t0 = $t1 - $t2; 带符号数相减
  addi $t0, $t1, 5    // $t0 = $t1 + 5;
  addu $t0, $t1, $t2  // $t0 = $t1 + $t2; 无符号数相加
  subu $t0, $t1, $t2  // $t0 = $t1 - $t2; 无符号数相减
  mult $t3, $t4       // $t3 * $t4, 把64-Bits 的积,存储到Lo,Hi中。即: (Hi, Lo) = $t3 * $t4;
  div $t5, $t6        // Lo = $t5 / $t6 (Lo为商的整数部分); Hi = $t5 mod $t6 (Hi为余数)
  mfhi $t0            // $t0 = Hi
  mflo $t1            // $t1 = Lo

 

到了这里,关于MIPS指令集-mars-cpu的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一、1.汇编指令、寄存器和寻址方式

    立即数:可以立即在一条机器指令后找到具体数值的数,如内存中00位写着加指令,01位写着1100_1111,意思就是将1100_1111(十进制207)加到某处,反之可以表示数据的地址。 低端字节序:16位寄存器数据存入内存(内存单位为8位),寄存器低位存入内存低位(如00)高位存入内

    2024年02月14日
    浏览(41)
  • ARM汇编寄存器和常用指令详解

    对于32位及其以下的ARM处理器来说,函数调用规则如下: 父函数与子函数的入口参数以此通过 R0~R3 这4个寄存器传递。 父函数在调用子函数前先将子函数入口参数存入 R0~R3 寄存器中,若只有一个入口参数则使用 R0 寄存器传递,若有2个入口参数则使用 R0 和 R1 寄存器传递,以

    2024年02月03日
    浏览(43)
  • FANUC机器人的位置寄存器及运算指令详解

    FANUC机器人的位置寄存器及运算指令详解 在FANUC机器人的嵌入式编程中,位置寄存器和运算指令起着至关重要的作用。位置寄存器用于存储机器人的位置和姿态信息,而运算指令则允许对这些位置寄存器进行数学和逻辑运算,从而实现复杂的机器人运动控制和路径规划。本文

    2024年02月02日
    浏览(44)
  • 【ARMv8 SIMD和浮点指令编程】NEON 存储指令——如何将数据从寄存器存储到内存?

    和加载指令一样,NEON 有一系列的存储指令。比如 ST1、ST2、ST3、ST4。 1 ST1 (multiple structures) 从一个、两个、三个或四个寄存器存储多个单元素结构。该指令将元素从一个、两个、三个或四个 SIMDFP 寄存器存储到内存,无需交错。每个寄存器的每个元素都被存储。 无偏移 一个寄

    2024年02月07日
    浏览(40)
  • 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?

    除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。 1 LDNP (SIMDFP) 加载 SIMDFP 寄存器对,带有非临时提示。该指令从内存加载一对 SIMDFP 寄存器, 向内存系统发出访问是非临时的提示 。用于加载的地址是根据基址寄存器值和可选的立即偏移量计算得出的。 32-bit (

    2024年02月07日
    浏览(34)
  • MIPS指令集-mars-cpu

    MIPS通用寄存器 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved for assembler) $2-$3 $v0-$v1 函数调用返回值(values for results and expression evaluation)

    2024年02月08日
    浏览(41)
  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(41)
  • stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(35)
  • FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包