计算机那点事儿~

软件和网站开发以及相关技术探讨
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#61

帖子 ubuntu777 » 2015-10-04 21:46

巩固一下我们学到的知识。把我们第一次用助记符编的程序转为机器码。

程序如下:

内存地址00000助记符

0H0000000000LDA 9H
1H0000000000ADD AH
2H0000000000ADD BH
3H0000000000SUB CH
4H0000000000OUT
5H0000000000HLT

就是把内存地址和助记符转成相应的由0和1组成的代码,这样就可以用拨开关的方法把编好的程序输入内存。要知道内存地址的二进制形式,也要知道相应地址中助记符指令的二进制形式。

内存地址000000000指令

000000000000000000 1001
000100000000000001 1010
001000000000000001 1011
001100000000000010 1100
010000000000001110 XXXX
010100000000001111 XXXX

上面就是对应的机器码。这种由0和1组成的机器码程序叫目标程序。用助记符写成的程序叫源程序或者源代码。

最后注意每一条指令是一个8位二进制数字。这个8位的二进制数字左边的4位叫指令区,右边4位叫地址区。上面程序中最后两条指令因为不使用地址区的内容。所以右边4位用X来表示。代表什么内容都可以。不影响指令运行的结果。

做一个编程练习。
编一个程序,让我们这个计算机算出下面这个算式的值,并且把二进制结果显示出来。
算式如下:
16 + 20 + 24 - 32
这几个都是十进制数字。
首先我们要把16、20、24、32这四个要使用的数字存放到内存地址为9H到CH的4个存储区。大家可以使用计算器把这四个十进制数转为十六进制。
编好后的汇编语言程序版本如下:

内存地址00000内容

0H0000000000LDA 9H
1H0000000000ADD AH
2H0000000000ADD BH
3H0000000000SUB CH
4H0000000000OUT
5H0000000000HLT
6H0000000000XX
7H0000000000XX
8H0000000000XX
9H000000000010H
AH000000000014H
BH000000000018H
CH000000000020H

机器码版本如下:

内存地址000000000内容

000000000000000000 1001
000100000000000001 1010
001000000000000001 1011
001100000000000010 1100
010000000000001110 XXXX
010100000000001111 XXXX
01100000000000XXXX XXXX
01110000000000XXXX XXXX
10000000000000XXXX XXXX
100100000000000001 0000
101000000000000001 0100
101100000000000001 1000
110000000000000010 0000

注意程序指令存在前面。也就是内存的低地址区。数据在后面,存在内存的高地址区。因为我们的计算要首先从0000这个内存地址中取出第一条指令运行。执行完第一条之后,然后到0001这个地址取第二条指令。按这个顺序一条接一条执行指令。
内存地址6H、7H、8H里面是什么内容没关系。所以用X表示。指令到内存地址5H就结束了。数据存储区从内存地址9H开始。所以内存地址为6H~8H的几个存储单元没有用到。里面是什么内容不影响程序的运行。

这个机器码程序还可以转为十六进制版本。

内存地址00000内容

0H000000000009H
1H00000000001AH
2H00000000001BH
3H00000000002CH
4H0000000000EXH
5H0000000000FXH
6H0000000000XXH
7H0000000000XXH
8H0000000000XXH
9H000000000010H
AH000000000014H
BH000000000018H
CH000000000020H

二进制数字每4位刚好可以转成一个1位十六进制数。0000~1111一共有十六个数。每一个数字刚好对应十六进制的0~F共十六个符号中的一个。上面的X还是代表可以是任意值。并不是十六进制数字。
内存地址是4位的。刚好对应一位十六进制数字。内存中存储的指令和数据是8位二进制数。把前面4位找到对应一个十六进制数字,后面4位找到对应的十六进制数字符号。然后把两个十六进制数字组合起来,就是一个2位的十六进制数字。
比如第一条指令 0000 1001
0000(对应的是十六进制0)1001(对应的是十六进制9)把0和9组合起来。十六进制数字09H就等于0000 1001。大家可以用计算器验证一下。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#62

帖子 ubuntu777 » 2015-10-04 22:27

