我是姜咏江。初次浏览你的blog,很欣赏你的气魄。现在计算机设计已经进入了软硬件一体化的时代,个人在家里就可以设计制作计算机了。中国人要改变在世界上落后的状态,将本来应属于我们的计算机财富掌握在自己手中,要在硬件上多下功夫。能用C++进行程序设计,就有能力进行计算机的CPU,乃至整机的设计。本想看你N!的文章,不知哪里去了。给你一个用我自己设计的计算机来求255以内阶乘的汇编程序,255的阶乘结果长度要有210个字节!下面是这个程序,其中标号、代码、代号是程序,后两列是我设计的指令集,不是解释。
我在j-pmc.blog.sohu.com有设计文章,有兴趣一块讨论。
序号 标号 代码 代号 功能设想 助记符
1 start stpk 把R数据存储单元内容送到累加器da LDA R
2 in n 数据存储单元R的内容与累加器da的内容相加结果送da ADD R
3 sda 1 用累加器da的内容减去数据存储单元R的内容结果送da SUB R
4 str i 将R存储单元内容输出 OUT R
5 str k 跳到程序存储器的R单元取指令执行 JMP R
6 str p 如果累加器da的值是0则跳到程序存储器的R单元取指令 JZ R
7 str one 如果累加器da的值为负则跳到程序存储器的R单元取指令 JN R
8 str ii 调子程序 CALL R
9 sda 2 输入数据到数据存储器的R存储单元 IN R
10 str two 将累加器da的内容送到数据存储器存储单元R STR R
11 zero 将数N送到累加器da SDA N
12 datx 将累加器da的内容入栈 PUSH
13 dahp 将堆栈的内容送到累加器da POP
14 sda p 从子程序返回指令 RET
15 dalp 将PTR的内容加1 INC
16 ncry 将PTR的内容减1 DEC
17 mult dpda 将累加器da的内容送x寄存器 DATX
18 str pw0 将累加器da的内容送y寄存器 DATY
19 lda k 将寄存器x、y的内容互换 XCHY
20 madd pw0 x的内容送da XTDA
21 dapd y的内容送da YTDA
22 xtda 将累加器da的内容送到ptr低8位 DALP
23 str m 将ptr的低8位内容送到累加器da PLDA
24 lda i 将da复位为0 ZERO
25 sub ii 将数据输入到ptr指示的rom/ram存储单元 INP
26 jz next 如果除数为0则跳转到rom/ram的R单元指令执行 JERR R
27 lda i 如果输入的数据是h80则跳转到rom/ram的R单元指令执行 JEND R
28 add one 左移一位是1跳转到R单元指令执行 JL R
29 str i 右移一位是1跳转到R单元指令执行 JR R
30 inc 输入缓冲区空暂停 STPK
31 jmp mult 求da值的按位逻辑非,结果在da LNOT
32 next zero Da与R存储单元的逻辑与放入da LAND R
33 addc m Da与R存储单元的逻辑或放入da LOR R
34 jcry mx2 Da与存储单元R的逻辑异或放入da LXOR R
35 jz goon 将da左移一位送x,da不变 SHL
36 inc 将da右移一位送x,da不变 SHR
37 dapd 执行下一条指令 NOP
38 lda ii 将累加器da的内容送到指针ptr高8位 DAHP
39 add one 将指针ptr的高8位内容送到累加器da PHDA
40 str ii 输入数据送到ptr指示的数据存储单元 INPD
41 jmp goon 将da的值送到ptr指示单元 DAPD
42 mx2 inc 将ptr指示单元内容送da DPDA
43 dapd 有符号da与R单元相乘,结果低字节送da,高字节送x MULS R
44 inc 累加器da与R单元相除,商送da,余数送x DIVI R
45 sda 1 累加器da与R单元带进位加,结果送da,进位保留 ADDC R
46 dapd 累加器da与R单元带进位减,结果送da,进位保留 SUBC R
47 lda ii 无符号da与R单元相乘,结果低字节送da,高字节送x MULT R
48 add two 无符号da×R+x,本位结果送da,进位字节送x MADD R
49 str ii 进位为1跳转 JCRY R
50 goon lda k 清除进位 NCTY
51 sub n 停止程序执行 STP
52 jz disp 程序输入结束 END
53 zero
54 dahp
55 sda p
56 dalp
57 lda k
58 add one
59 str k
60 sda 1
61 str i
62 ncry
63 zero
64 datx
65 jmp mult
66 disp zero
67 datx
68 disply dpda
69 str pw0
70 out pw0
71 call 3872
72 lda ii
73 sub one
74 jz exit
75 str ii
76 dpda
77 datx
78 dec
79 jmp disply
80 exit ret