美文网首页
MIPS特有的指令

MIPS特有的指令

作者: rustydaar | 来源:发表于2016-12-09 23:55 被阅读0次

    MIPS已经经历了五代指令集,演进过程通常是在增加其他架构中有的特性。 下面是MIPS的特有的一些指令,其中的几个还可以在原始指令集中找到。

    不对齐数据传输指令

    MIPS有特别的指令用于内存的不对齐的字访问。大多数的应用程序都不会用到这些指令,只有在16位小型机的应用程序,以及快速memcpy和strcpy时,才可能用到。
    当你想要不按字对齐的方式访问字的时候,大多数的RISC都会发生trap,通常的解决方法是使用字节访问指令分别访问4个字节,然后将得到的4个字节移位拼接起来。
    MIPS的加载和存储指令(LWL,LWR,SWL,SWR)组合可以只用两条指令来解决非对齐访问:LWL加载寄存器的左半边,LWR加载寄存器的右半边;SWL和SWR则是对应的存储指令。图31演示了这个过程。还有处理64位数据版本的指令。

    图31 MIPS不对齐访问指令。假设操作是处于大端模式。示例1中,第一次用LWL加载了3个字节,分别是101,102和103到R2寄存器中,留下了寄存器的最低有效字节。接下来的LWR只加载了104到R2的最低有效字节中,并且没有对R2中的其他3个字节造成影响。示例2中,首先加载了203到R4的最高有效字节,然后再用LWR加载了204,205和206到R4的其他3个字节中。

    其余指令

    下面是MIPS64体系结构的另外一些特有特点的指令:

    • 或非逻辑运算。
    • 寄存器移位的指令包含了不可用的5个固定字段。
    • 用SYSCALL这条trap指令来调用系统调用。
    • 读写控制寄存器用的是CTCi和CFCi
    • 跳转调用不是PC相对地址。跳转和调用指令中的26位地址编码先左移两位,然后直接替换掉PC的低28位。显然的,程序如果跨过256MB界限执行,则需要另外的处理。
    • TLB缺失在MIPS I中是由软件处理的,所以,指令集中也有操纵TLB寄存器的指令。TLB寄存器被看作是系统协处理的一部分。由于这些指令在MIPS I的各个版本的实现中都不同,所以与其说是指令集的一部分,不如说是实现的一部分。
    • 倒数和倒数平方根没有依照IEEE 754标准实现,用它们来实现除法和平方根的程序,应该是更追求速度而不是准确度的程序。
    • 条件跳转指令BGEZAL在Rs1大于等于0的时候,保存返回地址并跳转;BLTZAL则在小于等于0的时候做一样的事情。这两条指令的目的是做一个相对PC的调用。
    • 单精度浮点并行操作和整数并行操作的扩展都在MDMX中,MIPS64还支持用一条指令并行的操作64位寄存器中的两个32位浮点。

    MIPS架构中没有明确规定浮点和整数能不能并行执行,并且,MIPS的浮点实现可以通过检查是否会发生算术中断来支持并行执行。不过,通常异常检测会强制串行执行整数和浮点的操作。

    相关文章

      网友评论

          本文标题:MIPS特有的指令

          本文链接:https://www.haomeiwen.com/subject/gkpymttx.html