首页 > 编程知识 正文

命运的迷雾电子书(穿越时间的迷雾可以看清很多)

时间:2023-05-06 19:47:51 阅读:93319 作者:698

像Hellow World这样的小程序表面上看起来很简单。 你有没有想过怎样才能用计算机运行这个程序? 我给你介绍一下那个的经过吧。 对于初学者来说,程序只是文本文件中存储的一堆文字。 所以我们首先要做的是对该文本进行语法分析,提示其含义,用某台计算机能够理解的低级语言重新表达程序。 这个翻译过程(即编译、比较)的结果是生成另一个包含机器代码的文本文件。

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

计算系统设计中包含的多层抽象结构以自上而下的形式描述,可以指示高级抽象如何表现为简化或更简单的抽象。 同样的结构也可以用自下而上的形式来描述,从而展示了基础抽象是如何构建更复杂的抽象的。 本文论述采用后者的方式,从最基本的要素(原始逻辑门)开始,向上层推进,最后构建完整的计算机系统。

1 布尔代数

布尔代数只处理布尔型(也称为二进制型)数值,以及1或0、真或否这两个符号。 由于计算机硬件基于二进制数据的表示和处理——,布尔函数在硬件体系结构的描述、构建和优化过程中起着非常重要的作用。

编写布尔函数的最简单方法是列举函数的所有可能输入变量的组合,并导出每个组合对应的函数输出值。 这就是真值表表示法。

2 门逻辑Gate Logic

门(gate )是用于实现布尔函数的物理设备。 如果布尔函数f有n个输入变量,并返回m个二进制结果,则用于实现该函数f的门有n个输入管脚和m个输出管脚。 如果从这些栅极的输入引脚输入几个值v1…vn,则作为其内部结构的栅极的逻辑将计算f(v1…VN )的值并输出。 为了用比较简单的函数表示复杂的布尔函数,复杂的门电路也由很多基本的门电路构成。 最简单的门由称为晶体管、transistors的微小开关设备构成,这些微小开关设备根据设计的拓扑结构进行连接,实现门的整体功能。

当今的计算机大多用电表示二进制数据从一个门向另一个门的传输,但实际上所有具有转换和传输能力的技术都是可用的。 事实上,在过去的50年中,研究人员建立了许多布尔函数的硬件实现方法,包括磁、光、生物、水力和风力。 今天,大部分栅极由晶体管实现,这些晶体管在硅上被蚀刻,困在芯片中。

硬件设计者从这些基本的栅极连接它们,实现具有更复杂功能的复合栅极。

2.1半加法器(半加法器) :用于表示两位数的加法。

2.2全加法器(Full-adder ) :用于表示3位的加法。

2.3加法器(Adder ) :用于进行两个n位的加法运算。

3 儒雅的短靴结构的存储程序概念

儒家短鞋结构的存储器程序概念的基本思想其实相当简单。 计算机基于固定的硬件平台,可以执行固定的指令集。 另外,这些命令被捕捉为组件模块,可以构成任意的程序。 并且,与1930年以前的机器计算机不同,这些程序的逻辑没有嵌入硬件中,而是存储在计算机的存储装置(memory )中,和数据一样,成为了所谓的“软件(software )” 因为计算机操作通过当前运行的软件向用户展示其功能,所以每次在计算机上加载不同的程序时,都可以在同一硬件平台上实现完全不同的功能。

儒教短靴机的存储器中存储有数据项目(数据项目)和程序指令)编程指令(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!”)的命令,然后让别人来负责其中的实现细节,操作系统在其中就起到了很重要的作用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。