计算机组成原理指令系统部分
就我的学习情况,整理几个重要的知识点
6.1指令格式
1 OP和A
操作数类型按存放位置 三种:存储器类型(主存)、寄存器类型(通用寄存器)、立即数类型(地址字段)
2 地址码 分 三、二、一、零地址指令
三地址 A1A2运算后结果存入A3
对于零地址
3操作
二地址指令比方说 OP dest , Sourse
目的操作数不能是CS和IP(段寄存器)
立即数不能直接传给段寄存器
立即数不可以做目标寄存器
4寻址方式
总结:
(1寄存器寻址 R1,R2
(2寄存器间接寻址 [R1],R2
(3直接寻址(主存) R1,[30H]
(4立即寻址 R0,#30H
8+12+12
对于二指令 因为OP有8位 是0000 0000—1111 1111 但不可能全占 因为他要扩展所以要他自己最多的话,那么就只有1111 1111用于扩展 他自己就是2^8-1
对于一指令 因为他是二指令扩展出来的,他要最多的话,占用的op就是最多的而二指令占用最少为1 他是(2^8-1) * (2^12) -1
6操作码扩展
原则:常用的要短,不常用的长点
二、数据寻址
A:形式地址
EA:有效地址(即真实地址)
立即寻址就是指令当中自带数据,直接读取,最快;
直接寻址就是指令中存放的是地址,直接解析这个地址;
间接寻址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。
1立即寻址:操作数在指令的地址码字段
2直接寻址:操作数的地址 存放在指令的地址字段A中
3间接寻址:A为操作数地址的地址
4寄存器寻址方式
操作数存在寄存器中 操作数所在的寄存器编号存在A中
5寄存器间接寻址
直接搞题目
题型:确定有效地址
寻址方式
汇编语言和指令系统中操作数 dest和souce的先后位置不同
6.4指令类型
1数据传送指令
2算术逻辑运算指令
算术运算±*/ 逻辑运算(与或非异或) 位操作
SAL \ SAR算术左右移
SHL \ SHR 逻辑左右移
左移相同 右移关键在于用什么来填补空的位 算术0逻辑1
计算时 算术有符号 逻辑无符号
记忆: 算术有符号0 逻辑无符号1
4程序控制类指令
A无条件 JMP L0
B 条件 JC L0
C调用和返回 CALL和RETURN
D 陷阱
5其他
6.6MIPS32指令系统
1寄存器
32个通用寄存器
其中 $8- 15 , 对 应 15 ,对应 15,对应t0-$t7,
$24- 25 , 对 应 25,对应 25,对应t8-$t9,这些都是暂时变量,函数调用时不需要保存与恢复
$16- 23 , 对 应 23 ,对应 23,对应s0-$s7是函数寄存器变量,函数返回之前,必须保存和恢复使用过的变量
32个的浮点寄存器
R型注意:rs\rt 是源操作数寄存器 rd是目的操作数寄存器
表中有两条逻辑左移指令sllv和sll
其中sllv左移指令sllv rd,rt,rs是寄存器 rs的内容为移位次数 就相当于shamt
只有sll逻辑左移指令用了shamt来表示移位的位数,其他指令的shamt字段没用,编码可以任意,表中是全都设为00000
sll指令只用到了两个寄存器,没用rs寄存器,所以rs寄存器编号任意,设为00000
以下是I型
这点很简单一个点:lw源是rs
sw源是rt
beq/beqz/benz/bne:条件转移eq相等,z零,ne不等
其他知识点:
li $t1,s load immediate