您当前的位置:首页 > 生活热点

机器码是什么(单片机机器码怎么算)

时间:2022-03-10 19:22:06

毕达哥拉斯说:一切都是有数的,一切都可以用整数或分数来表示。

希帕索斯(公元前5世纪)不同意:腰为1的等腰直角三角形的斜边长是多少?这导致了第一次数学危机。从此几何强势崛起。

中国人觉得计算时要记住中间结果很麻烦。他们发明了算盘和珠子算法,计算的中间结果用珠子的不同组合来表示。

纳皮尔发现,一些大数的乘除运算过于耗时。他发明了对数,将乘除法改为加减法。(1614)

对数表虽然实现了通过计算降维,但毕竟查阅起来眼花缭乱,厚厚的书本不方便携带。没过多久,一位名叫冈特的英国数学家想:既然对数表是把两个数的求积转换成两个对数的和,那么如果把一个对数看成是可以用尺子测量的长度,那么对数的和不就可以直接用尺子测量了吗?1620年,甘特将对数表刻在尺子上,并借助圆规和其他辅助工具实现了这一想法。这种工具叫做计算尺。

受时钟齿轮技术的启发,威廉·席卡德建造了世界上第一台已知的机械计算器。这种机械能加减六位数,通过铃铛输出答案,所以也叫“算术钟”。该机采用11个完整链轮和6个不完整链轮进行加法运算,借助对数表可以进行乘除运算。可惜快完成的时候就毁了。(1623)

1642年,帕斯卡造出了一台实用的可以加减的计算器,这是一台由齿轮刻度盘组成的机器。

笛卡尔发现了坐标系的神器,说:数和形可以合二为一。(1637)

莱布尼茨说,我的计算器不仅要会加减,还要会乘除。莱布尼茨在加减法计算器中增加了一个叫做“步进计算器”的装置。

步进轮是一个有9个齿的长圆柱体,9个齿依次分布在圆柱体的表面。另一个小齿轮可沿轴向移动,与步进轮逐一啮合。根据与小齿轮啮合的齿数,小齿轮每旋转一周,步进轮就可以分别旋转1/10、2/10……直到9/10。这样,它就可以连续地、反复地加减,而在转动手柄的过程中,这种反复的加减就可以转化为乘除。(1671)

同时,莱布尼茨和牛顿独立地找到了求曲线下面积的一般方法。莱布尼茨说求面积只是求和,求面积的变化率只是差分。求面积和变化率是两个互逆的过程,这就是微积分。

贝基说,为什么纺织工业只用蒸汽机,为什么不用它来驱动计算器,于是他发明了蒸汽驱动的差动发动机(由齿轮、轮子、杠杆和拉杆组成),用于特殊的计算目的。此外,还设想了一种通用分析器,它可以运行包含“条件”和“循环”语句的程序,并且有用于存储数据的寄存器。但是成千上万个啮合的十齿齿轮太复杂,思想太超前,最后失败。然而,程序存储和控制的想法萌芽了。(1837)

布尔说逻辑可以和数学结合,逻辑的真假可以用二进制的0和1来表示。两个字符的组合可以表示世界上的一切,前提是位数足够多,这就是二进制和布尔代数。(1847)

1854年,乔治·布尔在对思维规律的研究中第一次向人们展示了如何用数学解决逻辑问题,在此基础上建立了逻辑和可能性的数学理论。布尔代数不能再简单了。操作的要素只有两个:1,0;真或假,基本运算只有and,OR and not,所有运算只用几张真值表就能表达清楚。

阿兰·麦席森·图灵(红豆博客1912-1954)灵机一动。他用一张纸带来存储的指令,用一个读写头读写纸上的指令,重写纸上的数据。这种机器似乎能解决自动计算的问题。这就是后世所谓的“图灵机”,存储程序的概念和实现已经呼之欲出。

香农发现真与假,0和1是电路系统的“开”和“关”。电学中的并联电路和串联电路,好像和布尔代数的逻辑和逻辑有关系。既然逻辑和数学可以相互结合,那么和电学结合怎么样?这是开关电路。(1938)

逻辑门(非门、与门、或门)可以由开关的组合构成,

半加法器和加法器由逻辑门构成:

建立一个记忆回路(循环回路):

计算机中的计算主要包括逻辑运算和算术运算。逻辑运算可以通过计算机的门电路自然实现,而算术运算可以基于加法器:

减法:减法转换成加法,减法用补码表示。

乘法:通过加法和移位来计算。

除法:通过加减和移位来计算。

以一个或多个alu(或加法器)为核心,加上用于存储中间临时结果的移位器和寄存器,可以在相应逻辑的控制下实现各种运算。

