指令系统
MIPS操作数
MIPS算术运算指令的操作数必须来自寄存器。
寄存器分类:
MIPS汇编指令
算术指令
数据传输指令
在存储器和寄存器之间移动数据的命令
ex1:
假设变量h存放在寄存器$s2中,数组A的基址放在$s3中,试将C语言:A[12] = h + A[8]翻译成MIPS指令:
lw $t0, 32($s3) #从内存中取A[8]的值给寄存器$t0
add $t0, $s2, $t0 #$t0 = h + A[8]
sw $t0, 48($s3) #将h + A[8]存到内存A[12]的位置
注意:
1)由于在MIPS体系中,数据是以**字**为形式存储的,因此在我们转换地址的过程中,要将其转换成**字节**的形式,因此我们需要4x8和4x12
2)指令lw和sw是用来在存储器和寄存器之间赋值字的指令,而第二个操作数前面的数指的是偏移量,是以字节为单位的
逻辑指令
- 移位:将一个字里面的所有为都向左或者向右移动,并在空出来的位上填充0
- 按位与:操作到位
条件分支指令
无条件跳转指令
MIPS寻址模式
立即数寻址
操作数是位于指令自身中的常数寄存器寻址
操作数是寄存器,基址寻址
操作数在内存中,其地址是指令中基址寄存器和常数的和。PC相对寻址
地址是PC和指令中常数的和。伪直接寻址
跳转地址由指令中26位字段和PC高位相连而成。
CISC和RISC
按指令格式的复杂度来分,可以分为CISC和RISC两种类型指令系统:
复杂指令集计算机(Complex Instruction Set Computer,CISC)
- 指令系统复杂
指令多,寻址方式多,变长指令多,指令格式多 - 指令周期长
需要多个时钟周期才能完成 - 指令周期差距大
各种指令都能访问存储器,使得简单指令和复杂指令所用的时钟周期数相差很大,不利于指令流水线的实现 - 采用微程序控制
由于有些指令非常复杂,以至于无法用组合逻辑控制器来实现,而微程序控制器用软件设计西乡实现硬件,可以实现对复杂指令的控制 - 难以进行编译优化
由于编译器可选指令序列增多,使得目标代码组合增加,从而增加了目标打码优化的难度
- 指令系统复杂
精简指令集计算机(Reduced Instruction Set Computer,RISC)
- 指令数目少
- 指令格式规整
- 采用Load/Store型指令设计风格
- 采用流水线方式执行指令
- 采用大量通用寄存器
- 采用组合逻辑电路控制