MIPS特有的指令

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的浮点实现可以通过检查是否会发生算术中断来支持并行执行。不过,通常异常检测会强制串行执行整数和浮点的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,722评论 1 19
  • 寄存器窗口(register windows) SPARC 最独特的特性是寄存器窗口,一种优化函数调用阶段的手段。...
    rustydaar阅读 2,246评论 0 1
  • 一、概要 1、数据的表示:数制及其转换、原码、反码、补码、移码、浮点数、溢出、算...
    _Jason___阅读 3,250评论 0 5
  • 早上刚看到笑来老师布置的这个作业的时候,第一反应就是意识到自己记录注意力的开销的方式方法还待完善,按照目前的记录方...
    鱼成雁阅读 344评论 0 0
  • 1 白驹过隙,有多少人是白发如新,倾盖如故,乱花渐欲迷人眼,红尘琉璃百渡人生里看不清千里共婵娟的期许,年年岁...
    空城锦阅读 373评论 0 1