《计算机组成与设计》(二)——指令:计算机的语言

《计算机组成与设计》(二)——指令:计算机的语言

摘要:个人计算机组成学习笔记。

0x01 笔记部分

引言

这部分没啥好总结的,两个概念:

指令集(Instruction Set)

存储程序概念(Stored-program concept):数字存储指令与数据。

以及介绍了本部书使用的MIPS指令集。贴一下表格:

计算机硬件的操作

这部分主要是展示了一些MIPS指令集所写的例子,没啥好多讲的。

计算机硬件的操作数

$s0$s7为变量对应的寄存器;$t0$t9为临时寄存器

MIPS中的寄存器的大小为32位

介绍了两种操作数:

存储器操作数

常数或立即数操作数

注意$zero这个常数在MIPS中的存在

有符号数和无符号数

主要需要补码的使用。正数补码为其原码本身,复数的补码为其原码除符号位外取反+1所得。

符号扩展:指的是取回符号数后用符号位填充寄存器所有剩余的位。

计算机中指令的表示

这节主要讲的是从汇编指令到机器指令。

指令格式(Instruction format)

MIPS字段如下:

MIPS的设计方案:保持所有的指令长度相同,但不同类型的指令采用不同的指令格式。上面标注的位R型指令格式,也就是寄存器型;还有I型,为立即数型:

可以看到在这种格式下,很难设置32个以上的寄存器(MIPS中寄存器的数量),因为rs和rt字段必须增加额外的位,这样就导致32位字长的指令很难满足要求。

逻辑操作

MIPS中的与或非左移右移指令。没啥特殊的

决策指令

讲的无非是循环与判断指令,也没啥好看的。

注意在case/switch语句中提到的转移地址表(jump address table),这是一种将多个分支跳转和其地址编辑在一起一一对应的表格。

计算机硬件对过程的支持

这节主要与栈相关。

在调用过程时需要将调用前程序的状态存储(即将寄存器中的值换出),这就使用到了栈。

人机交互

三种用于表示字符串的方式:

1)保留字符串的第一个位置用于给出字符串的长度;

2)附加一个带有字符串长度的变量;

3)字符串最有的位置用一个字符来标识其结尾。

循环用于复制字符串。

MIPS中32位立即数和寻址

寻址模式:

机器语言解码流程:看3129,2826位以得出是那种类型的指令;根据指令类型分段并理解具体的意义;查找具体的指令;译码完成

并行与指令:同步

为了防止并行任务出现混乱,以实现同步,我们需要硬件原语,其用于提供原子读和原子写的能力。

翻译并执行程序

伪指令(pseudoinstruction):可以理解为是将多个基本指令所打包成的一个指令。

符号表(sysbol table):由汇编器构造的标号与其对应地址一一对应的一张表。

动态链接库(dynamically linked library):为了解决静态链接库的缺陷而发明的。

Java程序启动过程:

Java虚拟机为一种软件解释器,解释器是用来模拟指令集体系结构的程序,其用来执行Java字节码。可移植但是性能差,即时编辑器(Just In Time complier)通过记录运行的程序来找到称为“热点”的方法,将他们直接编译成Java虚拟机运行的宿主机的指令序列,编译过的部分保存起来以便下次程序运行时调用。

后面都是一些实例了,没啥好记录的。

谬误和陷阱

1)更强大的指令并不意味着更高的性能;

2)书写汇编语言的程序员可能还不如一个优化能力强的编译器;

3)指令集会变化;

4)注意字节寻址的相邻地址差的不是1;

5)不要将指针指向一个局部数组的指针。

0x02 总结

这个章节主要介绍了MIPS指令集以及其部分指令、一些数据的底层表示方法还有一些其他的与高级语言和底层语言相关的知识,看了下课后习题,也主要注重于消化MIPS指令,故跳过,直接看第三章。


评论