3 指令系统
3.1 指令系统介绍
基本概念
- 机器指令:计算机能识别、执行的某种操作命令
- 指令系统:一台计算机中所有机器指令的集合
- 指令格式:用二进制代码表示指令的结构形式
指令分类
- 按操作数分类:三地址、二地址、一地址、零地址
- 按指令字长度分类:等长指令、变长指令
- 按操作数的物理位置分类
- CISC: IBM, VAX
-
- 指令数目多,指令功能复杂
- RISC: MIPS, RAM
3.2 MIPS指令系统简介
MIPS全称:Microprocessor without Interlocked Piped Stages
特点:
- 指令条数少,指令简单,不到100个
- 寻址方式简单,有大量寄存器
-
- 立即数寻址
-
- 寄存器寻址
-
- 基地址加16位偏移量*4的访存寻址
- 指令长度固定,都是32位
- 指令格式简单只有三种:立即数型(I)、转移性(J)、寄存器型®
- 只有load和store指令可以访问存储器
- 需要优秀的编译器支持
寄存器:
-
HI,LO:储存乘法结果
-
PC:当前执行程序的地址
-
32个32位宽的通用寄存器
-
大端存储:高对低,低对高
-
小端存储:高对高,低对低
由上题,大端存储,高对低,地址0存着00,地址1存着90
3.2.1 立即数指令(I型)
16位立即数,表示范围-215~215-1
立即数范围不够怎么办?
lui $t0 xxxx
ori $t0, $t0,yyyy
LUI 把一个16位的立即数填入到寄存器的高16位,低16位补零
则
t0不等于$0
3.2.2 R型指令
指令前6位是000000,即op=000000,由funct区别
and是R型指令,andi是I型指令
3.2.3 条件语句
PC gets updated (PC+4) during the fetch cycle so that it holds the address of the next instruction !!!
最远只能跳到215*4=217的地址
slt $t0, $s0, $s1 # if $s0<$s1, $t0=1
slti $t0, $s2, 15 # $t0=1, if $s2<15
sltiu $t0, $s0, 25 # $t0=1, if $s0<25
MIPS还有很多 pseudo指令,比如ble,bgt,bge,但是实际上只使用bne和beq,所以编译器需要用到$at寄存器。
3.2.4 J型语句
注意上图,立即数*4放入PC的后28位。
那个年代,操作系统还很落后,不是按页寻址,假设代码段最大范围是228=256MB,虚拟地址的后28位和物理地址相同,前四位可能不一样,这样的话jump语句记录的是绝对地址。
实际中,上图计算得到的地址也还是虚拟地址,操作系统负责将虚拟地址映射到实际地址。
函数调用:jal:jump and link
注意要将s寄存器存到栈中。