汇编MIPS指令

MIPS有多种意思,具体如下:
1、MIPS:机器语言指令数
MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数,这是衡量CPU速度的一个指标。
像是一个Intel80386 电脑可以每秒处理3百万到5百万机器语言指令,即我们可以说80386是3到5MIPS的CPU。MIPS只是衡量CPU性能的指标。
2、MIPS:嵌入式系统
MIPS架构(英语:MIPS architecture,为Microprocessor without interlocked piped stages architecture的缩写,是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。
3、MIPS:处理器
MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked pipelined stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。 

mips汇编中常用的指令:
   (1)mips指令中字段的命名:
           op(6bit):指令的操作码
           rs(5bit):第一源操作数寄存器
           rt(5bit):第二源操作数寄存器
           rd(5bit):存放结果的目的寄存器
           shamt(5bit):偏移量
           funct(6bit):功能码
   (2)mips指令类型:
           R型: op  rs rt rd funct
           I型: op  rs rt immediate(12bit)
           J型: op  immediate(16bit)

 R型指令:
       add(求和)             add  $1,  $2, $3         ' 寄存器寻址方式 $1=$2 + $3 寄存器2,3的值加起来赋给寄存器1  ' 
       sub(求差)             sub  $1,  $2, $3         ' $1=$2 - $3 '
       and(与)               and  $1,  $2, $3         ' $1=$2 & $3 '
       or(或)                or   $1,  $2, $3         ' $1=$2 | $3 '
       nor(异或)             nor  $1,  $2, $3
       slt(三目运算)         slt   $1, $2, $3     ' if($2 < $3) $1 =1 else $1 = 0 ' 
       sltu(无符号三目运算)  sltu  $1, $2, $3     '三个寄存器内的数都是无符号的'
       sll(循环左移) sll     $1,  $2, 10           ' $1 = $2 << 10 '
       srl(循环右移) srl     $1,  $2, 10           ' $1 = $2 >> 10 '
       sra(保留符号位的循环左移) sra  $1,  $2,  10 ' $1 = $2 << 10(符号位保留)'
       sllv            sllv $1, $2, $3             ' $1 = $2 << $3'
       srlv            srlv $1, $2, $3             ' $1 = $2 >> $3'

       Ih         Ih  $1, 10($2)  基址寻址
       Sh         Sh  $1, 10($2)  基址寻址
       lb         Ib  $1, 10($2)  基址寻址
       ll         Il  $1, 10($2)  基址寻址
       sc         sc  $1, 10($2)  基址寻址

       div/divu  : div   des, src1, src2      'des = src1/src2(表示无符号的数)        '
       abs       : abs   des, src             'des = |src|src的绝对值给des            '
       mul       : mul   des, src1, src2      'des = src1*src2                        '
       seq/seq(u): seq   des, src1, src2      'if(src1 == src2)  des = 1 else des = 0 '
       sgt       : sgt   des, src1, src2      'if(src1>src2)     des = 1 else des = 0 '
       sle       : sle   des, src1, src2      'if(src1< = src2)  des = 1 else des = 0 '
       slt       : slt   des, src1, src2      'if(src1<src2)     des = 1 else des = 0 '
    
I型指令:
       addi(求和) : addi  $1, $2, 10     ' $1 = $2 + 10 '
       subi(求差) : subi  $1, $2, 10     ' $1 = $2 - 10 '
       andi(与)   : addi  $1, $2, 10     ' $1 = $2 & 10 '
       ori(或)    : ori   $1, $2, 10     ' $1  =$2 | 10 '
       lui        : lui   $1, 100        ' 将100加载到$1寄存器的高16bit'
       lw         : lw    $1, 10($2)     ' 加载$2寄存器开始偏移10字节的地址的内容到$1寄存器'
       sw         : sw    $1, 10($2)     ' 保存$1的内容到$2寄存器开始偏移10字节的地址上'
       beq        : beq   $1, $2, 10     ' if($1 == $2) goto 10(lable 10 的位置)'
       bne        : bne   $1, $2, 10     ' if($1 != $2) goto 10 '
       slti       : slti  $1, $2, 10     ' if( $2 <10) $1=1 else $1=0'
       sltiu      : sltiu $1, $2, 10     '10为无符号的数'
      

J型指令:
       j  : j   lable   '跳转到lable处 '
       jar: j   $1      '跳转到$1寄存器存储的地址处'
       jal: jal lable1  '跳转到lable1标签处'

合成指令:
        b                          跳转
    b和下面的其中一个或者下面一个以及z(zero)所构成的指令均为跳转指令:例如beq/beqz
        eq    相等
        ne    不等
        ge    大于等于
        gt    大于
        le    小于等于
        lt    小于
 
伪指令:
       .globl             __start    设置全局标签
        lable:              设置局部标签lable
       .ascii s            符合ascii码组成的字符串
       .asciiz s           like .ascii, null-terminated
       .word w1, w2        一个字长(32bit)的数据w1 w2
       .half h1, h2        半字节长(16bit)的数据
       .byte   b1,b2       一个字节的数据
       .float f1, f2       32-bit single precision floating point numbers f1, f2, . . .
       .double d1, d2      64-bit double precision floating point numbers d1, d2, . . .
       .space n            n zero bytes
       .set push           保存所有设置
       .set pop            重新保存设置
       .set reorde         允许编译器优化指令,对代码进行优化排序
       .set noreorde     不允许编译器优化指令,对代码进行优化排序
       .set at/noat        使用/不是用at寄存器
       .set mips 0         支持原来的ISA级别(小心使用)
       .set mips 3         面的指令是mips64指令,兼容mips32的指令
       .set volatile/novolatile    处在volatile区内的所有存取指令都不会被移动位置
       .align  7           .align区内的代码必须使用2的7次方字节大小的内存空间
【3】MIPS架构特点
        (1)独立的指令缓存和数据缓存
        (2)每个指令的执行都分为五个阶段及五条流水线
        (3)所有指令都一样长32bit这就是为什么mips指令的二进制文件要比同样x86的二进制文件大的原因
        (4)无条件码
        (5)三操作数指令(算数/逻辑操作不想要指明内存地址)   
        (6)没有字节或者半字节运算
        (7)没有专门的栈支持
        (8)最小子程序支持,跳转指令的限制(b上下64k内,J上下64M内)
【4】MIPS指令的五条流水线
          IF:取指,从指令缓存I-cache中取出指令
          RD:读寄存器,从指令中源寄存器或者cpu中的某一个寄存器中读取内容
          ALU:算数逻辑单元,在一个时钟周期内完成算法或逻辑操作
          MEM:指令从数据缓存中读写内存变量
          WB:写回,将操作完成的值写回到寄存器中


 

  • 7
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在行为VHDL中描述支持以下MIPS ISA子集(即11条指令)的MIPS控制单元(CU) a) 7 Arithmetic/Logical instructions: add, sub, and, or, nor, slt, addi b) 2 Memory reference: lw, sw c) 2 Control transfer: beq, j 所需的MIPS CU的功能,接口和结构如图1所示。CU具有以下接口: • Generics - Instruction width (n_bits_instr = instr_mem_width with default value of 32) - Location of the operation (OP) code least significant bit in the instruction (opcode_start with default value of 26) - Location of the operation (OP) code most significant bit in the instruction (opcode_end with default value of 31) - Location of the function (funct) code least significant bit in the instruction (funct_start with default value of 0) - Location of the function (funct) code most significant bit in the instruction (funct_end with default value of 5) - Total number of supported ALU operations/functions (n_functions_alu with default value of 16) • Inputs - Instruction fetched (Instr -> n_bits_instr bits) • Outputs - Register destination (RegDst -> 1 bit) - Register write enable (RegWrite -> 1 bit) - ALU source (ALUSrc -> 1 bit) - ALU control (ALUControl -> [log2 (n_functions_alu)] bits) - Memory write enable (MemWrite -> 1 bit) - Memory read enable (MemRead -> 1 bit) - Memory to register (MemToReg -> 1 bit) - Conditional branch on equal (BEQ -> 1 bit) - Unconditional branch (J -> 1 bit) • In Vivado - Create a blank project - Add design and simulation source files - Run behavioral simulation - Your waveform configuration should be identical to the provided waveform snapshot, see Figure 2.
MIPS(Microprocessor without Interlocked Pipeline Stages)是一种基于RISC(Reduced Instruction Set Computer)的指令集架构。MIPS指令集提供了丰富的指令,能够满足广泛的应用需求。 要下载MIPS汇编指令集,首先需要确定所需的具体版本。MIPS指令集有不同的版本和扩展,例如MIPS32、MIPS64、MIPS32 Release 6等。根据自己的需求选择相应的版本。 下载MIPS指令集可以通过多种途径实现。首先,可以通过访问MIPS技术公司的官方网站,在其开发者资源或者支持文档部分查找相关资料。官方网站通常提供最新的MIPS指令集文档和开发工具。 其次,可以在各大在线技术论坛、开发者社区或者开源软件平台搜索相关的MIPS指令集资料。这些平台上经常有热心的开发者分享自己编写的汇编代码、教程和文档,可以从中获取所需的指令集信息。 另外,还可以通过参考书籍、学术论文、教育机构的课程资料等来源获取MIPS指令集相关的信息。这些资料通常会提供详细的解释和示例,有助于更好地理解和应用MIPS指令集。 无论是从官方渠道还是其他途径下载MIPS指令集,我们需要保证所获取的资料来源可靠,以确保指令集的准确性和合法性。 总之,下载MIPS汇编指令集可以通过访问官方网站、在线论坛、开源平台,以及参考相关书籍、论文等多种方式实现。选择可靠的来源,并根据需要选择合适的版本和资料,有助于理解和应用MIPS指令集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值