祖泽认为,计算机最重要的部分不一定是计算本身,而是过程和计算结果的传输和存储。同时,他发现了继电器这种更好的逻辑开关,发明了Z型系列计算机。(20世纪40年代)

1820年,奥斯特发现了电流的磁效应。1831年,美国科学家约瑟夫·亨利(1797-1878)制造了电磁铁,然后用磁铁制造了继电器。继电器是机电计算机中最先使用的电子元件。但电的作用不是作为信号,而是利用电磁感应原理。

塔纳索夫和贝利发现了真空管作为存储和运算元件,发明了ABC计算机(Atanasoff Berry Computer)。(1942)

1903年,弗莱明在用实数空加热的电线(灯丝)前加了一块板,从而发明了第一只电子管。他把这种管叫做两极二极管。电子管的开关特性是计算机的逻辑部件。当然开关速度比继电器快。这个时候,电才真正作为信号的功能而存在。

1941年6月,莫兹利拜访阿塔纳索夫,详细了解了ABC。不久之后,莫兹利离开了埃尔西诺,在宾夕法尼亚大学的摩尔学院任教。1941年秋,他认识了毕业于该校电机系的研究生埃克特。在美国军方的支持下,他们领导了Eniac的开发,号称是历史上第一台具有可变程序的电子计算机。虽然程序是可变的,但并没有实现程序存储,模块计算模块的组合只能通过开关和连接电缆(跳线或插线板)来改变,实现不同的任务。

冯·诺依曼早就意识到Eniac的自动化程度不够,似乎手动按下开关和连接线缆(插件)的工作也可以由计算机来完成。这些操作不都是对应电路的通断来实现模块的不同组合吗?不是0和1对应的指令序列或者一串电信号吗?如果存储在电脑里,然后按顺序读出,再处理成控制电信号,会不会实现不同模块的自由组合?于是在1945年6月,写了一份101页的关于离散变量自动电子计算机的草案,提出程序和数据要存放在计算机的内存中,并给出了一般电子计算机的基本结构。后来,这些思想被称为存储程序控制的概念和“冯·诺依曼结构”。存储程序控制是指存储程序和程序控制,对应于硬件,也就是要实现存储器(内存)和控制器(可以取代码、解码和发送控制信号)。存储程序控制的概念是计算机理论和实践中最重要的思想之一,可以理解为“图灵机”的具体实现。现在大多数计算机都是存储程序控制概念或“冯·诺依曼结构”的实现。

莫里斯·文森特·威尔克斯(Maurice Vincent Wilkes)领导设计制造了EDSAC(电子延时存储自动计算器),用水银延迟线作存储器,穿孔纸带输入,电传打字机输出,最终实现了存储程序控制的思想实验。

从那以后,按开关和连接电缆的工作就被程序员取代了。程序员是指计算机能够实现的指令集,通过指令集中的指令来安排和组合解决问题的全过程。这是一个程序,是0和1的序列。当它被执行时,它被加载到存储器的代码区,控制器获取指令,解码它们并产生控制信号。指令中描述的数据存储在存储器的数据区,按照数据的编码规则(如补码、ASCII码等)进行解释。).所以数据和指令都用0和1的组合来表示,都存储在内存中,只是解释不同。

0,1序列直接对应硬件的两种状态,直接对应电信号,所以机器可以直接识别,这就是所谓的机器语言。

用机器语言编写、读取和改变程序的0和1序列是很困难的。指令集是否可以用一些单词、短语或者它们的缩写来描述,用名字来指代特定的内存位置,然后用这些单词、短语或者它们的缩写来编程,最后翻译成机器语言?这是可行的,而搜索和替换的工作正是计算机所擅长的。用词、短语或其缩写描述的指令称为汇编程序,这样的翻译程序称为汇编程序,它把源程序翻译成机器语言的0和1序列。于是,开始了程序控制程序的想法(另一个程序由程序翻译或解释)。

汇编指令与机器直接相关,一一对应,不通用,汇编指令抽象程序太低。是否可以用一些关键字和运算符来表示一些具有常用功能的汇编指令,用标识符来表示地址,以达到更高程度的抽象和封装?答案是肯定的,就是高级语言。它的翻译器叫做编译器或解释器,把语言规则编写的程序翻译成机器语言。当然,对应不同的硬件系统和操作系统(提供最基本的功能和一系列底层程序),同一种高级语言可以实现不同的编译器或解释器。实际上,编译器内部可以分为一个“前端”和几个“后端”。“前端”负责将高级语言程序转换成中间形式,“后端”负责将中间表达式转换成不同架构的汇编指令。这种方法比使用多个完全不同的编译器更简单。