l10x 写了:出书,计算机设计原理 :em09
:em06 出书没那么容易吧。大家能在网上看到就可以。希望很多人,尤其是青少年能看到。更多的人有了共同的基础知识,做计算机设计,操作系统设计开发、语言设计、编译器设计这些需要大型团队的工作就可以更容易组织起来。很多周边工作也有人可以参与进去。
我觉得中文写的从最基础的知识开始,把各个单元系统串起来介绍计算机的书应该是很少。至少我还没看见有。把这个讲完之后。如果我有时间。会逐步修正。查找错误、丰富没有讲清楚的地方,增加一些相关知识的详细介绍,更多考虑不同层次读者的理解力等等。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
l10x
帖子: 447
注册时间: 2008-06-23 19:31
系统: debian+fedora+win10

Re: 计算机那点事儿~

#63

帖子 l10x » 2015-10-05 16:40

:Haha 利国利民 :em04
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#64

帖子 ubuntu777 » 2015-10-11 20:51

取指令过程

计算机自动操作的过程由控制单元(control unit)完成。控制单元输出12根线。根据上面的高电平、低电平状态来控制相应的各个元件的打开和关闭。取指令的整个自动过程就是根据时间状态。来分阶段的控制相应单元工作。用三个时间段完成取指令的整个过程。下面给大家详细讲述这个过程。

首先回顾一下我们讲过环状计数器。
环状计数器有六输出线。
T = T6T5T4T3T2T1

计算机开始运行的时候。六根线的值是:
T = 000001
最右边一根是高电平,其余五根都是低电平。然后根据时钟脉冲的变化。会依次变化为
T = 000010
T = 000100
T = 001000
T = 010000
T = 100000
一个循环完成。又回到000001。开始下一个循环。
看图:
ring_counter_00.jpg
(a)图中标有Ring counter方块就是一个环状计数器。一个CLK时钟脉冲输入端,一个CLR清零端。然后就是T6~T1共六根输出线。

(b)图中最上面是CLK代表时钟脉冲线上高低电平状况。凸起来的部份是高电平,凹下去的地方是低电平。随时间变化。对应下面的T1~T6是输出端六根线的高电平低电平状况。
T1端在T1时间段是高电平。其余的T2~T6五个时间状都是低电平。经过五个时间段的低电平之后,又会变为高电平。
T2端在T2时间段是高电平。以此类推。每一个时间段总会有一根线是高电平,而且只有一根线是高电平。
每一根线上高电平持续的时间等于时钟脉冲两个下降沿之间的间隔时间。触发器让时间脉冲的延时的功能我们以前详细讲过。
每一条指令的取指令过程和执行过程就在这六个时间段中完成。我们这次讲的取指令过程在T1~T3三个时间段完成。取指令之后,接着就是指令执行过程。
注意时钟脉冲的上升沿,也就是由低电平转到高电平的那个时刻是发生在每个时间段的正中间。

取地址时间段
T1时间段称为取地址时间段。在这个时间段要完成的工作是把程序计数器(PC)中的值传到内存地址寄存器(MAR)。
看图:
fetch_cycle_00.jpg
里面有a、b、c三个图。分别对应表示T1、T2、T3三个不同时间段中计算机各部份工作的状态。
我们先看(a)图。也就是T1时间段。涂黑的部份代表在这个时间段中不工作的部份。白的部份就代表工作部份。在T1时间段中PC单元工作,PC和数据总线的连接线工作,数据总线工作,数据总线和MAR之间的连接线工作,MAR单元工作,CON单元工作,CON的输出线工作。其余的涂黑的单元都不工作。
在取地址时间段,EPLM端要激活。也就是PC的控制端EP打开,PC中的数据就会放到数据总线上。LM激活。MAR中就可以存入来自数据总线上数据。其余无关的各部份都要处于非激活状态。这样就完成了PC中的内存地址数据转移到MAR中的工作。这个时间控制单元的12根输出线上的值是:
fetch_con_00.jpg
fetch_con_00.jpg (7.88 KiB) 查看 19127 次
注意EP是1值,放PC的数据到数据总线。LM是0值,载入数据到MAR寄存器。这些控制端在不同电平下的功能我们以前都讲过。

增值时间段

