MIPS指令集相关

MIPS指令系统有:MIPS IMIPS IIMIPS III MIPS IV。当然,指令系统是向后兼容的。例如,基于MIPS II的代码可以在MIP IIIMIPS IV的处理器上,可以完美运行。

关于MIPS指令集,有几点需要特别专注:

*MIPS指令是32位长,即使在64位的CPU上。这对于局部跳转指令的理解很有帮助。

比如:J (TARGET)JAL (TARGET)JJALOPERCODE6位,剩下的26为存放跳转偏移量。由于任何一个指令都是32(4字节)对齐(ALIGN)的,所以J JAL最大的伸缩空间是2^28=256M。如果你的程序要作超过256M的跳转,你就必须用JALRJR,通过一个GPR寄存器来存放你的跳转地址。由于一个寄存器是3264位的,你就没有任何限制了。



*MIPS CPUSR(STATUS REGISTER)中有几位是很重要的设置,当我们选择指令系统或要用64位的MIPSCPU CORE32模式下(绝大多数情况,弟兄们 别告诉我你在写64位的程序:--) )

SR[XX]
1MIPS IV INSTRUCTION SET USABLE
0MIPS IV INSTRUCTION SET UNUSABLE

SR[KX]
SR[SX]
SR[UX]
0CPU工作在32位模式下
1CPU工作在64位模式下

一般而言,如果你要从头写一个MIPS核心为32位程序,最好把上述值设为0。为什么最好呢?因为我在工作中没有去冒风险,设她们为1who knows what would happen?:-) And then why bother:--)?

*在以后我们会单独的一章讲将流水线和指令系统,特别是跳转指令的关系。在这里,我们只简单提一下。对任何一个跳传指令后面,FOR SIMPLITY,要加上一个空转指令(NOP)。从而使得CPUPIPELINE不会错误的执行一个预取(PRE_FETCH)得指令。当然这个NOP可以替换为别的。以后再讲。放一个NOP是最简单和安全的。有兴趣的读者可以用mips64-elf-objdump -d 来反汇编一个
OBJECT文件。你就会一目了然了。

*一定要记住:MIPS IIIIIIIV指令系统不包含PRIVILEGED INSTRUCTIONS

换句话说,都是那些在USER MODE下可以用的指令(当然KERNEL下也能用)。对于CPO的操作不属于指令系统。


*有一点在MIPS CPU下,要千万注意:ALIGNMIPSALIGN的要求是严厉的。这一点与POWERPC是天壤之别。指令必须是32位对齐。数据类型必须在它们的大小边界对齐。简单的比如:When CPU running under 32bit mode, int must 32bit aligned; long 32bit aligned; pointer must be 32bit aligned; char must 8 bit aligned. long long must 64 bit aligned

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值