龙空技术网

穿越计算机迷雾,从零开始构建计算机

小智雅汇 6616

前言:

现时你们对“布尔代数二进制图示”大致比较珍视,朋友们都需要了解一些“布尔代数二进制图示”的相关知识。那么小编也在网上搜集了一些对于“布尔代数二进制图示””的相关文章,希望各位老铁们能喜欢,你们一起来了解一下吧!

像Hellow World这样的小程序表面上看起来非常简单。你可曾想过如何才能在计算机中运行这个程序呢?让我们来提示其中的原委。对于初学者而言,程序只是一堆存储在文本文件中的字符而已。因此我们必须要做的第一件事情就是对该文本进行语法分析,提示其语义,然后用某种计算机能理解的低级语言来重新表达程序。这个翻译过程(即编译,compilation)产生的结果就是生成另外一个包含机器代码的文本文件。

当然,机器语言也是一种抽象,是一级计算机能理解的二进制代码。为了将该抽象形式具体化,就必须由某种硬件体系(hardware architecture)来实现的。这个硬件设备都是由许多基本逻辑门(Logic gates)集成构建出来的。当然,每个原始门又是由若干个转换设备(switching devices)组成,这些设备一般用晶体管实现。

计算系统设计中蕴含的多层抽象结构可能用自顶向下的形式来描述,以此来展示高级抽象如何被简化或表示成较简单抽象。同样的结构也可以用自下而上的形式来描述,以此展示底层抽象如何构建更复杂的抽象。本文采用后一种方式进行阐述:从最基本的元素(原始逻辑门)开始,然后一直向上层进发,直到最后构建完整的计算机系统。

1 布尔代数

布尔代数处理布尔型(也称为二进制型)数值,只需要处理两个符号:1 or 0,true or false,yes or no。因为计算机硬件基于二进制数据的表示和处理——所以布尔函数在硬件体系结构的描述、构建和优化过程中扮演着十分重要的角色。

描述布尔函数最简单的方法就是枚举出函数所有可能的输入变量组合,然后写出每一种组合所对应的函数输出值。这就是真值表表示法。

2 门逻辑Gate Logic

门(gate)是用来实现布尔函数的物理设备。如果布尔函数f有n个输入变量,返回m个二进制的结果,那么用来实现这个函数f的门将会有n个输入管脚(input pins)和m个输出管脚(output pins)。当我们把一些值v1…vn从这些门的输入管脚输入,它的内部结构即门的逻辑会计算然后输出f(v1…vn)的值。正如复杂的布尔函数能够通过相对简单的函数来表达一样,复杂的门电路也是由很多基本的门组成的。最简单的门是由微小的开关设备(称为晶体管,transistors)构成,这些微小开关设备按照设计的拓扑结构进行连接,来实现整个门的功能。

虽然当今的计算机多数使用电学来表述二进制数据从一个门到另一个门的传递,但实际上任何具有转换(switching)和传导(conducting)能力的技术都是可用的。事实上,在过去的50年里,研究人员已经建立了很多布尔函数的硬件实现方法,包括磁、光、生物、水力和风力设备。今天,大多数门都采用晶体管来实现,这些晶体管在硅上蚀刻并封闭成芯片。

硬件设计人员从这些基本的门开始,将它们进行连接,来实现功能更复杂的复合(composite)门电路。

2.1 半加器(Half-adder):用来表示两位加法。

2.2 全加器(Full-adder):用来表示三位加法。

2.3 加法器(Adder):用来进行两个n位加法。

3 冯·诺依曼结构的存储程序概念

冯·诺依曼结构的存储程序概念的基本思想其实相当简单。计算机基于固定的硬件平台,能够执行固定的指令集。同时,这些指令能够被当成构件模块,组成任意的程序。而且,不同于1930年以前的机械计算机,这些程序的逻辑并没有被嵌入到硬件中,而是被存储到计算机的存储设备(memory)里,跟数据一样,成为所谓的“软件(software)”。因为计算机的操作是通过当前正在执行的软件来向用户展示其功能,所以每次向计算机中载入不同的程序时,同样的硬件平台可以实现完全不同的功能。

冯·诺依曼机的内存中存有两种类型的信息:数据项(data items)和程序指令(programming instructions)。对这两种信息通常采用不同的方式来处理,在某些计算机里,被分别存储到不同的内存区中。尽管它们具有不同功能,但两种信息都以二进制数形式存储在具有通用结构的随机存储器中(一个连续的固定宽度的单元阵列,也称为字即word,或者存储单元,每个单元都有一个独立的地址)表示。因此,一个独立的字(代表一个数据项或者一条指令)通过它的地址来指定。

4 机器语言

机器语言是计算机体系中意义最深奥的接口-它也是硬件和软件相接的中间线。借由机器语言,程序员用符号指令表达的抽象思维被转换成执行在硅片上的物理操作。因此,既可以将机器语言看作编程工具,也可能将其看作硬件平台内部不可分割的一部分。事实上,正如我们设计机器语言是为了使用给定的硬件平台一样,我们设计硬件平台是为了获取、解析并执行用给定机器语言编写而成的指令。

控制流程:程序通常以线性方式,一个命令接着一个命令执行,但偶尔也包含分支,执行其他地方的命令。分支能够实现好几种结构,包括反复(repetition,跳回到循环的初始位置)。有条件的执行(conditional execution,如果布尔条件是false,则向前跳到“if-then”语句之后的位置),以及子程序调用(subroutine calling,跳到另一代码段的第一条命令处)。为了支持这些程序结构,各种机器语言都可以有条件(conditional)或无条件(unconditional)地跳转到程序指定的地址。在汇编语言中,程序中的位置也用一些符号表示。

机器语言一般用二进制来表示,如二进制码(11000010100000011000000000000111)代表一条实际的机器指令,它能被底层硬件所理解。指令最左边的8位代表操作码(比如Load),接着的8位代表寄存器(比如R3),剩下的16位表示地址(比如7)。根据硬件的逻辑设计和相应的机器语言,整个32位指令可以让硬件去执行操作“将Memory[7]的内容加载到寄存器R3中。”现代计算机平台支持数十个这样的基本操作。如此一来,机器语言会变得相当复杂,因为其涉及到很多操作码、不同的内存寻址模式和不同的指令格式。

5 汇编和编译

解决复杂性的方法之一是,使用约定的语法来表示机器指令,如用Load R3,7而不是11000010100000011000000000000111表示机器语言。由于将符号表示翻译成二进制码是直截了当的,所以允许用符号表示法来编写底层代码,并用计算机程序将底层程序翻译成二进制码是很有意义的。符号化的语言称为汇编(assembly),翻译程序称为汇编编译器(assembler)。汇编编译器对每个汇编命令的所有部分进行解析,将每个部分翻译成它对应的二进制码,并将生成的二进制码汇编成真正能被硬件执行的二进制指令。

一个编译器一般由词法分析器和代码生成器组成。

6 操作系统

操作系统的作用是用来衔接硬件系统和软件系统,以使得整个计算机对程序员和用户而言更容易使用。如为了使得文本“Hello World!”在计算机屏幕上显示,必须在特定的屏幕位置上画几百个像素。就可以通过参考硬件规范,编写相关的代码来完成,该代码在驻留RAM的屏幕映像中放置必要的比特位。显然,高级程序员希望事情能够变得更好些。他们希望使用诸如printString(“Hello World!”)的命令,然后让别人来负责其中的实现细节,操作系统在其中就起到了很重要的作用。

标签: #布尔代数二进制图示