赞
踩
CPU的功能由其指令集决定,不同的CPU体系结构对应不同的指令集。根据指令集的复杂度划分,现存两种主流的指令集设计:复杂指令集计算机(Complex instruction set computer,CISC,简称复杂指令集)与精简指令集计算机(Reduced instruction set computer,RISC,简称精简指令集)。
CISC的特点顾名思义,其单条指令可执行多个底层操作,且指令种类繁多。对于常用的指令,CISC设计者尽可能都将它们包含在内,而不常用的指令则通过组合指令进行实现。虽然这种指令集在操作时相对直接,但是其执行效率较低,因此使用CISC的CPU显得复杂庞大。由于其每条指令的字长不同,计算机在执行时需要对不同的指令进行不同的判读,从而影响CISC的性能。常见的使用CISC的CPU有x86。
RISC则是复杂指令集的反面,其基本的理念就是减少指令的类型,降低每条指令的复杂度。本文主要介绍使用RISC结构的MIPS(Microprocessor without Interlocked Piped Stages)。
MIPS的全称为Microprocessor without interlocked piped stages,即“无内部流水线互锁的微处理器”(现代微处理器的设计中需要一种称为流水线的技巧来提高微处理器的性能,而流水线之间的互锁则是导致微处理器性能降低的一个重要因素)。MIPS由美国斯坦福大学教授John Hennessy于20世纪80年代初领导的团队设计。
MIPS的主要特点有以下几个:
1)具有固定的指令长度(32-bit)。这与x86不同长度的指令形成对比,简化了从存储器取指令的过程;
2)寻址方式简单,简化了从存储器取操作数的过程,但是需要较为复杂的汇编程序控制;
3)指令数量少,每条指令功能简单(每条指令只完成一个底层操作),简化了指令的执行过程,并提高了指令的执行效率;
4)只有Load和Store指令可以访问寄存器,这与x86可通过算术指令访问存储器的方式截然相反。由于访存过程较为复杂,MIPS这种设计理念使运算指令的实现变得简单。
5)由于MIPS的上述特点,编写控制MIPS的程序变得复杂,因此需要性能优秀的编译器的支持。
设a,b,c分别为三个操作数,则
1)算术运算指令:
i)add a, b, c 执行将b+c结果存入a中的操作;
ii)sub a, b, c 执行将b-c结果存入a中的操作;
iii)mul a, b, c 执行将b*c结果存入a中的操作;
iv)div a, b, c 执行将b/c结果存入a中的操作。
2)逻辑运算指令:
i)and a, b, c 执行将b & c结果存入a中的操作;
ii)or a, b, c 执行将b | c结果存入a中的操作。
3)移位运算指令:
i)sll a, b, c执行将 b << c 结果存入a的操作;
ii)srl a, b, c执行将 b >> c 结果存入a的操作。
注:上述指令中的操作数都不可以是存储器操作数。这也是MIPS一大特点:运算时不能进行访存操作。
例:A是一个100个字的数组,其首地址存放在寄存器$19中。变量h对应寄存器$18,临时数据存放在寄存器$8中。求下列操作对应的MIPS指令:A[10] = h + A[3]。
注:MIPS的指令长度为32位。
- lw $8, 12($19) # t0 = A[3], 将$8中的数通过从$19寄存器移12位存入代表A[3]的寄存器
- add $8, $18, $8 # t0 = h + A[3]
- sw $8, 40($19) # A[10] = t0, 将$8中的结果通过从$19寄存器移40位存入代表A[10]的寄存器
在编写MIPS汇编程序时,可以用寄存器的名称或编号来表示这些寄存器。如:
- lw $t0, 12($s3) # lw $8, 12($19)
- add $t0, $s2, $t0 # add $8, $18, $8
- sw $t0, 40($s3) # sw $8, 40($19)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。