打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
我自己造的计算机我做主
姜咏江
我在2006年自己造的计算机,是从器件设计开始,设计制造的有52条指令的计算机(见图)。别小瞧它!这可是一台通用计算机,只不过是运行在二进制层面上的。所以只有相当水平的计算机专业人士才可以认可它。
这是一个8位的计算机,内有求255以内自然数阶乘的程序。255的阶乘结果有多大?告诉你,有210个字节!这个计算机能够丝毫不差的将结果算出来,而且能够用走马灯和液晶屏显示给你看。这个计算机的指令系统在后面,为了用户能够方便地使用这台计算机,我还专门设计了编辑编译软件。不过这台计算机的存储器太小,编辑编译的工作还得在你手头的电脑上完成。不过这丝毫不会降低你深入理解计算机的核心。当你手动开关和按钮,将编译好的二进制程序送入这台计算机,并且很快就会得到结果的时候,一定会很兴奋。我当时的兴奋劲儿,你也许能够理解,因为这是我自己制造的计算机。
一晃,十年的时间过去了。利用这台计算机的硬件,我当时还制造了动态计算机PMC362。针对动态计算机的设计,当时我还申请了国家专利,然而。。。
除了每年我给20多个研究生讲自己如何制造计算机,或者有一些读了我的《自己设计制作CPU与单片机》一书的人,中国的计算机业界却是无动于衷,大家的眼睛总是盯着西方的高人嘛,因而我想推广动态计算机的设计在国内十分艰难。不过国外倒是有人找过我,告诉我,我的专利已经失效等,让我明白了权利。不论如何,研究给我带来的兴趣,远远超过了其它。自娱自乐是每个科研人独享的乐趣不是?
我设计制造的这台计算机用于研究生或者本科生教学最好不过,因为通过它,你可以从无到有,从硬件到软件,系统地学习和掌握计算机的全部理论知识。现在大学计算机专业的教学课程设置实在是不敢恭维,最重要是缺乏系统性,将一些完全可以在使用中自学的东西拿到大学课堂上讲,实在是浪费学生的生命!一句话,中国的大学缺少真正的计算机科学教育家。我在十年前这样说过,现在还这样说。没有自己设计制造过计算机的人,成不了真正的计算机专家。
计算机科学是一个非常系统的体系,它和计算机应用是截然不同目标的东西。将计算机应用做为计算机专业的主要内容,真不知道那些专家们是如何考虑的。中国要成为世界强国,实现中华民族伟大复兴,在计算机科学最核心的领域不能走在前面,不去造就一大批未来的人才,在如此信息化的人类时代,恐怕成为空谈是有可能的。
说远了。还是劝有心人,自己去制造一台计算机试试,你的收获会无比的大。
检验程序运行的例子
call 乘积子程序地址;call 自然数和子程序地址;call转十进制子程序地址;call 阶乘子程序地址。
它们对应的具体输入是:88 300E 80 (调用8位无符号整数乘积);88 70 0F 80 (调用小于22的自然数和程序);88 92 3F 80 (调用将8位正十六进制数化成十进制数程序(液晶版));88 60 0E 80(调用255以内阶乘,阶乘结果的最后2位是十六进制数是字节数)。‘88’是call的编码,后面十六进制的16位地址输入时低字节在前,高字节在后,‘80’是程序输入结束代码。
表1  PMC教学计算机指令集
序号
功能设想
英文助记符
操作码
次数
操作码
(2进制)
1
把R数据存储单元内容送到累加器da
LDA  R
81
3
10000001
2
数据存储单元R的内容与累加器da的内容相加结果送da
ADD  R
82
3
10000010
3
用累加器da的内容减去数据存储单元R的内容结果送da
SUB  R
83
3
10000011
4
将R存储单元内容输出
OUT  R
84
3
10000100
5
跳到程序存储器的R单元取指令执行
JMP  R
85
3
10000101
6
如果累加器da的值是0则跳到程序存储器的R单元取指令
JZ   R
86
3
10000110
7
如果累加器da的值为负则跳到程序存储器的R单元取指令
JN   R
87
3
10000111
8
调子程序
CALL R
88
3
10001000
9
输入数据到数据存储器的R存储单元
IN   R
89
3
10001001
10
将累加器da的内容送到数据存储器存储单元R
STR  R
8A
3
10001010
11
将数N送到累加器da
SDA  N
8B
2
10001011
12
将累加器da的内容入栈
PUSH
4C
1
01001100
13
将堆栈的内容送到累加器da
POP
4D
1
01001101
14
从子程序返回指令
RET
4E
1
01001110
15
将PTR的内容加1
INC
4F
1
01001111
16
将PTR的内容减1
DEC
50
1
01010000
17
将累加器da的内容送x寄存器
DATX
51
1
01010001
18
将累加器da的内容送y寄存器
DATY
52
1
01010010
19
将寄存器x、y的内容互换
XCHY
53
1
01010011
20
x的内容送da
XTDA
54
1
01010100
21
y的内容送da
YTDA
55
1
01010101
22
将累加器da的内容送到ptr低8位
DALP
56
1
01010110
23
将ptr的低8位内容送到累加器da
PLDA
57
1
01010111
24
将累加器da复位为0
ZERO
58
1
01011000
25
将数据输入到ptr指示的程序存储单元
INP
59
1
01011001
26
如果除数为0则跳转到程序的R单元指令执行
JERR R
9A
3
10011010
27
如果输入的数据是h80则跳转到程序的R单元指令执行
JEND R
9B
3
10011011
28
左移一位是1跳转到R单元指令执行
JL   R
9C
3
10011100
29
右移一位是1跳转到R单元指令执行
JR   R
9D
3
10011101
30
输入缓冲区空暂停
STPK
5E
1
01011110
31
求da值的按位逻辑非,结果在da
LNOT
5F
1
01011111
32
Da与R存储单元的逻辑与放入da
LAND R
A0
3
10100000
33
Da与R存储单元的逻辑或放入da
LOR  R
A1
3
10100001
34
Da与存储单元R的逻辑异或放入da
LXOR R
A2
3
10100010
35
将da左移一位送x,da不变
SHL
63
1
01100011
36
将da右移一位送x,da不变
SHR
64
1
01100100
37
执行下一条指令
NOP
65
1
01100101
38
将累加器da的内容送到指针ptr高8位
DAHP
66
1
01100110
39
将指针ptr的高8位内容送到累加器da
PHDA
67
1
01100111
40
输入数据送到ptr指示的数据存储单元
INPD
68
1
01101000
41
将da的值送到ptr指示单元
DAPD
69
1
01101001
42
将ptr指示单元内容送da
DPDA
6A
1
01101010
43
有符号da与R单元相乘,结果低字节送da,高字节送x
MULS R
AB
3
10101011
44
累加器da与R单元相除,商送da,余数送x
DIVI R
AC
3
10101100
45
累加器da与R单元带进位加,结果送da,进位保留
ADDC R
AD
3
10101101
46
累加器da与R单元带进位减,结果送da,进位保留
SUBC R
AE
3
10101110
47
无符号da与R单元相乘,结果低字节送da,高字节送x
MULT R
AF
3
10101111
48
无符号da×R+x,本位结果送da,进位字节送x
MADD R
B0
3
10110000
49
进位为1跳转
JCRY R
B1
3
10110001
50
清除进位
NCTY
B2
1
10110010
51
停止程序执行
STP
7F
1
01111111
52
程序输入结束
END
80
1
10000000
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CH04 MARIE:简单计算机模型
第6章中央处理器(1)
系统集10
汇编和反汇编
单片机入门
国产老计算机(三):DJS-110
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服