加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

我这个人不懂什么CPU,于是我用代码模拟出了一个

发布时间:2019-05-24 03:10:35 所属栏目:移动互联 来源:杜伟、张倩、李泽南编译
导读:芯片的设计到底有多难?想要回答这个问题最好还是先自己实践一下。最近,来自 BBC 的一名资深软件工程师 Daniel Harper 使用 Go 语言成功模拟出了一个 CPU 的所有功能,并把自己的经历写成了博客,引起了人们的热议。这篇文章也告诉我们:完整地了解计算机

在这里,外设使用的是适配模式,充当 CPU 和外部世界之间的硬件接口。这里并不难猜,肯定是软件设计模式获取灵感的地方。

我这个人不懂什么CPU,于是我用代码模拟出了一个

I/O 适配器是如何连接到 GLFW 窗口的

通过分离关注点,使用 GLFW 将键盘输入的内容输出到屏幕是非常简单的过程。事实上我只是从模拟器中提取了大部分代码并整形了一下,使用 go 通道作为进出机器的信号。

让它跑起来

我这个人不懂什么CPU,于是我用代码模拟出了一个

这可能是最难的一部分,至少也是最麻烦的。用如此有限的指令集编写程序集真的很糟糕。使用我编写的粗糙的汇编程序编写程序集更糟糕,因为你怪不得别人。

最大的问题在于同时处理这 4 个寄存器并跟踪它们,将它们作为临时存储存储到内存中。在这个过程中,我记得 Gameboy CPU 有一个堆栈指针寄存器,这样你就可以推送和弹出状态。不幸的是,这台电脑没有这么奢侈,所以我主要是在定制的基础上对内存里的东西进行移进移出操作。

我唯一花时间实现的伪指令是 CALL,以帮助调用函数。这可以让你运行一个函数,然后在函数被调用后返回到该点。由于没有堆栈,你只能调用一层的深度。

由于机器不支持中断,为获取键盘状态等函数,你必须实现糟糕的轮询代码。书中的确提到了实现中断的步骤,但那需要写更多代码。

无论如何,我最终编写出了四个程序,其中多数程序使用一些共享代码来绘制字体、获取键盘输入等。虽然与操作系统还有一定的距离,但它确实让我意识到一个简单的操作系统也可能提供一些服务。

但这其实并不容易,文本编写程序最棘手的部分是计算出何时转到新行,或当你按回车键时发生了什么。

  1. <code>main-getInput:</code> 
  2. <code>    CALL ROUTINE-io-pollKeyboard</code><code>    </code> 
  3. <code><code>    </code>CALL ROUTINE-io-drawFontCharacter</code><code>    </code> 
  4. <code><code>    </code>JMP main-getInput</code> 

上述文本编写程序的主要循环。

我也没有抽出时间来实现退格键或其他任何修改键。这让我意识到制作文本编辑器需要做多少工作,这项工作可能是多么乏味。

反思

这个项目对我来说非常有趣,也很有收获。在用汇编语言编程的过程中,我基本上放弃了底层的 NAND、AND 和 OR 门。我上升到了上面的抽象层。虽然我做的这个 CPU 很简单,距离电脑里的 CPU 还很远,但通过这个项目我学到了很多,如:

  • 位元如何在使用总线的所有组件之间移动

  • 一个简单的 ALU 是如何工作的

  • 一个简单的 Fetch-Decode-Execute 循环是什么样的

  • 没有堆栈指针寄存器的机器+堆栈的概念很糟糕

  • 没有中断的机器很糟糕

  • 汇编程序是什么、如何工作

  • 外围设备如何与一个简单的 CPU 通信

  • 简单字体的工作原理和在显示器上显示它们的方法

  • 一个简单的操作系统会是什么样子

相关课程

如果你对于芯片的工作原理非常有兴趣,先上一些在线课程也是一个好方法。这一 Udacity 免费课程《高性能计算架构》源自佐治亚理工:

  • https://cn.udacity.com/course/high-performance-computer-architecture--ud007

原文地址:https://djhworld.github.io/post/2019/05/21/i-dont-know-how-cpus-work-so-i-simulated-one-in-code/

【编辑推荐】

  1. 还为模拟流量测试发愁吗?!滴滴开源RDebug流量回放工具!
  2. 开发 7 年,我学到了什么?
  3. 12位中年程序员:代码一敲十年,收入虽高前途摇摆
  4. 26个适用于VMware管理员的强大工具
  5. GitHub上的开源代码到底受不受美国出口管制?
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读