这刚刚让我明白,如果您正在编写操作系统,那么您将在其上编写什么?在阅读1980年的微处理器基础书籍时,我问这个问题,这个问题浮现在脑海:
第一个微处理器芯片是如何编程的?
答案可能很明显,但是却困扰着我。
这刚刚让我明白,如果您正在编写操作系统,那么您将在其上编写什么?在阅读1980年的微处理器基础书籍时,我问这个问题,这个问题浮现在脑海:
第一个微处理器芯片是如何编程的?
答案可能很明显,但是却困扰着我。
Answers:
我会从字面上回答您的问题,并且主要讨论微处理器,而不是一般的计算机。
所有计算机都有某种机器代码。一条指令由一个操作码和一个或多个操作数组成。例如,用于Intel 4004(第一个微处理器)的ADD指令被编码为1000RRRR,其中1000是ADD的操作码,RRRR表示一个寄存器号。
最初的计算机程序是手工编写的,对1和0进行手工编码以创建机器语言的程序。然后将其编程到芯片中。第一批微处理器使用ROM(只读存储器);后来被EPROM(可擦可编程ROM,已被紫外线擦除)所取代;现在,程序通常被编程到EEPROM(“ Electrically ...- EPROM”,可以在片内擦除)或特定的闪存中。
现在,大多数微处理器都可以在RAM之外运行程序(这是除微控制器以外的所有东西的标准配置),但是首先必须有一种将程序加载到RAM中的方法。正如Joby Taffey在他的回答中指出的那样,这是通过Altair 8080的拨动开关完成的,Altair 8080由Intel 8080(紧随4004和8008之后)供电。在您的PC中,有一些ROM,称为BIOS,用于启动计算机并将OS加载到RAM。
机器语言很快变得乏味,因此开发了汇编程序,该程序采用助记符汇编语言并将其(通常每条指令一行汇编代码)转换为机器代码。因此,将写入ADD R1而不是10000001。
但是,第一个汇编程序必须用机器代码编写。然后可以用自己的汇编代码来重写它,并且机器语言版本是第一次使用它进行汇编。之后,程序可以自行组装。这称为自举,也可以由编译器完成-它们通常首先以汇编器(或另一种高级语言)编写,然后以其自己的语言重新编写并使用原始编译器进行编译,直到编译器可以自行编译为止。
由于第一个微处理器是在大型机和微型计算机问世之后才开发的,而且4004确实不适合运行汇编程序,因此Intel可能编写了在其大型计算机上运行的交叉汇编程序,并为以下程序翻译了汇编代码:将4004转换为二进制图像,可以将其编程到ROM中。再次,这是一种用于将编译器移植到新平台的通用技术(称为交叉编译)。
只读存储器的一种早期形式是网格,在该网格中地址将选择一行(将其拉低),而各列表示数据。每列将具有一个上拉电阻,并且每个交叉点将焊接有一个二极管以表示“零”,或者没有二极管表示“ 1”。需要的二极管数量]。可以通过焊接适当的二极管对任何所需的位模式进行“编程”。
这种设计以保险丝-PROM的形式带入了集成电路领域。本质上,保险丝PROM是与上述电路相同的电路,构建在芯片上,不同之处在于所有二极管均已安装,并且每个二极管都有一个与之串联的弱保险丝。出厂时,PROM在所有位置都读为“ 0”。但是,可以通过选择适当的地址并将适当的数据线“硬”驱动为高电平来有选择地去除二极管[注:我认为每个位可能都有自己的晶体管,而不是二极管,但是原理是相同的。
保险丝编程的PROM被半导体存储器所取代,半导体存储器通过将电荷注入内部电容器来存储位。这样的存储器不仅比熔丝PROM更为紧凑,而且如果将它们存储在紫外线透明的包装中,它们可能会被擦除并重新使用。注意,即使是所谓的“一次性可编程”存储器也几乎总是使用相同的设计,只是简单地封装在紫外线不透明的包装中。
1950年的MIT Whirlwind计算机的二极管矩阵控制存储
2005 MT15 CPU的晶体管矩阵控制存储器
操作系统是直接在处理器上运行的计算机程序。可以用任何可以编译或汇编成机器指令的语言编写。汇编和C是常见的选择。
一次将一条指令从存储区(ROM或RAM)中的一条指令加载到处理器中。
在Z3,第一可编程处理器建出机电继电器和读取从冲压片的指令。
第一台个人计算机Altair 8800通过拨动开关进行编程。
要了解如何根据数字逻辑构造处理器,请参阅https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners
有关历史记录,请参见http://en.wikipedia.org/wiki/History_of_computing_hardware
这是关于真正的旧计算机的一些信息:
据我所知,在过去,您有一个用于对它们进行编程的大型计算机前面板。基本上,这些计算机中的每个存储单元都连接到交换机。您需要为内存供电,然后使用开关在每个单元中设置数据。这样,您可以将程序一点一点地输入到计算机的内存中。然后,您将设置程序的起点并开始执行。
随着技术的进步,开发了所谓的引导加载程序。它们是简短的程序,其全部目的是从计算机的内存中启动另一个程序。一点一点地输入程序的问题(后来又使用八进制数和后来的十六进制数输入多个)是非常慢的,并且操作员在加载程序时很可能会犯错。因此,短程序将用于加载存储在计算机内存中的较大程序。随着时间的流逝,必须手工输入的部分代码减少了,在现代计算机中,我们经常用某种ROM甚至闪存来编写引导加载程序。
几年前,我遇到了一个微控制器程序员,该程序员具有4位数字的7段显示器和一个十六进制键盘。我确定这没有板载微控制器,并且允许您一次直接输入一个字节的机器代码。
因此,这将使您能够(痛苦地)手动编译一份操作码列表,并将其输入芯片。
我不知道是否仍然可以买到它们,但是我猜想,当微控制器相对较新时,就会使用类似的东西。