深入浅出MIPS 一 MIPS概述

原文网址:http://www.kernelchina.org/node/257

英国科学家Dominic Sweetman(经典著作See MIPS Run的作者),称MIPS为“高效的RISC体系结构中最优雅的一种体系结构”。它是一个双关语:即是Microcomputer without Interlocked Pipeline Stages的缩写,同时又是Millions of Instructions Per Second的缩写。

  MIPS的处理单元是一个五级流水线:Instruction Fetch, Register & Decoder, ALU, Memory以及Write back。一开始的MIPS是为32位系统设计的,实际上,后续的64位扩展,也依然对32位的工作模式向下兼容着。一如其他的RISC处理器,MIPS的每条指令长度是固定的32bit。(因此,最长的局部跳转指令只能跳转2的26次方Byte,也就是2的24次方,16777216条指令)
  MIPS有32个通用寄存器,编程者可以使用其中除$0外的所有寄存器暂存数据。$0寄存器,在硬件上被设计为永远读出0。我们可以用$0寄存器的此特性,实现一些技巧性的编程,譬如实现NOP操作。MIPS本没有NOP指令,但由于对$0寄存器的写入实际上无意义,可以作为空操作使用。
  事实上,编译器从高级语言(典型如C/C++)转换为MIPS汇编指令时,一般总是遵守一定的寄存器使用约定。某些寄存器用来从函数中传入和传出参数,存储临时数据,另一些则起特殊作用,如保存调用函数时的指令地址,或作为堆栈指针等。如果你使用汇编开发,理论上可以无视这点约定,但是,一般地,遵守这个约定,与人方便,也为己方便。关于寄存器使用的约定,以后会展开论述。
  一如所有的RISC处理器,MIPS没有CISC那样复杂多变的寻址方式,统一为Load/Store寻址。任何载入和存储操作,都可写为如下形式:
  lw $1, offset ($2)
  这条指令的操作符可以为Load或Store,一次Load/Store操作的范围可以为字/半字/字节(对应gcc的int, short和char)。偏移量是一个带符号的16bit整数。两个作为操作数的寄存器可以是任何通用寄存器。(你可以向$0写入,但无任何意义,等同于空操作)。对于64位模式下,也可以对double类型进行操作。注意Load/Store都必须对应一个对齐的地址,否则会引发一个异常(Exception)。
  MIPS支持最多4个协处理器。协处理器CP0为CPU的控制协处理器,是体系结构中必须实现的。CP1为浮点处理器。CP2保留,各生产厂商往往用来实现一些自己的特色功能,例如RMI的Fast Message Ring等。CP3原本也是保留共扩展用,但很多MIPS III和MIPS IV时代的扩展指令集使用了它。对于CP0,我们会有专门的一段用来讨论。
  为适应处理器向多核时代的演进,MIPS引入了多核操作必要的原子指令(Atomic operation)、内存屏障(Barrier)等操作。在SMP或AMP等多核架构中,这些指令是并行计算同步的保障。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值