0%

一、代码规范

1.1 常量

我个人规范是将所有的常量都用伪指令.eqv声明,其格式会在3.2中介绍。关键涉及一个问题,就是.eqv这样定义的是一个立即数,但是不是所有的指令都可以重载了立即数参数模式,所以更加规范的规范是每次使用被.eqv定义的常量之前,都加载立即数到一个寄存器(规定为$t7),然后使用这个寄存器,这就是常量的全部规范。

当然,还有几种方法,一种就是把常量直接保存在寄存器中,每次就是用这个寄存器就好了。但是有两点缺陷,一个是寄存器资源会被占用,以puzzle为例,我们需要一个寄存器存1,来做bool标记,需要一个寄存器存4,来用于控制dir的四个方向,那么就被占用了两个寄存器。另一个是容易bug,因为要时刻留心代码不修改规定寄存器。

还有一种是临到用的时候,在用li指令给某个寄存器一个值,但是这样也是容易造成寄存器混乱,还有一个缺陷是如果要修改常量的值,就会造成大量的修改工作。

Read more »

一、写在前面的话

首先,这道题目我并没有过,一共是应该六个左右的测试点,我最好的一次提交是还剩下2个测试点没有过,但是那次提交已经是属于脱离了规范,纯粹为了测试而写的,不是规范风格的代码。我在签退以后,虽然在群里面同学的帮助下(结尾有鸣谢名单),意识到自己代码存在的问题,但是新写好的代码也是没有经过评测机检验的。所以尽管我很想对大家负责,但是确实是客观条件不允许,我的代码要是运行出来bug了,请大家不要打我。

所以这篇文章,大家就看个乐呵就行了,要是真从其中咂吧出啥滋味来,那是诸位的功德,要是没有,也只是我的水平太低,与诸位无关。

我在文章里面只贴了一个tb模块的原码,主要是为了让大家看的明白一些,没有cscore的原码,跪求助教大大不要删帖。谢谢助教大大。


Read more »

一、总论

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 »