计算机是怎么认识代码的( 三 )


文章插图
编程早期的计算机就是这样编程的 , 几分钟就算完了但插线好几天 。而且插线是个细致且需要耐心的工作 , 所以那个时候的程序员都是清一色的漂亮女孩子 , 穿制服的那种 。
七、选择器虽然和美女作伴是个快乐的事 , 但插线也是个累死人的工作 。所以我们需要改进一下 , 让 CPU 可以根据指令来相加或者乘2 。

计算机是怎么认识代码的

文章插图
选择器这个就简单了 , sel 输入 0 则输出 i0 的数据 , i0 是什么就输出什么 。同理 sel 如果输入 1 则输出 i1 的数据 。
有这个东西我们就可以给加法器和乘2模块(位移)设计一个激活针脚 。
这个激活针脚输入 1 则激活这个模块 , 输入 0 则不激活 。这样我们就可以控制数据是流入加法器还是位移模块了 。
八、触发器现在我们终于可以做 A × B + C 了 , 这就需要先保存 A×B 的结果 , 在与 C 相加 , 等等...保存?话说在计算机内部是用什么方式保存数据的呢?
由于保存数据的重要性 , 电路中使用何种方式可以保存数据 。比如使某个器件一直输出高电平 , 那不就是 1 了吗?一直输入低电平 , 那不就是 0 了吗?这里再引入一个触发器 。
计算机是怎么认识代码的

文章插图
触发器这个模块的作用是存储 1bit 数据 。比如上面这个 , R 是 Reset , 输入 1 则清零 。S 是 Set , 输入 1 则保存 1 。RS 都输入 0 的时候 , 会一直输出刚才保存的内容 。
注意到这个电路跟之前我们看到的都不一样了 , 其门电路的输出会作为自身的输入 , 这种结构被称为反馈电路 。
我们用触发器来保存计算的中间数据(也可以是中间状态或者别的什么) , 1bit 肯定是不够的 , 不过我们可以并联 , 用 4 个或者 8 个来保存 4 位或者 8 位数据 。这种我们称之为寄存器 。
九、汇编现在我们把上述用到的元器件组合起来 , 共有 8 个引脚 , 其中 4 个数据引脚 , 4 个指令引脚 。数据引脚是可以输入数据 , 指令引脚是用来选择执行的操作 。
我们定义 , 当指令引脚输入:
0001 读取数据 , 将数据引脚的数据读入寄存器;
0010 选择加法器 , 将数据引脚的数据与寄存器数据相加 , 结果在寄存器;
0100 选择乘法器 , 将寄存器的数据乘以数据引脚的数据 , 结果在寄存器;
1000 清空寄存器 。
我们以一个计算题来举例:3 × 5 + 6 , 输入依次为:
0001 0011 # 读取数字 3
0100 0101 # 选择乘法器 , 乘以 5
0010 0110 # 选择加法器 , 加 6
不错 , 现在我们计算出 3 × 5 + 6 , 可以去小学 3 年级踢馆了 , 呃 , 不过是不是有点麻烦 , 这还是我们只定义了 4 种指令 , 要是成千上万种这谁顶得住?
我们不妨对指令稍微包装一下 , 规定:
0001 用 MOV 表示
0010 用 SHL 表示
0100 用 ADD 表示
并且假设现在又多了一个元件可以实现十进制到二进制的转换 , 那么命令应该为:
MOV 3
SHL 5
ADD 6
稍微好受一点了 , 这就是我们每个人都精通的汇编语言 , 之前仅有 0 和 1 的语言称为机器语言 。
太棒了 , 靠这台我们设计的 CPU 可以打败所有的小学生 , 称霸小学校园了 。而且现在我们用的是 4 位 CPU , 如果换成 8 位的 CPU 完全可以吊打初中生了!
实际上用程序控制 CPU 是个挺高级的想法 , 再此之前计算机的 CPU 都是单独设计的 。
1969 年一家日本公司 BUSICOM 想搞程序控制的计算器 , 而负责设计 CPU 的美国公司也觉得每次都重新设计 CPU 是个挺傻X的事 , 于是双方一拍即合 , 于1970年推出一种划时代的产品 , 世界上第一款微处理器4004 。那家负责设计 CPU 的美国公司也一步一步成为了业界巨头 。它就是 Intel 。
计算机是怎么认识代码的


推荐阅读