目录
系列文章目录
本系列博客重点在深圳大学计算机系统(3)课程的核心内容梳理,参考书目《计算机组成与设计》(有问题欢迎在评论区讨论指出,或直接私信联系我)。
计算机组成与设计01——计算机概要与技术_@李忆如的博客-CSDN博客
计算机组成与设计02——指令:计算机的语言
梗概
本篇博客主要介绍书目第二章指令:计算机的语言的相关知识。
一、The MIPS 指令集
1.算数运算
加减运算,三个操作数
两个源操作数和一个目的操作数
add a, b, c # a gets b + c
所有算术运算遵循这一格式
设计原则1:简单源于规整(Simplicity favours regularity)
2.寄存器操作
算术运算指令使用寄存器操作数
3.内存操作数
字(word)在内存中是对齐的:地址必须是4的倍数
样例如下:
4.寄存器 vs 内存
寄存器存取数据比内存快
操作内存数据需要加载(读)和存入(写)两个操作 需要执行更多指令
编译器需要尽可能多地使用寄存器变量 仅将不频繁使用的变量存入内存 寄存器优化非常重要
5.立即操作数与常量
常量加法:addi $s3, $s3, n(可正负)
MIPS 寄存器 0 ($zero) 表示常量0(对大概率操作非常有用)
如寄存器间传值:add $t2, $s1, $zero(非addi,因为都在操作寄存器)
6.指令表示
均为32位编码指令
少量格式为操作代码(opcode)、寄存器号等编码
规整化
6.1 R-指令(算术指令)
样例如下:
Tips:add func = 32 , sub func = 34
Tips:R-指令寻址空间较小。
6.2 I-指令(数据传输、立即数指令)
Tips:lw func = 35 , sw func = 43 ,beq func = 4 ,addi = 8
Tips:通过op code区分R(0)还是I型(非0)。
6.3 逻辑操作
逻辑左/右移是R型指令(rs = 0)。
6.4 决策指令(选择结构)
样例如下:
Tips:基本块:一个基本块就是一个指令序列,其内部没有跳出的指令(结束指令除外) 没有被跳转到的指令(开始指令除外)
其他条件操作如下:
Tips:硬件执行<, ≥, … 比 =, ≠慢
有符号数比较: slt, slti 无符号数比较: sltu, sltui
6.5 过程调用指令
6.6 过程调用程序样例
Ⅰ、叶子过程(非嵌套)样例如下:
Tips:叶子过程中用s类寄存器要保存和恢复,用t类寄存器不需要
Ⅱ、非叶子过程样例如下:
过程调用其它过程
对于嵌套调用,调用者需要存储到堆栈的信息: 它的返回地址
调用后还需要用的任何参数寄存器和临时寄存器调用后返回,寄存器会从堆栈中恢复
指针的错误引用如下:
Tips:保存c,d防止func(a,b)中对其值更改
6.7 字节/半字 读取/存储
lb(符号扩展)/lbu(0扩展)类似lw,sb类似sw,char数组差值为1而不是4
字符串拷贝举例如下:
6.8 立即数寻址
Mips的立即数默认为16位。
Tips:即将立即数乘2的十六次方
6.9 分支和跳转中的寻址
分支(近)跳转(远)样例如下:
6.10 寻址方式总结
7.寄存器大全
8.MIPS中的同步(对多用户)
9.谬误和陷阱
总结
以上便是全书核心内容归纳及第二章——计算机的语言的核心知识。在第二章中,主要以计算机系统结构中的设计原则、寄存器、MIPS指令集的介绍为主。