顺序、分支和循环三种控制结构是更高层次的抽象,分支和循环的本质是顺序结构,只是不同地址的跳转。

1958年,在IBM工作的约翰·巴克斯领导了世界上第一种高级语言FORTRAN的开发。FORTRAN说,把科学计算和公式翻译留给我吧。

一些高级语言设计者认为区分数据类型是一个很好的选择。数据类型可以先声明后使用,也可以由编译器推断,即强类型和弱类型各有利弊。

另外,不同领域可以设计不同侧重点的高级语言。从此,各种高级语言百花齐放。

面对需求的复杂性和多变性,高级语言的设计者也面临着如何组织代码的问题。

c语言说一切都是函数。(1972)

Smalltalk说,一切都是对象,一些数据和操作这些数据的函数,因为用户之间的密切关系,需要封装组织成类和对象。(1980)

C说,我是一个有类的C,我也可以通过模板做出独立于特定数据类型的函数或者类。我是一把集成了面向过程、面向对象和泛型编程思想的瑞士军刀。(1983)

面对需求的复杂性和多变性,程序员在构建系统时也总结了很多设计模式。

为了实现代码重用,常用的函数、数据结构和算法都实现为函数库和类库。所以,一个成熟的编程语言不仅有语言部分,编译器或解释器部分,还集成了库和框架,达到高效稳定的使用要求。所以编程语言通常由三部分组成,一是语言本身,二是库,三是它的运行环境,也就是后面要提到的操作系统,而javascript也有它的宿主环境,也就是浏览器,也是运行在特定操作系统上的应用程序。

根据冯诺依曼结构,程序需要加载到内存(RAM)中,才能被CPU随机访问。RAM是电存储,比硬盘快很多,但是断电会丢失数据。能不能既电存储又断电不丢失数据?答案是烧录ROM或者MCU或者bios固件。程序中0表示熔丝要烧断,1表示熔丝不要烧断。以这种方式记录二进制信息也相当于逻辑电路的重组。程序烧录后,芯片具有逻辑功能。包括可擦除一次的PROM和可重复擦除的EPROM。

所以逻辑电路的重组可以是硬连接,比如Eniac的开关和连接线,软连接,比如程序,或者中间状态的固件,比如MCU或者bios固件的烧录。也就是说,硬件和软件其实是一个硬币的两面,有时候两者之间的界限是模糊的,相应的功能可以通过硬件或者软件来实现。

现代系统越来越多地使用通用硬件(如处理器、内存、与外界连接的接口),同时依赖软件来实现特定的行为。一般认为软件比硬件更便宜、更灵活、更好修改(尤其是与已经出厂的设备相比)。比如用电脑控制汽车的动力和刹车,那么防抱死制动和电子稳定控制显然应该是软件的功能。

和硬件、软件一样,需要不断进行更高层次的抽象和封装抽象。后面提到的集成电路IC和CPU就是它的具体体现。

1959年,IBM使用穿孔卡片制造了第一台晶体管计算机7090。有32K内存,5K用于系统,27K用于用户,用户数据在内存和磁鼓之间切换。计算设备的逻辑部件,从齿轮到继电器,是一个很大的进步。电的作用是产生磁性,从继电器到电子管是很大的进步。电开始是作为电信号的功能而存在的,但电子管是玻璃管做的,所以也叫真空管,太脆弱,难以小型化,功耗太高,寿命太短。不会,晶体管则是固体半导体,真空晶体管的上述一些问题是可以克服的。

1947年12月,贝尔实验室由肖克利、巴丁和布拉顿组成的研究小组研制出了一种点接触锗晶体管,由于它的固态特性,特别适用于开关。但是电子管体积大,功耗高,发热严重,寿命短,电能利用效率低,结构脆弱,需要高压供电。

早在1952年,达默尔就意识到电子电路中分立元件和密集连接的短缺。如何降低元器件尺寸和成本,也许封装是更好的选择。

1958年,就职于德州仪器的伊利诺伊大学毕业生杰克·基尔比(Jack kilby)逐渐产生了一个天才的想法:电阻和电容(无源元件)可以用与晶体管(有源元件)相同的材料制成。此外,由于所有元件都可以由相同的材料制成,所以这些元件可以在相同的材料上原位制成,然后相互连接形成完整的电路。9月12日,基尔比开发出世界上第一个集成电路,IC)。

1959年7月,另一位科学和商业奇才罗伯特·诺伊斯,发展了二氧化硅的扩散技术和PN结的隔离技术,创造性地在氧化膜上制作铝条,集成元件和导线。