(b)图中表示的时间段。也就是T2时间段。在这个时间段要完成的工作是把程序计数器中的值加1。这个时间段控制单元的输出端会根据环状计数器随时间变化而导致输出端值变化相应发生改变。大家可以研究一下控制阵列的图,了解这个变化如何产生。控制单元的12个输出端的值自动变为
fetch_con_01.jpg
fetch_con_01.jpg (7.27 KiB) 查看 19127 次
CP变为1值,被激活。从(b)图中看到MAR也涂黑了。注意MAR的载入数据控制端LM现在是1值。数据总线也涂黑了。程序计数器增值不用数据总线。

内存时间段

也就是T3时间段。在这个时间段要完成的工作是把内存(RAM)中相应地址中存储的指令送到指令寄存器(IR)中。看(c)图。在这个时间段只有两个控制端要被激活,CELI。控制单元的12根线的输出值为:
fetch_con_02.jpg
fetch_con_02.jpg (8.04 KiB) 查看 19127 次
看图中相关的白色部份。MAR中已经有程序计数器中的内存地址值。根据这个内存地址值就知道取内存中的哪一条指令。激活CE端,内存中的相应存储单元的数据就会放到数据总线上。LI激活,指令寄存器(IR)中的值就会变得和数据总线上的数据一样。注意这个时间段指令寄存器(IR)的两个输出端都是涂黑的。指令寄存器中的指令在这个时间段并不影响数据总线和控制单元。

通过这三个时间段。内存中预先存储的程序中的指令顺利到达指令寄存器。完成了取指令过程。

注意在T1时间段中,首先控制单元令到EPLM被激活。有时钟脉冲控制的部件是在时钟脉冲的上升沿时刻被激发。在环状计数器的图(b)中我们知道时钟脉冲的上升沿是发生在时间段的正中间。也就是在这个时间段的中间时刻。MAR的值才会变得和程序计数器PC的值一样。
在增值时间段,CP是唯一被激活的控制端。这个控制端的值也是令到程序计数器(PC)中的值在时钟脉冲的上升沿时发生改变,加1。
在内存时间段,内存(RAM)中的数据(也就是我们事先编好的程序中的指令)会通过数据总线令到指令寄存器的值发生改变。也需要在时间脉冲的上升沿,指令寄存器才能载入内存(RAM)中的值。

下次我们接着讲T4~T6时间发生的事情。也就是指令执行过程。指令执行过程,不仅需要根据不同时间段,控制各部件做不同的工作;而且要根据指令的不同,要让计算机在各个时间作不同的工作。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#65

帖子 ubuntu777 » 2015-10-18 22:49

指令执行过程

环形计数器的T1~T3时间段完成了取指令。剩下的T4~T6三个时间段就用来完成指令执行过程。
根据指令的不同,计算机在这三个时间段要完成不同的工作。我们一个一个指令讲。今天讲LDA指令。

LDA指令

在三个时间段完成取指令过程后,内存中的一条指令会被载入指令寄存器(IR)中。我们这条载入的指令是LDA 9H。LDA 9H的机器码是0000 1001。这个时间IR中的内容就是
IR = 0000 1001
当T4时间段到来的时侯。IR中指令是一个8位二进制数,左边的4位是指令区,内容为0000。有4根输出线,把0000送到控制阵列进行指令解码。解码之后。右边的4位地址区的值,也就是1001。因为这4位输出线连接的是数据总线(W bus)。指令解码后,1001这个值会经过数据总线被送入内存地址寄存器(MAR)。大家看图:
lda_00.jpg
(a)表示在T4时间段参与工作的单元。控制单元的十二根输出控制线中,只有EILM被激活。其它的控制线都是非激活状态。

(b)表示在T5时间段工作的单元。CELA变为低电平。表示内存(RAM)中由MAR指定的地址区中存储的内容会被载入累加器(A)

(c)表示T6时间段工作的单元。其实是没有任何单元工作。称为无操作时间段。英文是nop(no op),意思是no operation(无操作)。T6时间段在LDA指令执行时属于nop。

下面这个图是波形图。表示取指令过程和LDA指令的执行过程。
lda_01.jpg
在T1时间段EPLM被激活。在时间段的正中间是时钟脉冲的上升沿。这个时刻程序计数器中的内容被载入MAR。在T2时间段,CP被激活;程序计数器中的值在时钟脉冲的上升沿自增1。在T3时间段CELI被激活。相关内存地址中的内容被送入指令寄存器(IR)。在LDA指令执行的时候,T4时间段LMEI被激活。指令寄存器中指令地址区的值被送入MAR。在T5时间段,CELA被激活。内存(RAM)中的相应地址中的数据在时钟脉冲的上升沿被送入累加器(A)。T6时间段在LDA指令时是无操作时间段nop。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#66

