0%

一、总论

1.1 关于需求

我认为,在P7,我们设计的最终目的是实现一个看上去像单周期CPU的、具有反馈控制接口的流水线CPU。如果再将目标细化一些,那么就是两个小目标,那就是:

  • 从外部(也就是软件程序开发者)看,流水线CPU被封装成了单周期CPU
  • CPU可以为外部提供反馈信息,并且可以让外部根据反馈信息进而更改CPU的运行状态(整个过程叫做反馈,实现了这个功能的CPU具有了软硬件交互接口

其中第一个需求,体现的是对硬件良好的封装能力,也就是极高的设计能力,设计者必须同时站在CPU内部和外部角度,从外部去检查没有流水线的任何细节漏出,从内部去实现这种伪装。对于第二个需求,体现的是对控制和接口更高层次的理解,我们的CPU的控制会变得更加复杂,会具有反馈和二次控制的功能,同时,软硬件接口交互也加大了理解的难度,因为有一部分功能交由软件负责,而我们不负责软件。

Read more »

一、寄存器与内存

1.1 字节与字

关于对(word)的理解,我又有了新的认识,word是一种操作单位,而且是最常见的操作单位(不是最小的),内存的地址是用一个字(32位二进制数)来表示的,一条指令的长度是一个字,寄存器的大小也是一个字,立即数的大小也是一个字,甚至对于那些不足一个字长度的数据,我们都需要给它补齐,然后再对它进行操作。所以字最大的特点就是它的通用性

那么什么是字节(byte)呢?字节是指令集最小单位。这个观点是花了很久才意识到的,因为我知道数据是按二级制表示的,那么如果把(bit)作为最小单位,岂不是理所当然。但其实就是不是的,这可能是因为我们需要更简洁更优雅的指令抽象,所以就舍弃了对单独一个位的操作,就好像数字电路舍弃了异步连续一样。注意,字节不但是操作的最小单位(可能不准确,我还没想到太明显的操作字节的指令),而且是指令集的最小单位,比如我们说0x000000000x00000001这两个地址差1,那么这个1就是“1个字节”,也就是这两个地址之间差了8个bit。而不是1个bit。再比如说,我们都说int是4字节,char是1字节,我们从来不说int是32位,char是8位,可见更高层次抽象的高级语言,就更不把位当回事请了。

然后我们还需要一些直观的认识,一个字节是8bit,也就是说,他的能表示256个不同的状态,如果写成一个十六进制数,那么他可以表示任何一个两位的十六进制数,也就是长成这个样子 XX。在MIPS中,一个word是由四个字节组成的,也就是说,我们去写一个十六进制数,它应该长成这个样子 0x XX_XX_XX_XX 。一个word的大小是跟一个int一样大的,同时,它跟MIPS中的立即数是一样大的,也就是说,一个word刚好能存一个数字(开数组的时候会用到)。但是可以存4个字符,这是因为字符只占一个字节。

Read more »

因为这是在考前最后一天弄的,所以实在是没有时间码字了,就截几张自己觉得可能以后会用到的图,放在这里摆烂就好了。这都不是面向考试了,这都是面向考研复习了。

Read more »

二元关系真的是很难的一章,非常驳杂,而且其实直观理解都很浅薄,只需要记住其本质依然是集合论的分支,证明或者性质探究依然没有脱离集合论的阴影。

Read more »

斯特林数感觉已经偏向于动态规划求解了,是一个很漂亮的组合数学,本来这一部分应该关于生成函数的介绍,但是因为没时间了,所以就鸽了。

在这个博文里,不仅介绍斯特林数,还介绍了对组合数学的一种普遍处理。所以还是有很好的参考意义的。

Read more »

集合论是后面关系,函数和图论的基础,可以说充分体现了离散数学“元数学”的特性。

一个给定的元素是否属于某一个集合,这是集合论中的一个基本问题。元素与集合之间这种属于关系(成员关系),是集合中的一个基本关系。

这篇博文介绍了一种做题方法,可以说在某些意义上,更加逼近了集合论的本质。我十分满意。

Read more »