免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1273 | 回复: 0
打印 上一主题 下一主题

MIPS体系结构剖析,编程与实践[1] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-02 01:44 |只看该作者 |倒序浏览

                                第一章 MIPS CPU 体系结构概述
陈怀临
1。序言
本文介绍MIPS体系结构,着重于其寄存器约定,MMU及存储管理,异常和中断处理等等。
通过本文,希望能提供一个基本的轮廓概念给对MIPS CPU及之上OS有兴趣的读者。
并能开始阅读更详细的归约(SPECIFICATION)资料。
MIPS是最早的,最成功的RISC(Reduced Instruction Set Computer)处理 器之一,起源于Stanford Univ的电机系. 其创始人 John L. Hennessy在1984年在硅谷创立
了MIPS INC. 公司(www.mips.com)。John L. Hennessy目前是Stanford Univ. 的校长。在此之前,他是 Stanford电子工程学院的Dean。CS专业的学生都知道两本著名的书:
“Computer Organization and Design : The
Hardware/Software Interface” 和
”Computer Architecture : A Quantitative Approach“。其Co-author就是Hennessy.
MIPS的名字为“Microcomputer without interlocked pipeline
stages"的缩写。另外一个通常的非正式的说法是”Millions of instructions
per second".
MIPS 芯片在工业界目前用的比较多的是:MIPS INC。的R10000;QED(http://www.qedinc.com。1996年从MIPS INC。分(SPIN OFF)出来的)的R5000,
R7000等。
指令集
详细的资料请参阅MIPS归约。
一般而言,MIPS指令系统有:MIPS I;MIPS II;MIPS III 和MIPS
IV。可想而知,指令系统是向后兼容的。例如,基于MIPS II的代码可以在MIP
III和MIPS IV的处理器上跑一跑:-)
下面是当我们用gcc时,如何指定指令和CPU的选项。
-mcpu=cpu type
Assume the defaults for the machine type cpu type when scheduling instructions.
The choices for cpu type are `r2000', `r3000', `r4000', `r4400', `r4600',
and `r6000'. While picking a specific cpu type will schedule things
appropriately for that particular chip, the compiler will not generate any code
that does
not meet level 1 of the MIPS ISA (instruction set architecture) without the
`-mips2' or `-mips3' switches being used.
-mips1
Issue instructions from level 1 of the MIPS ISA. This is the default. `r3000'
is the default cpu type at this ISA level.
-mips2
Issue instructions from level 2 of the MIPS ISA (branch likely, square root
instructions). `r6000' is the default cpu type at this ISA level.
-mips3
Issue instructions from level 3 of the MIPS ISA (64 bit instructions). `r4000'
is the default cpu type at this ISA level. This option does not change the
sizes of any of the C data types.
读者可能发现,对于大多数而言,我们应该是用MIPS III或-mips3。要提醒的是R5000和R10000也都是R4000的延伸产品。
下面是几点补充:
*MIPS指令是32位长,即使在64位的CPU上。这对于局部跳转指令的理解很有帮助。
比如:J (TARGET);JAL (TARGET)。J和JAL的OPERCODE是6位,剩下的26为存放跳转偏移量。由于任何一个指令都是32位(或4字节)对齐(ALIGN)的,所以J 和JAL最大的伸缩空间是2^28=256M。如果你的程序要作超过256M的跳转,你就必须用JALR或JR,通过一个GPR寄存器来存放你的跳转地址。由于一个寄存器是32或64位的,你就没有任何限制了。
*MIPS CPU的SR(STATUS REGISTER)中有几位是很重要的设置,当我们选择指令系统或要用64位的MIPS的CPU CORE在32模式下(绝大多数情况,弟兄们 别告诉我你在写64位的程序:--) )。
SR[XX]:
1:MIPS IV INSTRUCTION SET USABLE
0:MIPS IV INSTRUCTION SET UNUSABLE
SR[KX]
SR[SX]
SR[UX]:
0:CPU工作在32位模式下
1:CPU工作在64位模式下
一般而言,如果你要从头写一个MIPS核心为32位程序,最好把上述值设为0。为什么最好呢?因为我在工作中没有去冒风险,设她们为1,who knows what would happen?:-) And then why bother:--)?
*在以后我们会单独的一章讲将流水线和指令系统,特别是跳转指令的关系。在这里,我们只简单提一下。对任何一个跳传指令后面,FOR
SIMPLITY,要加上一个空转指令(NOP)。从而使得CPU的PIPELINE不会错误的执行一个预取(PRE_FETCH)得指令。当然这个NOP可以替换为别的。以后再讲。放一个NOP是最简单和安全的。有兴趣的读者可以用mips64-elf-objdump -d 来反汇编一个
OBJECT文件。你就会一目了然了。
*一定要记住:MIPS I,II, III和IV指令系统不包含PRIVILEDGED
INSTRUCTIONS。
换句话说,都是那些在USER MODE下可以用的指令(当然KERNEL下也能用)。对于CPO的操作不属于指令系统。
*有一点在MIPS CPU下,要千万注意:ALIGN。MIPS对ALIGN的要求是严厉的。这一点与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;关于这一点 ,我是吃过苦头的。当然我知道大家还会犯错在这里:--),即使知道了。有些事情学是没用的:--)。一定要注意。
*我建议读者阅读SPECIFICATION时要花时间看一看指令系统的定义。其实不难。每一种指令不外乎几个域(FIELDS)。
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40363/showart_434186.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP