第一个微处理器是如何编程的?


44

这刚刚让我明白,如果您正在编写操作系统,那么您将在其上编写什么?在阅读1980年的微处理器基础书籍时,我问这个问题,这个问题浮现在脑海:

第一个微处理器芯片是如何编程的?

答案可能很明显,但是却困扰着我。


6
如果可能允许我插入自己的作品,请参阅我对“ Linux内核如何进行编译?”的回答。堆栈溢出。除非您了解一般原理,否则答案是不明显的,这时您会说“嗯,当然...”
dmckee 2011年

@dmckee但是它仍然没有回答这个问题,它怎么知道该怎么做:)谁告诉使用开关的计算机该怎么办?我想要更多细节。
院长

4
那么问题是关于设计第一个芯片的启动顺序吗?好吧,这当然是这个站点上的一个问题,但是它的进行就像设计一个由组件构建的数字逻辑一样。...让它以已知状态启动,然后提供可做有用事情的输入。我会留给其他人提供详细的答案,因为我对此表示怀疑,但是您确实知道第一台计算机是在真空管中实现的,对吗?然后,在第一个微芯片之前,就出现了单个晶体管的产生。工程师已经知道他们在做什么。
dmckee 2011年

1
当然,在非微处理器上。
user253751'3

Answers:


56

我会从字面上回答您的问题,并且主要讨论微处理器,而不是一般的计算机。

所有计算机都有某种机器代码。一条指令由一个操作码和一个或多个操作数组成。例如,用于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中。再次,这是一种用于将编译器移植到新平台的通用技术(称为交叉编译)。


很棒的回答,tcrosley!纠正了有关EEPROM与EPROM的花絮。+1
tyblu 2011年

1
而且,如果您真的想在没有其他计算机的情况下(除了您的大脑)对微控制器进行编程,则可以通过构建将程序直接馈入其中的电路来实现。如果是通过jtag编程的,则可以翻转开关以模仿对设备编程所需的jtag命令。如果它使用外部ram,则可以使用大量的多路分解器和高或低的大量电阻阵列来表示指令的位(并且可能使用低时钟速度,因为您的硬件会很慢)。
nategoose 2011年

3
@tyblu:我敢肯定某些保险丝-PROM早于EPROM。ROM的最简单形式实质上是一个选择性填充的二极管阵列(在早期,二极管实际上会焊接到网格上以表示位的一种极性;缺少的二极管则表示另一种极性)。保险丝-PROM将二极管阵列放置在芯片上,但是具有行晶体管,该行晶体管比交叉点处的二极管强得多。可以通过设置地址线,然后用力击打连接到要删除的二极管的数据线来有选择地删除二极管。
超级猫

@tyblu:请注意,保险丝PROM在电气上不像现代的OTPROM,后者只是非窗口封装的EPROM芯片。EPROM / OTP器件通过对某些晶体管的栅极进行充电来编程(这些晶体管的电容足够大,泄漏几乎没有,可以无限期地保持电荷)。相比之下,通过物理破坏与有害二极管的连接来对保险丝-PROM芯片进行编程。
超级猫

1
从分立晶体管的
年代

23

最初,程序是写在纸上的,然后转换为计算机可用的任何输入方法。从第一台计算机上的旋钮,开关和跳线开始,到打孔卡,再到键盘/面板。

下图显示了当今真正的程序员使用的是什么:


10
该死的,emacs ..
tyblu 2011年

6
我为程序员编程。(还有那些我为程序程序员编程的程序员。)
Mateen Ulhaq 2011年

4
我做自己的程序员。
W5VO

16

好吧,当时我是在Micros最初问世的时候,我们在大型机和Mini上编写了交叉汇编器和编译器,然后将它们引导到8位硬件上,直到他们有足够的本地存储空间来使用它们,人们才真正开始在Micros上构建编译器/汇编器。使它有用


14

只读存储器的一种早期形式是网格,在该网格中地址将选择一行(将其拉低),而各列表示数据。每列将具有一个上拉电阻,并且每个交叉点将焊接有一个二极管以表示“零”,或者没有二极管表示“ 1”。需要的二极管数量]。可以通过焊接适当的二极管对任何所需的位模式进行“编程”。

