• 26
  • 12月

一学期的课程结束了,这周我们开始了本学期的第三个实验性课程——计算机组成原理实验。

实验课这种东西只要认真去做,确实能学到相当多的东西。EDA让我理解了电路的设计、系统软件分析与设计让我大概看明白了一个操作系统的内核是怎么写的,这一次的软件分析与设计则真的让我明白了计算机到底是怎么工作的。

自打接触计算机那时起,接受的教育都是:计算机是由程序控制执行的。程序是用编程语言写出来的。编程语言分为高级语言、汇编语言、机器语言。机器语言是2进制写的,在计算机底层直接控制计算机的执行——得出的结论是计算机完全是由机器语言控制运行的。

但是机器语言为什么能控制计算机运行呢?在本周以前,这对我就是一个黑盒问题。经过这两天的实验,这个黑盒被打开了。原来盒子里还有一个更底层的东西在控制着计算机,那就是微控制器中的微指令(计组课上老师讲过,但直到现在才搞明白-_-b)。计算机也无非就是一个大的EDA电路。运算器、内存、寄存器、输入设备、输出设备等无非都是连在系统总线上的一个个模块,每个模块都有使能端、总线开关等开关控制着它们的工作。

真正控制计算机工作是微控制器中的微代码,计算机的执行最根本上执行的是微代码,由微代码控制各个门的开关,决定数据从哪个模板流到哪个模块,各个模块应该做什么工作。而机器语言不过是微代码执行时查看的参数,微代码读取内存中的机器语言,根据机器语言决定下一步该执行什么,执行完毕后再读取下一条机器语言。

之所以一直说机器语言是控制计算机的执行,是因为在绝大多数计算机中,微代码是固定不变且不可改写的。一旦CPU的设计确定了,这台计算机的所有微代码就完全确定了(微代码存储在CPU的控制器中,固化在CPU的内部)。我们就只能在机器语言的层面上控制计算机了。

不过高校的实验就是高校的实验,我们的实验室中给的实验箱是一台自己连接各个模块,自己编写微代码的计算机。

实验指导书上给了一套可以实现加减法和基本逻辑运算的机器码及对应的微代码实验。不过我和我的搭挡晓亮决定做一个直接支持乘法指令的计算机。从今天下午开始到晚上十点多终于把所有的微代码设计出来了(直接写2进制控制各个模块的使能端确实不是件容易的事……)。明天去调试,期待能够成功。:)

标签:

您可以对这篇文章发表一条评论,或者在您自己的网站中引用 (Trackback) 它

发表一条评论

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程