中国人独立自主设计的第一台计算机——107电子数字计标机
107数学计算机是一台小型的串联通用电子管计算机。数为二进制的,定点,数的范围在+1与-1之间。数长32位,其中最左一位为符号位。符号位为0时表示正数,为1时表示负数。数的表示采用补码系统。

中科大数学系师生在装配和试运行快速数字电子计算机
六十年前,从美国获得教授职位后回国的华罗庚先生和刚刚从英国爱丁堡大学博士毕业回国的夏培肃先生,于1958年在中国科大建校之始,在应用数学和计算技术系创办了计算机专业,使中国科大成为国内最早拥有计算机专业的大学之一。华罗庚出任应用数学和计算技术系首任系主任,夏培肃出任第一任计算机教研室主任。
夏培肃先生是我国计算机事业的奠基人之一,早在1952年她参加了由华罗庚教授组织的中国最早从事计算机研究的“三人小组”。1956-1959年,她在中科院计算所和中国科大先后主持举办了四期全国计算机培训班,编写了国内最早的《计算机原理》教材,为新中国培养了第一批从事计算机教育和科研人才,也为中国科大培养了第一代计算机专业教师,被誉为“中国计算机之母”。1960年,她主持研制成功了中国第一台自主设计的通用电子计算机──107机,也是中国科大第一台教学和科研用计算机(校内设备代号KD-1)。
早在1953年,华罗庚所长领导的我国第一个计算机研究小组就提出了研制我国自己的计算机的初步方案设想,其规模与当时美国和英国的EDVAC和EDSAC计算机相当,1954年开始了设计工作。后来由于实施国家“十二年学科发展规划”中提出的仿制前苏联计算机而中断。1958年计算所举办第三期计算机训练班时,又重新开始研究工作并取名为107计算机。训练班结束后,成立了107计算机小组,继续研制107计算机并于1959年底在计算所完成加工和调试,1960年初在科大开始运行算题。1970年随科大下迁至合肥,1974年被拆除。先后参加107计算机研制和改进的人员共有30余人,除计算所科研人员和科大教师外,还有参加第三期计算机训练班的外单位学员。
107计算机共有六个机柜,其中中央处理机、磁芯存储器和电源各占用两个,另外还有作为输入输出设备的五单位发报机一台、电传打印机一台和控制台一个。全机共使用电子管1280余只,功耗6KW(不包括通风),机房占地面积约60M2。107采用串行运算方式,机器主频62.5千赫,平均每秒运算250次。从上述指标看,它具有那样大的身躯,才实现那样低的运算速度,和今天相比反差竟有如此之大,但这是真实的历史记录。
107计算机研制成功后,科大又进行了存储器和逻辑设计方面的改进,它们主要是:磁心存储器结构和读写控制方案改进、快速乘法运算线路改进、用循环右移操作实现左移操作改进、采用并—串方式取指令改进等,改进后的107计算机,在工作稳定性和运算速度方面都有显著提高。
在107计算机上,开发设计有系统管理程式和应用服务程序100多个,包括检查程序、错误诊断程序、标准子程序、标准算法应用程序以及汇编语言解释程序等。
107计算机主要为教学服务,提供学生做“原理”课上机调试实验和“程序设计”课编程上机实习。除计算机专业学生外,还承担了力学系、自动化系和地球物理系的教学实习任务。此外还接受一些外单位的计算任务,包括潮汐预报计算、原子反应堆射线能量分布计算、原子核结构理论中的矩阵特征值及特征向量计算、功率谱计算、延迟线参数计算、爆破波传播计算、自动控制中的最佳控制计算、建筑工程中的震动曲线计算等。
科大和计算所合作研制成功107计算机,其后又将107计算机成功地应用于教学和科研工作,这是全面落实“全院办校、所系结合”办学方针和实行教学与科研结合所取得的重要成就。在校庆五十周年之际,科大人深情地感谢这些开拓创业的老校友,特别是那些校外志愿者,他们为科大计算机教育的创建和发展默默无闻地做出了无私奉献。
指令为一地址的,每条指令长16位,每个存储单元内存放两条指令。指令中的最左4位为操作码,其余为地址码。地址码的最后一位表示左右,即表示本条指令存在存储单元的前16位或后16位。
操作共16种,它们是:接收、发送、按位求补、按位加法、逻辑加法、逻辑乘法、加法、溢出不停机的加法、减法、乘法、除法、无条件转移、条件转移、非零转移、打印及停机。
运算器及控制器所采用的主要元件为电子管及晶体二极管。存储器是容量为1024的磁心存储器。输入设备为五单位发报机。输出用电传打字机。电源用硒整流片及锗二极管整流,用电子管稳压。
这个计算机包括5个机柜,其中运算器,控制器及输入输出的控制线路共占用2个,存储器1个,电源2个。另外,控制台、发报机及电传打字机各一台。
令指令的地址为A。各种操作的含义说明如下:
⑴ 接收:表示地址为A的存储单元内的数送到计算机器中去。
⑵ 发送:表示运算器中的数送到地址为A的存储单元内去。
⑶ 接位求补(即接收反码):表示第A存储单元内的数的反码送到运算器中去。
⑷ 接位加法:表示运算器内的数与第A存储单元内的数进行按位加法,结果在运算器中。
⑸ 逻辑加法:表示运算器内的数与第A存储单元的数进行按位的逻辑加法,结果在运算器中。
⑹ 逻辑乘法:表示运算器内的数与第A存储单元内的数进行按位的逻辑乘法,结果在运算器中。
⑺ 加法:表示运算器内的数与第A存储单元内的数相加,和数在运算器中。当和数等于、大于+1或小于-1时,机器自动停止工作。
⑻ 溢出不停机的加法:这条指令的操作与加法指令相同,但当计算机结果有溢出时,加法指令要停机,而这条指令不停机。
⑼ 减法:表示运算器内的数减去第A存储单元内的数,差数在运算器中。当差数等于、大于+1或小于-1时,机器自动停止工作。
⑽ 乘法:表示运算器内的数与第A存储单元内的数相乘,乘积在运算器内。
⑾ 除法:表示运算器内的数被第A存储单元内的数除,商在运算器内。
⑿ 无条件转移:表示下一次要执行的指令的地址为A。
⒀ 条件转移:令本条指令的地址为K。当运算器内的数的符号位为0时,下一次执行第K+1条指令;当运算器内的符号为1时,下次执行第A条指令。
⒁ 非零转移:令本条指令的地址为K,当运算器内的数为0时,下一次执行第K+1条指令;当运算器内的数不为0时,下次执行第A条指令。
⒂ 打印:将运算器内的数打印到纸上;印出的结果为十进制的数。打印完毕后。运算器内的数被破坏。
⒃ 停机:表示计算机自动停止工作。
107计算机模拟器教程
| #bit | 含义 | 汇编记号 |
| 0000 | 接收 | REV rev |
| 0001 | 与 | AND and |
| 0010 | 加法 | ADD add |
| 0011 | 减法 | SUB sub |
| 0100 | 乘法 | MUL mul |
| 0101 | 除法 | DIV div |
| 0110 | 可溢出加法 | ADDD addd |
| 0111 | 或 | OR or |
| 1000 | 取反 | NOT not |
| 1001 | 发送 | SEND send |
| 1010 | 无条件转移 | JMP jmp |
| 1011 | 条件转移 | JLZ jlz |
| 1100 | 非零转移 | JNZ jnz |
| 1101 | 打印 | OUT out |
| 1110 | 停机 | HALT halt |
| 1111 | 异或 | XOR xor |
| 程序段 | |
| .code | //标志程序段的开始 |
| XOR #1222 | //代码部分 |
| .data | //标志数据段的开始 |
| #0.1203 | |
| 地址表示 | |
| *1011 | //二进制 |
| $1024 | //八进制 |
| #1024 | //十进制 |
| %1024 | //十六进制 |
| 数据表示 | //107计算机的数据只能为小数 |
| *0.1101 | //二进制 |
| $0.766 | //八进制 |
| #0.982 | //十进制 |
| %0.fa | //十六进制 |
| #-0.1 | //负数 |
| #+0.1 | //正数,+可省 |