帖子 ubuntu777 » 2015-10-25 22:42

ADD指令

如果载入指令寄存器(IR)的指令是 ADD BH
IR = 0001 1011

在T4时间段。同样指令中的指令区也就是左边四位0001进入控制阵列进行解码。指令中地址区右边4位1011进入MAR,指定内存地址。
看图:
add_routine_00.jpg
图(a)是T4时间段,可以看到EILM被激活。指令寄存器(IR)工作,向下箭头激活,输出指令区内容到控制阵列(CON);向右箭头激活,输出地址区数据到数据总线。MAR通过数据总线接收这个地址。

T5时间段,看图(b)。CELB被激活。内存(RAM)根据MAR在T4时间段获得的地址,把相应的地址中存取的数据放到数据总线上面。LB把B寄存器的载入功能打开。在时钟脉冲的上升沿到来的时刻,数据总线上的数据就会被存入B寄存器中。

T6时间段,看图(c)。EULA被激活。在时钟脉冲的上升沿到来的时刻,也就是这个时间段的正中间,加减器(Add/sub)的计算结果会通过数据总线改变累加器(A)的值。

注意在这个时间段,累加器中预先存储的值会做为被加数参与加减器(Add/sub)的运算,和B寄存器中的值一起决定加减器(Add/sub)输出到数据总线的结果。而且累加器中的值还要变为这个结果。如何在一个时间段中完成这个工作,还能避免线路上数据冲突,我们以前讲过。

加减器(Add/sub)是不受时钟脉冲控制的电路。只要输入端改变,输出端值会马上改变。累加器(A)是受时钟脉冲控制的电路。当T6时间段到来的时候。由于加减器(Add/sub)的输出端中其实已经在B寄存器中载入数据的时刻就发生了改变。只是现在EU在T6时间段变为高电平后,打开了加减器(Add/sub)和数据总线的连接。把这个结果放到了数据总线上。虽然累加器(A)的载入控制线LA也打开了。但由于累加器(A)受时钟脉冲控制。累加器(A)中存储的值不会马上发生改。要等到时钟脉冲的上升沿到来的时候,也就是T6时间段的中间时刻。数据总线上的值才会进入累加器(A)中,替换原来的值。由于加减器不受时钟脉冲控制,累加器中的新值会马上改变加减器的输出端结果。但累加器(A)不会马上受影响,要等到下一时钟脉冲上升沿到来才会发生改变。这样就避免了累加器(A)被多次循环改变造成的混乱。

看下面这个ADD指令执行时6个时间段的波形图。
add_routine_01.jpg
最上面是有规律上下波动的时钟脉冲,分为6个时间段。下面对应由控制单元(CON)决定的输出端各个控制线上在不同时间段高低电平的波动状况。T1~T3时间段载入指令到指令寄存器(IR)。以前讲过。每个时间段中的虚线。对应的就是时钟脉冲的上升沿到来的时刻。虚线刚好对准的是各个控制线上被激活时间段波形的正中间。例如在T6时间段。EU被激活,是高电平,高电平波形凸起。虚线对准凸起波形的正中间。LA被激活状态是低电平,低电平波形凹下去。虚线对准的是凹下去波形的正中间。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
kin3z
帖子: 56
注册时间: 2011-11-01 14:22

Re: 计算机那点事儿~

#67

帖子 kin3z » 2015-10-26 9:43

ubuntu777, 你好,你发布的帖子内容太好了,我想提取出来做成PDF传阅出去,请问可以吗?(当然,我会在这里公布一份)
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#68

帖子 ubuntu777 » 2015-10-26 21:42

kin3z 写了:ubuntu777, 你好,你发布的帖子内容太好了,我想提取出来做成PDF传阅出去,请问可以吗?(当然,我会在这里公布一份)
谢谢您的夸奖。 :em02 可以。非常感谢!不过要注意版权之类的事情,里面引用的东西很多。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#69