这种设计以保险丝-PROM的形式带入了集成电路领域。本质上,保险丝PROM是与上述电路相同的电路,构建在芯片上,不同之处在于所有二极管均已安装,并且每个二极管都有一个与之串联的弱保险丝。出厂时,PROM在所有位置都读为“ 0”。但是,可以通过选择适当的地址并将适当的数据线“硬”驱动为高电平来有选择地去除二极管[注:我认为每个位可能都有自己的晶体管,而不是二极管,但是原理是相同的。

保险丝编程的PROM被半导体存储器所取代,半导体存储器通过将电荷注入内部电容器来存储位。这样的存储器不仅比熔丝PROM更为紧凑,而且如果将它们存储在紫外线透明的包装中,它们可能会被擦除并重新使用。注意,即使是所谓的“一次性可编程”存储器也几乎总是使用相同的设计,只是简单地封装在紫外线不透明的包装中。

两名男子指着一个大的二极管矩阵 1950年的MIT Whirlwind计算机的二极管矩阵控制存储

带有小型SMD晶体管的晶体管矩阵 2005 MT15 CPU的晶体管矩阵控制存储器


希望您不要介意我对您的帖子进行的小调整。
davidcary 2011年

7

我不确定是否有人解决了OP的真正问题,这似乎是“计算机如何知道如何入门?” ,所以我会努力解决的。

从类推开始。“晶体管如何知道如何入门?” 当然,它不是,它只是根据物理原理工作,并且工程师构建电路以使其在已知状态下启动。

计算机知道如何入门,因为它们是电路(当然非常复杂),并且被构建为以特定状态启动。在现代机器中,该状态可能是主总线将部分地址空间重新映射给用户的主板上的ROM作为低内存的状态(该ROM已用BIOS刻录)。在第一代计算机中,初始状态可能已被CPU暂停,程序计数器为零,并且内存切换子系统处于活动状态。


6

操作系统是直接在处理器上运行的计算机程序。可以用任何可以编译或汇编成机器指令的语言编写。汇编和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


5

这是关于真正的旧计算机的一些信息:

据我所知,在过去,您有一个用于对它们进行编程的大型计算机前面板。基本上,这些计算机中的每个存储单元都连接到交换机。您需要为内存供电,然后使用开关在每个单元中设置数据。这样,您可以将程序一点一点地输入到计算机的内存中。然后,您将设置程序的起点并开始执行。

随着技术的进步,开发了所谓的引导加载程序。它们是简短的程序,其全部目的是从计算机的内存中启动另一个程序。一点一点地输入程序的问题(后来又使用八进制数和后来的十六进制数输入多个)是非常慢的,并且操作员在加载程序时很可能会犯错。因此,短程序将用于加载存储在计算机内存中的较大程序。随着时间的流逝,必须手工输入的部分代码减少了,在现代计算机中,我们经常用某种ROM甚至闪存来编写引导加载程序。


4
在“前面板”机器中,例如较早的S-100系统,这些开关可让您控制系统总线。一键切换可让您暂停处理器。在处理器挂起的同时,您可以手动将地址放置在地址总线上(通过开关),将数据放置在数据总线上(更多开关),然后手动在总线上引起写周期(另一个开关),或者一个读取周期,将数据拉回到8个单独的LED并读取二进制数据,等等。这样做,您可以在RAM中存储足够的机器代码,不挂起处理器,然后从那里去。
JustJeff 2011年

4

几年前,我遇到了一个微控制器程序员,该程序员具有4位数字的7段显示器和一个十六进制键盘。我确定这没有板载微控制器,并且允许您一次直接输入一个字节的机器代码。

因此,这将使您能够(痛苦地)手动编译一份操作码列表,并将其输入芯片。

我不知道是否仍然可以买到它们,但是我猜想,当微控制器相对较新时,就会使用类似的东西。


1
听起来可能像KIM-1或Cosmac ELF,它们都包括微处理器(MOS 6502和RCA [CD] 1802)。KIM:oldcomputers.net/kim1.html ELF:cosmacelf.com
mctylr 2011年

可能像mctylr所说的那样。在这种类型的机器中,ROM中通常有一个小的“监视”程序。当您输入字节与键盘,它实际上是6502(或8085或其他)阅读键,修改内存,更新LED等
JustJeff

1

最初的微处理器将在不基于微处理器的现有计算机的帮助下进行编程。在一个芯片上生产出第一个CPU之前,已经存在由分立组件而不是微处理器构建的高级计算机体系结构。看一下,例如,IBM 360。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.