封装成组件的集成电路仍然需要相互连接以及与其他电子组件连接。早在20世纪初,为了简化电子机器的制造,减少电子零件之间的布线,降低制造成本,人们就开始研究用印刷代替布线的方法。在过去的30年里,工程师们不断提议洪都博客使用金属导体作为绝缘基板上的布线。最成功的是1925年,美国的查尔斯·杜卡斯在绝缘衬底上印制了电路图案,然后通过电镀成功地建立了用于布线的导体。直到1936年,奥地利人保罗·艾斯勒在英国发表了箔膜技术,他在一个无线电装置中使用了印刷电路板(PCB)。

印刷电路板可以通过图案电镀蚀刻出电路,也可以在高温下分层压制在一起:

PCB不需要焊接或者使用大量导线就可以量产。通过蚀刻金属线将零件连接在一起。

PCB和IC的结合可以大大减少独立元件和导线的数量,但达到同样的功能,而且更小,更便宜,更可靠。三胜!当最终产品制成后,集成电路、晶体管、二极管、无源元件(如电阻、电容、连接器等。)和各种其他电子元件将被安装在其上。通过导线连接,可以形成电子信号连接和适当的功能。从此,我们告别了传统的分立元件和传统布线。

许多早期的集成电路都是封装非常小的独立单元。为了实现更复杂的设计,需要全新的制造工艺,于是光刻技术出现了!1960年,霍尔和卡斯泰拉尼发明了平版印刷术。通过多轮光刻,可以掺杂晶体管,刻蚀电阻和电容,刻蚀微小的金属线,连接不同的晶体管。光刻技术使集成电路小型化成为可能。

一台电脑的输出可以远程作为另一台电脑的输入吗?答案是局域网或者互联网。最初的网络叫做阿帕网。1969年10月29日,阿帕网上的第一条新闻从加州大学洛杉矶分校发送到550公里外的斯坦福大学。这一天可以算是互联网的诞生日。提供输出的称为服务器,接收输出作为输入的称为客户端。物理连接由网线和光纤实现,通信规则由分层网络协议规定,逻辑连接由网络程序实现,如FTP、SMTP、Telnet、HTTP、HTML等。

1971年,英特尔公司推出了世界上第一个微处理器4004,它采用了MOS技术,这是一个里程碑式的发明。

1975年,艾德·罗伯茨(Ed Roberts)艾德·罗伯茨(Ed Roberts)设计了采用英特尔8080处理器的Altair 8800。事实上,微软的创始人比尔·盖茨和保罗·艾伦就是通过为牛郎星微型计算机编写基本编译器而发家的,牛郎星微型计算机是微软的第一个产品。时至今日,微软Visual BASIC作为BASIC的一个主要分支,仍然被微软公司积极维护着。

随着计算机系统的日益复杂,以及利用计算机速度快的优势而开发的多任务(多程序)运行模式,手工管理这些软硬件资源显然是不现实的。唯一的办法就是按程序来管理程序,也就是操作系统,比如unix、ninux、windows、ios等。操作系统本身也是许多程序的集成,这些程序相互配合管理计算机系统的软硬件,实现计算机系统的基本功能支持。

在20世纪50年代早期,应用程序和操作系统之间没有区别。电脑的能力非常有限,一次只能运行一个程序,这个程序会接管整个机器。想用电脑,想自己运行程序的程序员,必须提前预约(地位低的学生只能在半夜预约)。随着计算机变得越来越复杂,依靠非专业人员来使用它们将是低效的。因此,操作计算机的工作就交给了专业的操作人员。计算机操作员的任务是将程序输入计算机,然后将计算结果发送给相应的程序员。操作系统本来就是为了代替人类操作员完成上述工作而诞生的。随着硬件的不断发展,控制它们的操作系统也越来越完善。随着硬件变得越来越强大和复杂,需要集中更多的资源来控制它们。

操作系统通常需要管理几十个同时运行的进程或任务。有一部分是用户启动的程序,但大部分是普通用户看不到的系统任务。这些进程或任务(程序)要共享同一台计算机的CPU、内存、硬盘等输入输出设备,由操作系统统一控制和分配。

这些操作系统大多是用C或者C写的,这是一个非常复杂的系统工程。例如,Windows 7大约有1亿行代码。

该系统提供硬件(其功能由驱动程序定义)和其他软件之间的接口。有了这个接口,硬件好像能听懂人话了,程序员的编程也会变得简单。用这个圈子的博客话说,操作系统提供了一个可以构建应用的平台。

操作系统为应用程序定义了一组操作(也称为服务),并提供了不同编程语言的API,例如将数据存储到文件中或从文件中取出数据、建立网络连接、获取键盘输入、报告鼠标移动和按钮点击、绘制屏幕等等。