帖子 ubuntu777 » 2015-11-01 22:45

SUB指令

SUB指令的执行过程和ADD指令差不多的。ADD指令中(a)图(b)图代表T4和T5时间段状态和SUB指令的T4和T5时间段完全一样。只是在T6时间段,要设置加减器(Add/sub)的控制线SU为高电平状态,把减法功能激活。SUB指令的波形图只需要在ADD指令的波形图中加一条SU线的状态。T1到T5时间段处于低电平,在T6时间段变为高电平就行了。

OUT指令

假定取指令过程完后指令寄存器(IR)中的值是OUT指令。
IR = 1110 XXXX
这是一条地址无关指令。指令区的4位二进制数送入控制单元(CON)中解码。控制单元把相应的控制端设置好。将累加器(A)中的内容送到输出寄存器(O)。
看图:
out_routine_00.jpg
out_routine_00.jpg (17.84 KiB) 查看 18193 次
OUT指令在T4时间段时计算机各单元的工作状况。控制单元指令解码后让累加器(A)的控制线EA激活,把累加器(A)的输出端和数据总线连通。输出寄存器(O)的LO也激活,把输出寄存器的载入功能打开。在下一个时钟脉冲的上升沿,输出寄存器(O)中的内容就会变得数据总线上的一样。完成累加器(A)中的数据传送到输出寄存器(O)的工作。
T5和T6时间段无操作,都是nop。

波形图:
out_routine_01.jpg
T1到T3时间段的取指令过程和前面几个指令都一样。在T4时间段,EALO被激活。累加器(A)中的数据会在下一个时钟脉冲的上升沿进入输出寄存器(O)。

HLT指令

HLT指令和其它指令不同。执行这条指令不需要用到控制单元的12根控制线。如果不记得了,可以回去找找控制单元部份的详细图看看。有一根单独的HLT线。
当指令寄存器(IR)中是HLT指令时。
IR = 1111 XXXX
它会给HLT端一个低电平信号。然后会导致计算机关闭时钟。这样就起到了中止程序的作用。
这根HLT线接到哪里。怎么完成停止计算时钟的工作。我们下次再讲。

大家仔细看看我们前面给的整个计算机连接的详细图。会发现有几根线连到哪里我们还不知道。一根就是今天讲的终止程序的HLT线。还有就是清零用CLR和CLR线。提供时钟脉冲的CLK和CLK线。还有就是电源线。提供一个+5V的正极和一个接地端。这样元件们才可以工作。一共七根。

了解完这7根线,对这个计算机如何工作的认识算是基本完整。这个长达7个多月贴子也将结束。我希望下一次能讲完。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#70

帖子 ubuntu777 » 2015-11-09 0:23

清零、启动弹跳开关

看图:
clr_debouncer.jpg
编号为S5的开关。有弹跳功能。一按下去会自动弹上来。把它按下去的时候就接到CLEAR一端。就可以在输出端CLR产生一个高电平,在CLR产生一个低电平。接了这两根线的触发器的内容会变为零值。一松手开关自动弹回到上面的START端。又变为正常的CLR低电平,CLR高电平状态。对触发器中的值不产生影响。
我们以前讲过,只要CLR端送来一个短暂的高电平信号。就可以起到清零作用。不用持续。程序计数器和环状计数器的内容就会归零。不管以前的程序执行到哪一步。只要这两个地方的内容归零。开关弹回来后,计算机就重新从内存地址0000的地方取指令,开始执行。实现计算机重新启动的功能。
开关S5左边接地。相当于接到低电平。如果接START。就相当把1端和低电平的接地端连通,变为低电平。CLR会变低电平,CLR端的值和CLR相反,是高电平。按下去接CLEAR,相当于把5和接地端连通,会导致CLR产生高电平,CLR变为低电平。
以前的计算机有RESET按钮。就是这个功能。如果电脑死机了,按一下,松开,就会重启动。大家用过的计算器背后也有一个小孔。如果死机了。拿根细棍捅一下,再松开,计算器就会重新启动。解除死机状态,就是这个开关同样的功能。

单步弹跳开关

这个计算机可以用两种方式工作。一种是自动状态,一种是手动状态。为完成这个工作。也需要用一个弹跳开关。开关按下去。在CLK端产生一个高电平,弹回来,CLK又回到低电平状态。相当于产生了一个时钟脉冲。

