A Quantitative Approach-appendix K(1)——RISC指令系统的基本比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuiliusheng/article/details/83512764

A Quantitative Approach-appendix K(1)——RISC指令系统的基本比较

  1. RISC体系结构可以分为两个组

    • 为了桌面和服务器服务的RISCs:Digital Alpha,MIPS,HP PA-RISC,IBM and Motorola PowerPC,Sun Microsystems SPARC
      在这里插入图片描述

    • 为嵌入式服务的RISCs:ARM,Thumb,Hitachi SuperH(日立),Mitsubishi M32R(三菱),MIPS16
      在这里插入图片描述

  2. 常零寄存器的作用:(PowerPC可以使用ALU操作,修改该寄存器。常量寄存器重要在适用于桌面和服务器的ISA中有,但是在嵌入式体系结构中没有保留这个寄存器)

    • 在偏移寻址中,以0为基址可以合成绝对地址寻址模式
    • 寄存器间接寻址,可以使用0作为偏移量来合成
  3. RISC的寻址模式和指令格式

    • 大部分的代码引用都是PC相关的引用,尽管jump register是用于程序返回,case语句和函数跳转

    • 对于32定长指令,PC相关的分支指令在使用偏移时,会先将其左移2位;对于16位定长指令,左移1位

    • 对于桌面RISC指令,每种指令系统都是四种主要的指令格式;但是在嵌入式中,会有六种指令格式。这个是因为为了更小的代码大小需要提供更多的指令格式

    • 不同的RISC指令系统,在将常量扩展为寄存器宽度时,所做的工作很相似,但是不一样

    • 寻址模式的支持。PA-RISC还具有偏移寻址模式的短地址版本,MIPS64有浮点load/store的索引寻址模式。SuperH和M32R有独立的寄存器间接和寄存器+偏移寻址模式,而不是使用0寄存器来实现寄存器间接寻址。在直到数据宽度的情况下,ARM和Thumb会将偏移量左移1或者2位
      在这里插入图片描述
      在这里插入图片描述

    • 立即数扩展:MIPS的跳转和调用指令中的常量没有扩展,因为使用时是直接替换PC的低位,而保持高位不变。PA-RISC没有逻辑立即数指令。16位长度的指令具有比桌面RISCs短得多的立即数,通常只有5到8位。 在这里插入图片描述
      在这里插入图片描述

  4. 指令对比,以MIPS的部分指令为基准,进行对比。几乎所有的MIPS指令在其它体系中都有。表中指令的对比以MIPS为基准,可能一条MIPS指令,会在其它ISA中由多条指令组合完成同样的功能,此时这些指令以分号分割;同时在其它ISA中可能会有多条指令能够完成MIPS的一条指令的功能,此时这些指令以逗号分割

    • 数据传输类指令
      在这里插入图片描述
      在这里插入图片描述

    • 算术逻辑运算指令:在算术/逻辑类中,除SPARC之外的所有机器都使用单独的指令助记符来指示立即操作数;SPARC提供了这些指令的立即数版本,但只使用了一个助记符,但是是独立的操作码
      在这里插入图片描述
      在这里插入图片描述

    • 控制指令
      在这里插入图片描述
      在这里插入图片描述

    • 浮点指令,嵌入式系统中,通常不定义浮点指令
      在这里插入图片描述

    • 寄存器使用约定和伪指令
      在这里插入图片描述
      在这里插入图片描述

  5. RISC指令系统的比较和条件分支指令的差异

    • SPARC使用传统的四比特的条件码存储程序状态:negative,zero,carry,overflow。在算术/逻辑运算指令都可能进行设置。
      • 显式的比较操作,需要将R0作为目的操作数来完成
      • 浮点使用单独的条件码和一条浮点比较指令。
      • SPARC的第九个版本中,增加了四种方式来扩展分支指令:为64位操作提供独立的条件码集合;寄存器和零进行各种比较;三个新的用于浮点的条件码集合;编码了静态分支预测信息的分支指令
    • PowerPC也是用了四个条件码:大于,小于,等于,溢出。每个条件码有8个副本,以减少指令之间的使用竞争,8个副本即代表有8个四位的条件码寄存器
      • 整型指令可以通过一个选项位的设置,来使得指令执行之后,通过和R0比较,设置第一个条件码寄存器
      • PowerPC提供了条件码寄存器之间的逻辑操作,从而提供更复杂的分支条件
    • MIPS使用寄存器的内容来执行条件分支,例如BEQ,BNE等。同时提供了set-on-less-than指令,来比较两个操作数,然后设置目的寄存器
      • MIPS包含了特殊的比较分支指令,例如BGEZ,BLEZ等
      • 对于浮点操作,MIPS I使用条件码来完成分开的比较指令和分支指令。MIPS IV将条件码扩展为8个,分支指令和比较指令能够指定使用哪一个条件码
    • Alpha的比较指令(CMPEQ,CMPLE等)比较两个源操作数,然后根据结果设置目的寄存器。浮点比较指令(CMTEQ, CMTLT, CMTLE, CMTUN)也是类似的使用方式。分支指令则是将一个寄存器的值和0进行比较或者是最低有效位和0比较,然后决定是否跳转
    • PA-RISC最直接的分支指令是COMB(比较并跳转指令)
    • ARM类似于SPARC,提供了四种可以选择设置的条件码。同时使用不同的特殊指令,完成条件码的设置。ARM的一个特点在于,每条指令都可以根据状态码来选择是否执行
    • Thumb和ARM很像,但是状态码不再是可选的,没有TEQ指令(用于设置前三个条件码),没有条件执行的指令
    • Hitachi SuperH,只有一个单独的T状态位,通过比较指令设置,然后指导跳转
    • M32R只有一个单独的条件状态码C,使用比较指令进行设置,实现类似于set-on-less-than指令一样的功能。同时提供了两条分支指令使用C。除此之外,M32R提供了一些32位的和零比较指令,包括大于,小于,等于…
    • MIPS 16保留set-on-less-than指令,但是置位结果放入一个专门的T寄存器。同时MIPS 16增加了CMP,CMPI指令来完成相等比较,结果也放入T寄存器中,同时删除了BEQ和BNE指令。MIPS 16还提供了比较寄存器内容是否为0的分支指令,和测试T寄存器是否为零的分支指令
      在这里插入图片描述
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shuiliusheng/article/details/83512764
今日推荐