1979年,英特尔推出5MHz 8088微处理器,随后IBM推出全球首款基于8088的PC。渐渐的,随着电脑设备的小型化和价格的逐渐降低,电脑越来越普及。

最后,通用数字系统无处不在。在综合多领域技术进步的基础上,数字设备正朝着小尺寸、低成本、高性能的方向发展。某个领域的技术进步,比如存储密度,往往会影响到所有的数字设备。

硬件系统将大而复杂的系统分成小的、可管理的(独立创建的)组件,如软件分层、API、协议和标准。

化学中有一百多种元素,物理中有十几种基本粒子。数字计算机只有两个元素,0和1,其他一切都是从这两个元素衍生出来的。比特可以用来表示任何信息,从最简单的二进制选择,如真与假、是否、对与错,到数字、字母甚至一切。复杂的东西,比如购物,浏览,手机历史上你生活的点点滴滴,都是由简单的数据项组成,可以用更简单的形式表达,以此类推,直到一个个用比特表示。

计算机是一种操作位的数字设备。告诉处理器做什么的指令被编码成比特,通常与数据存储在同一个存储器中。改变指令可以改变计算机的行为,这就是计算机成为万能机器的原因。位的含义取决于上下文,一个人的指令可能是另一个人的数据。虽然有适合处理某些数据的特定技术,但是诸如复制、加密、压缩、错误检测等操作都可以在比特级别上执行,而不管比特代表什么。用运行通用操作系统的通用计算机取代各种特殊设备的过程将继续下去。未来很有可能会出现其他根据生物计算原理设计的处理器,或许还会出现量子计算机。然而,数字计算机将伴随我们很长一段时间。

在数字网络中,从一个处理器传输到另一个处理器的数据和指令也是位。

最后,我们可以简单地理解:

1、晶体管组合成一个逻辑门电路,门电路构成半加法器、加法器和存储电路。上亿个晶体管组合成一个集成电路完成一个功能,然后不同数量的集成电路、电子元器件、PCB板组合成更复杂的功能模块。通过不断的抽象、分层、打包,最终组合成一台机器,通过网络组合成局域网和互联网。软件也是如此。高级语言的关键字、运算符、控制结构都是由CPU指令抽象(组合)出来,然后组合成语句或语句块,再组合成简单的函数或类对象,完成一个小功能。不同的功能或类组合在一起,完成一个更大的功能,然后通过接口,实现一个更大的功能,也是不断的抽象,分层,封装。例如,windows 7有数亿行代码,包括许多相互提供接口的代码。

软件和硬件的逻辑等价。

软件可以转化为硬件。第一,是操作系统之上的应用软件。这里主要指的是编译软件。它将高级语言或汇编语言编译解释成目标程序,也就是我们所说的机器码。然后把机器码分解成微程序,微程序分解成微指令。微指令是固定长度的二进制数,然后硬件使用数字逻辑中的知识。

程序也可以固化,即把程序读入只读存储器,做成固件。对于固件来说,它模糊了软件和硬件的界限。

晶体管的连接组合可以完成一定的功能(如加法器、存储电路),也就是硬件,软件可以完成一定功能的指令序列(0,1序列)相当于晶体管开关的重新连接,因此具有新的功能;复杂的逻辑功能单元都是由简单的逻辑电路构建而成,硬件是逻辑电路的硬连接,软件是这些逻辑电路的软连接(软件的指令序列只是0和1序列)。

3我理解Eniac的编程方式是通过按压开关和连接电缆(插线)实现功能模块的组合,后续的硬件改进和程序控制的存储方式只是这种手动方式的改进,所以你也可以理解为程序及其二进制0,1序列只是实现功能模块的自动组合,或者是一种特殊的按压开关和连接电缆(插线)的方式。因此,同样的功能模块可以用硬件实现,也可以用软硬件实现,只是组合或连接的方式不同(硬连接和软连接)。

无论是纸带、磁带、键盘还是硬盘输入,都是通过一定的技术手段转换成电信号,对应逻辑开关的通/断或高低电平。在被加载到存储器中之后,它可以被CPU控制器解码以产生控制信号、读取数据、执行算术或逻辑运算并输出数据。

参考:

布莱恩·沃克尼根,这个世界是数字化的

信息技术激动人心的诞生和成长简史

集成电路光刻:半导体掺杂(晶体管)和金属层蚀刻(连接)

四。一张图是电脑主板(多层PCB印刷电路板)的主要制造过程

-结束-

组合 程序 逻辑 指令 连接

最新文章