看图:
s_m_clock.jpg
图很复杂。先看最上面写有SINGLE STEP的部份。编号为S6的就是这个单步(SINGLE STEP)弹跳开关。这个开关影响到一根输出线,它连接到编号为C25的有三个输入端的与门电路。单步弹跳开关是用来调试计算机的。不只是调试软件,也可以调试硬件。可以通过单步执行,调试检查每一条指令执行过程中每一个T时间段时的状态。如果买到各种电子元件把这个计算机组好了。执行过程中有问题。可以通过这个单步弹跳开关调试发现到底是哪一步执行发生错误。最后找到是哪一个元件接错了,或者没接好,在哪一步导致了错误结果。

手动、自动弹跳开关

还是看上面那个图。中间写有MANUAL/AUTO的部份。标有S7的开关就是手动、自动弹跳开关。这个开关和前面讲的两个弹跳开关不同。按下之后,会保持住按下去的状况。再按一次,弹回来,保持弹起来状态。

这个S7开关弹起来,保持指向上面MANUAL。计算机就处于手动状态。可以令到图中最右边给计算提供时钟脉冲信号的CLK和CLK输出端按上面单步弹跳开关提供的高电平、低电平脉冲,按一下单步弹跳开关,执行一个步骤。让计算机慢慢地一步一步工作。
如果S7开关按下去,保持指向AUTO端。计算就处于自动状态。CLK和CLK端的就按下面CLOCK CIRCUIT部份的时钟脉冲发生器产生的每秒上千次的高、低电平脉冲,让计算机高速执行程序,完成相应的工作。

时钟缓冲器

看图最右边用虚线框起来的写有CLOCK BUFFERS的就是时钟缓冲器。元件标号为C27。把一根提供时钟脉冲的输入线分为CLK和CLK两根线。给所有需要时钟脉冲的元件提供时钟脉冲信号。注意这个元件要选择大功率的,后面接它的元件的要选择小功率的。如果不匹配,接的元件过多,可能会烧坏电子元件。

时钟电路

看图中最下面写有CLOCK CIRCUIT的部分。
这个部份就是产生自动时钟脉冲的东西。标有C28 NE555的就是著名的555定时器。如果有兴趣仔细研究。大家可以轻松地在网上搜索到详细介绍它的资料。它的作用就是产生高速振荡的时钟脉冲。就是图中标号为3的那根输出线。这根线上提供2-kHz的时钟脉冲。接到一个编号为C29的JK触发器的时钟脉冲输入端。也就是标号为12的那个输入端。标号为1、4的JK端接入的是HLT。HLT指令解码后那根线就接到这里。可以起到停步时钟脉的作用。这个JK触发器起到把时钟脉冲频率减半后,在标号为3输出端Q输出。Q端提供的时钟脉冲就只有1-KHz。然后接入一个编号为C26的与门电路。C26另一输入端接手动、自动弹跳开关的一个输出端。可以用来中断自动时钟脉冲在输出端8的信号。这样就可以切换到单步执行。

注意还有一个HLT接的是单步弹跳开关那头,标有C25的与门电路。用来中断提供所有需要时钟脉冲信号的元件的CLK和CLK线上的时钟脉冲信号。

电源部份

电源部份只要提供一个+5V的直流电源就可以了。再提供一个接地端。这样所有元件就都可以接好了。

到这里。所有内容就讲完了。非常感谢大家的耐心。我原来以为到后面复杂的部份,读者的人数会越来越少。但是看点击量。和最初的人数基本一样。中间有一段时间跑了一半的人。

就好象我先前用的爬山比喻的一样。现在大家站到了山顶。可以发现自己收获很多,而且自身的能力也增加不少。以前根本看不懂、不了解的东西。现在心里大概都明白了。以前觉得很难的东西,现在也多少能够了解。也知道了不少了解和思考问题的方法。看看山脚下的人。是不是觉得比他们高了很多?

