延遲存儲電子自動計算器

电子延迟存储自动计算器（英文：Electronic Delay Storage Auto-matic Calculator、EDSAC）是英国的早期计算机。1946年，英国剑桥大学数学实验室的莫里斯·威尔克斯教授和他的团队受冯·诺伊曼的First Draft of a Report on the EDVAChttp://www.virtualtravelog.net/entries/2003-08-TheFirstDraft.pdf 的启发，以EDVAC为蓝本，设计和建造EDSAC，1949年5月6日正式运行，是世界上第一台实际运行的存储程序式电子计算机EDVAC是第一个设计为冯·诺伊曼结构的电子计算机，但直到1952年该计算机才首次正式运行。。

项目的投资方是英国的J. Lyons & Co. Ltd.，该公司后来推出基于EDSAC设计的第一代商业应用电子计算机。

 物理组件 
EDSAC使用了约3000个真空管，排在12个柜架上，占地5×4米，功率消耗12Kw  Martin Campbell-Kelly: Programming the EDSAC, IEEE Annals of the History of Computing, Vol 2(1), 1980.。

 存储器 
使用水银延迟线作存储器，分布在32个槽中，每个槽5英尺长，里面包含32个内存位置，共1024个位置。 Report of a Conference on High Speed Automatic Calculating-machines, University Mathematical Laboratory, Cambridge, June 1949; M.R. Williams与M. Campbell-Kelly的修改版于1989年由MIT/Tomash historical series重印（报告也包含了EDSAC与曼彻斯特与美国的同时期电子计算机的比较报告。）Peter Robinson and Karen Sparck Jones: EDSAC 99 commemorative booklet, University of Cambridge Computer Laboratory, April 1999. 在线版本 .

建造时只实现了一半，512个字，第二组于1952年添加.
1952年增加一个磁带存储，但实际使用中不能良好工作。Karen Sparck Jones: Brief informal history of the Computer Laboratory 在线版本 

 输入输出 

输入采用5路的穿孔纸带，使用电子纸带读入机，速度为每秒个字符，1949年10月改进为每秒16字符，1950年使用光电阅读器，达到50字符每秒。 

输出使用电传打字机，速度字符每秒，1951年添加一个16字符每秒的纸带打孔机 

另外，EDSAC可以外接阴极射线管（CRT），可以用来观察寄存器的值。

 体系结构 
EDSAC的原始设计基于EDVAC，概念上是一台十分简单的机器，这是它的一个良好特征，与1960-1970年代的RISC体系很相似。

包含5部分：运算器（ALU）、控制器、存储器、输入和输出。运算器和控制器现在一般合称CPU。

工作在500kHz M.V. Wilkes, Memoirs of a Computer Pioneer, MIT Press, 1985.，平均每秒运行650指令
 内存 
共1024字（word），每字18位（bit）。但一般只能使用17bit，第一个bit由于电路的建立时间（set-up time）而不能使用。

存放指令时，包含如下结构：
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
|-
| style="border: 1px solid;" |      5     
| style="border: 1px solid;" |  1 
| style="border: 1px solid;" |           10          
| style="border: 1px solid;" |  1 
|-
|指令代码
|保留
|内存地址
|长度
|-
| colspan="6" |指令格式
|}
5bit的指令代码，11bit内存地址（由于EDSAC内存只有1024，所以实际有1bit保留），余下1bit在某些指令中，用于指示操作子是单字还是双字（word）。

存放数据时，EDSAC采用二进制补码，可表示正负整数和正负真分数。
单字17bit，其中第一个bit用于符号位；双字35bit，此时，第二个字可用满18bit。

如下图所示：
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
|-
| style="background:yellow;border: 1px solid;" |   
| style="border: 1px solid;" |           16          
|-
| colspan="6" |a.短整数
|}
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
|-
| style="background:yellow;border: 1px solid;" |   
| style="border: 1px solid;" |           16          
| style="background:green;border: 1px solid;" |   
| style="border: 1px solid;" |           17            
|-
| colspan="6" |b.长整数
|}
隐含的小数点在最低有效位上
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
|-
| style="background:yellow;border: 1px solid;" |   
| style="border: 1px solid;" |           16          
|-
| colspan="6" |c.短分数
|}
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
|-
| style="background:yellow;border: 1px solid;" |   
| style="border: 1px solid;" |           16          
| style="background:green;border: 1px solid;" |   
| style="border: 1px solid;" |           17            
|-
| colspan="6" |d.长分数
|}
隐含的小数点在符号位后面。
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
| style="background:yellow;border: 1px solid;" |   
| style="border:0 solid;"| 表示符号位
| style="background:green;border: 1px solid;" |   
| style="border:0 solid;"| 表示中间位
|}

 寄存器 
EDSAC的处理器包含5个基本寄存器：
 指令地址寄存器
 顺序存储器
 被乘数寄存器
 乘数寄存器
 累加器
EDSAC和同时代的计算机均没有。EDSAC模拟器的文档  马丁·坎贝尔-凯利编写

 指令集 
平均每条指令运行时间1.5ms，乘法4.5ms，软件除法大约需要200ms。

完整的指令集可以在这里的p41找到。

 转移指令
转移指令只有E-和G-（分别表示累加器的符号位为0和1时转移），而没有无条件转移。因此无条件转移就需要使用两条指令；同样的原因，使得判断两个数相等需要八条指令。 1952年，指令集添加了无条件转移，但许多程序和子程序库需要重写。
 算术指令
加法指令将存放的数据按整数处理。而乘法指令将数据解释为真分数，两个17bit的分数相乘得到一个35bit的分数存入累加器。
EDSAC缺少逻辑运算指令，只有AND，也缺少字符处理指令。

 软件 
 操作系统 
操作系统，或者称之为初始化指令，使用了31条指令，存放在机械结构的只读存储器中。这些指令将纸带上的程序读入内存，然后运行。

第二个版本在1949年8月安装，占用了41条指令，使得子程序的重定位和协作变得简单易用（D.J. Wheeler的重要发明）。
 应用软件 
1949年5月6日，第一个在EDSAC程序是打印0-99的平方表。

EDSAC的非凡的特征是提供了大量的子程序。到1951年，EDSAC含有87个子程序，涵盖：
浮点运算、复数运算、检测、除法、幂、微分方程、特殊函数、幂级数、对数、正交、输入输出、n次方根、三角函数、向量和矩阵、循环（模拟repeat，while和for）。

 EDSAC的应用 
EDSAC早期应用集中在解决气象学、遗传学和X光结晶学等方面的问题。
 1951年，Miller和Wheeler利用EDSAC发现了一个当时最大的79位素数。
 1951年，A.S. Douglas开发出OXO（井字游戏），输出到阴极射线管，是最早的电子计算机游戏。
 1960年代，EDSAC用于收集椭圆曲线解的数值现象，这引出了贝赫和斯维讷通-戴尔猜想。

 后续发展 
EDSAC的后继机型EDSAC2于1958年投入使用。EDSAC2引入了微程序（microprogramme）和的概念。

 参考 
 The Preparation of Programs for an Electronic Digital Computer 莫里斯·威尔克斯, 大卫·惠勒和斯坦利·吉尔, Addison-Wesley, 第一版, 1951年


 相关条目 
 莫里斯·威尔克斯
 EDVAC
 冯·诺伊曼结构

 外部链接 

 EDSAC模拟器 英国华威大学计算机科学系马丁·坎贝尔-凯利开发
 EDSAC50周年  
 Nicholas Enticknap and Maurice Wilkes, Cambridge's Golden Jubilee  

 脚注 

Y
Y