虽然用了七、八月的时间。但由于涉及的部分非常之广。很多东西都没讲很详细,错误一定也不少。数字电路、CPU设计知识,电学知识,半导体材料的知识、计算机架构知识、编程知识、语言设计知识等等。大家对哪一方面有兴趣,可以具体买书学习,或者选择相应的专业深造,成为某一方面的专家。或者是在计算机某一方面已有专长的也可以知道其它各方面对自己的影响,或是自己的工作会怎么影响其它的领域。总之,我认为把大家带到山顶一览全局的目的已经达到了。

大家注意所有元件都有编号。如果有人有兴趣组装一个计算机实物。我可以把对应的元件型号告诉大家。大多数都可以在淘宝买得到。可能会有个别的没有。愿意花精力,也可以找到代替品。另外,我可能还需要列一个参考书目录。对它们的作者表示感谢,也方便有兴趣人进一步学习。

此文到此结束。文章从春天头脑化冻开始。到立冬结束终于了。我的头脑也木了。这里讲的都是最实际的东西和工作。由看到见的东西开始。让大家能认识、参与到计算机领域。如果有人对更加纯粹的知识有兴趣。也许以后有时间和精力,我会给大家讲完全抽象的数学知识,那个是让计算机水平达到高大上的基础。
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#71

帖子 ubuntu777 » 2015-11-15 20:59

几本重要的参考书。贴子里面很多内容都是引用自下面几本书。对作者们由衷感谢。如果大家想进一步的仔细了解相关知识。又有比较好的英文水平。可以去找来读一下。

第一本是BOB NEVELN写的<Linux Assembly Language Programing>。里面讲到计算机硬件的基础和汇编语言的基础知识。

第二本是Albert Paul Malvino, Ph.D.和Jerald A. Brown写的<Digital Computer Electronics>我们讲的那个最简单的计算机的结构和做法就是来自这本书。如果想全面仔细了解这个计算机,看这个就可以。里面还有继续加工的升级版。还有我们这个计算机用到的元件汇总表。以及对我们现在笔记本电脑、台式机使用的Inter公司的CPU的始祖8086系列的介绍。了解这些可以知道我们电脑中的CPU电子元件怎么动作,那些1和0组成代码怎么令到电路工作。

第三本是Anil K. Maini写的<Digital Electronics Principles, Devices and Applications>。如果大家对数字电路有兴趣。可以去看这个。了解各种触发器如何工作,以及把各种门电路组合起来,完成不同工作的各种技巧。

第四本是Don Lancaster写的TTL Cookbook。TTL门电路就是大家在贴子里面看有很多脚的小电子元件。这件元件不是随便生产的。都有国际标准的。了解各种各样的这些电子元件。各个脚的编号和作用。内部功能实现的方法。电压标准,如何匹配。如果想用这些元件组装一些东西。可以去看这本书。

第五本是阎石写的<数字电子技术基础>。这是一本中文书。帮助我了解各种东西的中文名称。比如我以为and gate是和门电路。后来发现应该翻译为与门电路。内容和第三本<Digital Electronics Principles, Devices and Applications>差不多。这是一本大陆的高等学校教材。有助于了解各种触发器如何工作。如何组装让它们完成各种功能。里面讲到怎么把代表二进制数字的几根电线输出,通过电路处理,在计算器和电子表上面的数字显式屏上显示为我们认识的1234567890。以及这些数字显示屏是怎么做成的。还有怎么设计这些电路形成按键遥控器,计时器功能等等。看了之后,对于电子表,家里使用的各种自动控制洗衣机、电饭煲、热水器等等怎么工作,也明白了。

大家看很多书都是外国的。因为计算机是通过各种发明,不断改进形成的技术。属于形而下之的器用之术。涉及的抽象基础的知识方面。西方的数学、科学物理理论都有很大不足和缺陷。作为计算机数学基础的二进制理论。是莱布尼莱由中国太极八卦图得到启发,凭他一点有限的理解而建立。如果真的了解太极八卦,用之于计算机软硬件的设计开发和使用。我认为对世界科技会有完全颠覆性的改变。都是大杀器。虽然蛮夷之思想有其鄙陋、不足之处;其技其术亦有精妙,务实之用。变化未穷而绝之,过也,非仁也。所以有关知识我暂时不会告诉大家。

这个贴子就到此就结束。我不再多写,也不再回答问题。

愿大家幸福、平安、喜乐!用谦卑、诚实的心学习,孝敬父母,远离恶事。





吾生也有涯,而知也无涯,以有涯随无涯,殆已。------庄子
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
kin3z
帖子: 56
注册时间: 2011-11-01 14:22

Re: 计算机那点事儿~

#72

帖子 kin3z » 2016-03-02 10:44

ubuntu777 写了:
kin3z 写了:ubuntu777, 你好,你发布的帖子内容太好了,我想提取出来做成PDF传阅出去,请问可以吗?(当然,我会在这里公布一份)
谢谢您的夸奖。 :em02 可以。非常感谢!不过要注意版权之类的事情,里面引用的东西很多。
呵呵,等你的更新等了很久,结果都忘别的去了,不过PDF其实也做出了,可惜上次对话后所更新的新内容没补上,也没作排版,这里我先放上,待过两天有空了我会补上更新好了的与你所要求的那些版权信息、内容出处等。。。 :em06
上次由 kin3z 在 2016-08-02 12:07,总共编辑 1 次。
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#73

帖子 ubuntu777 » 2016-03-06 13:46

kin3z 写了:
ubuntu777 写了:
kin3z 写了:ubuntu777, 你好,你发布的帖子内容太好了,我想提取出来做成PDF传阅出去,请问可以吗?(当然,我会在这里公布一份)
谢谢您的夸奖。 :em02 可以。非常感谢!不过要注意版权之类的事情,里面引用的东西很多。
呵呵,等你的更新等了很久,结果都忘别的去了,不过PDF其实也做出了,可惜上次对话后所更新的新内容没补上,也没作排版,这里我先放上,待过两天有空了我会补上更新好了的与你所要求的那些版权信息、内容出处等。。。 :em06
很好。 :em01 非常感谢。我看了一下。有些地方文字中讲的图片位置和实际图的位置对不上。
另外,我写的也有很多不准确和错误。我觉得如果做成这样的PDF。应该重新排一下章节。修正错误。增减一些内容。便于阅读。
毕竟看一个完整的PDF书和现场看直播贴子的感受不一样。读者也不一样。
如果你把所有内容都做好了。发上来,我根据那个重新编章节,修订文字。给图片编上号码。然后把文字给你。然后你根据那个再做一个PDF书可以吗? :em01 希望在明年这个时间之前可以完成。 :em02
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
kin3z
帖子: 56
注册时间: 2011-11-01 14:22

Re: 计算机那点事儿~

#74

帖子 kin3z » 2016-07-28 0:18

不好意思,太久没登录论坛,我8月10号前再重新排版制作PDF并且发你源版文件。待你回复

2016-08-02
距离我承诺的10好还剩8天,现在初步已经把内容截取好,其余的(例如是否需要序,标题是否修改,排版是否合理等等)可能需要你本人评价。
现先放出这个源文件,如有觉得需要修改的请直接修改好,最后发回我输出成PDF则可。
附件
计算机那些事儿2.odt.part2.rar
(1.28 MiB) 已下载 158 次
计算机那些事儿2.odt.part1.rar
(4 MiB) 已下载 129 次
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40

Re: 计算机那点事儿~

#75

帖子 ubuntu777 » 2016-08-02 20:43

kin3z 写了:不好意思,太久没登录论坛,我8月10号前再重新排版制作PDF并且发你源版文件。待你回复

2016-08-02
距离我承诺的10好还剩8天,现在初步已经把内容截取好,其余的(例如是否需要序,标题是否修改,排版是否合理等等)可能需要你本人评价。
现先放出这个源文件,如有觉得需要修改的请直接修改好,最后发回我输出成PDF则可。
非常感谢!我也是好久没有来这里。好象这里变得很荒凉了。不知道为什么。记得我写贴子的时候。还经常有一两百人在线。现在好象除了几个机器人在线就没人了。

刚下载完成。我会尽快看完。修改后发回。

再次感谢! :em11
שְׁמַע יִשְׂרָאֵל יְהֹוָה אֱלֹהֵינוּ יְהֹוָה ׀ אֶחָֽד׃
וְאָהַבְתָּ אֵת יְהֹוָה אֱלֹהֶיךָ בְּכׇל־לְבָבְךָ וּבְכׇל־נַפְשְׁךָ וּבְכׇל־מְאֹדֶֽךָ׃
回复