计算器开机键是哪个键显示RAM cleared怎么操作,是什么意思?

请教计算机内RAM和ROM的区别,也就是RAM是什么?ROM是什么?
计算机存储器指计算机的内部存储区域,以芯片格式和集成电路形式存在。计算机存储器应用于录音机或磁盘。术语“存储器”通常视为物理存储器的简称,作为保留数据的实际可能芯片。有些计算机也使用虚拟存储器,即在相关信息上扩展物理存储器。
  存储器分为两种基本类型:ROM 和 RAM 。
  ROM(只读存储器):在 ROM 中,只读数据是预先记录的,不能被移动。ROM 不易于丢失,也就是,不管计算机处于开机还是关机状态,ROM 始终保留其内部内容。大多数个人计算机的 ROM 较小,主要用于存储一些关键性程序,诸如用来启动计算机的程序。另外,ROM 也用于计算器及外围设备等,如激光打印机,其字体存储于 ROM 中。ROM 还存在一些扩展变量,如可编程只读存储器(PROM),即采用专用 PROM 编程器在空白芯片上写入数据。
  RAM(随机存储器):该存储器中的内容可以以任意顺序存取(读、写和移动)。时序存储器设备正好与其形成对比,如磁带、唱片等,其存储介质的机械运动驱使计算机必须以固定顺序存取数据。RAM 通常负责计算机中主要的存储任务,如数据和程序等动态信息的存储。RAM 的通用格式包括: ...
计算机存储器指计算机的内部存储区域,以芯片格式和集成电路形式存在。计算机存储器应用于录音机或磁盘。术语“存储器”通常视为物理存储器的简称,作为保留数据的实际可能芯片。有些计算机也使用虚拟存储器,即在相关信息上扩展物理存储器。
  存储器分为两种基本类型:ROM 和 RAM 。
  ROM(只读存储器):在 ROM 中,只读数据是预先记录的,不能被移动。ROM 不易于丢失,也就是,不管计算机处于开机还是关机状态,ROM 始终保留其内部内容。大多数个人计算机的 ROM 较小,主要用于存储一些关键性程序,诸如用来启动计算机的程序。另外,ROM 也用于计算器及外围设备等,如激光打印机,其字体存储于 ROM 中。ROM 还存在一些扩展变量,如可编程只读存储器(PROM),即采用专用 PROM 编程器在空白芯片上写入数据。
  RAM(随机存储器):该存储器中的内容可以以任意顺序存取(读、写和移动)。时序存储器设备正好与其形成对比,如磁带、唱片等,其存储介质的机械运动驱使计算机必须以固定顺序存取数据。RAM 通常负责计算机中主要的存储任务,如数据和程序等动态信息的存储。RAM 的通用格式包括: SRAM(静态 RAM)和 DRAM(动态 RAM)。
  RAM IC 通常组装为插槽。常见的标准插槽类型包括:SIMM (Single in-line memory module)插槽和 DIMM (Dual in-line memory module)插槽。
  此外,还存在一些诸如闪存(Flash memory)、NVRAM 以及 EEPROM 等存储器类型,它们是结合 RAM 和 ROM 特征所获得的产物。
其他答案(共1个回答)
- Read Only Memory 只读存储器 ,数据不能随意更新,但是在任何时候都可以读取。断电之后,ROM内的数据不消失。
RAM:随机存储器。
ROM:只读存储器。
通俗的讲:内存就是一种RAM,内存的数据无法长期保存,断电后数据就会丢失。但你可以将内存的数据保存到硬盘、光盘还有U...
RAM存储器可读写
就是机身储存内容 包含rom一起
:在第二轮12万台又在1分钟内售罄之后,华为副总裁余承东在微博上表示,2GB内存版的荣耀3C以及5.5寸的荣耀3X会在1月份正式开卖。
有时主板电池安装不到位,也有这个现象;重新安装主板电池、或者换一块质量较好的电池;
若是排除电池因素,则可能是 主板 CMOS电路部分有故障,这就需要找专业的维...
答: LG空调与外机相关故障代码有哪些?
这个好像旧书摊上都有,1元一本
答: 程序员、高校专业老师、发烧友
海鸟的种类约350种,其中大洋性海鸟约150种。比较著名的海鸟有信天翁、海燕、海鸥、鹈鹕、鸬鹚、鲣鸟、军舰鸟等。海鸟终日生活在海洋上,饥餐鱼虾,渴饮海水。海鸟食量大,一只海鸥一天要吃6000只磷虾,一只鹈鹕一天能吃(2~2.5)kg鱼。在秘鲁海域,上千万只海鸟每年要消耗?鱼400×104t,它们对渔业有一定的危害,但鸟粪是极好的天然肥料。中国南海著名的金丝燕,用唾液等作成的巢被称为燕窝,是上等的营养补品。
关于三国武将的排名在玩家中颇有争论,其实真正熟读三国的人应该知道关于三国武将的排名早有定论,头十位依次为:
头吕(吕布)二赵(赵云)三典韦,四关(关羽)五许(许楮)六张飞,七马(马超)八颜(颜良)九文丑,老将黄忠排末位。
关于这个排名大家最具疑问的恐怕是关羽了,这里我给大家细细道来。赵云就不用多说了,魏军中七进七出不说武功,体力也是超强了。而枪法有六和之说,赵云占了个气,也就是枪法的鼻祖了,其武学造诣可见一斑。至于典韦,单凭他和许楮两人就能战住吕布,武功应该比三英中的关羽要强吧。
其实单论武功除吕布外大家都差不多。论战功关羽斩颜良是因为颜良抢军马已经得手正在后撤,并不想与人交手,没想到赤兔马快,被从后背赶上斩之;文丑就更冤了,他是受了委托来招降关羽的,并没想着交手,结果话没说完关羽的刀就到了。只是由于过去封建统治者的需要后来将关羽神话化了,就连日本人也很崇拜他,只不过在日本的关公形象是扎着日式头巾的。
张飞、许楮、马超的排名比较有意思,按理说他们斗得势均力敌都没分出上下,而古人的解释是按照他们谁先脱的衣服谁就厉害!有点搞笑呦。十名以后的排名笔者忘记了,好象第11个是张辽。最后需要说明的是我们现在通常看到的《三国演义》已是多次修改过的版本,笔者看过一套更早的版本,有些细节不太一样。
规模以上工业企业是指全部国有企业(在工商局的登记注册类型为"110"的企业)和当年产品销售收入500万元以上(含)的非国有工业企业。
工行的网银没有软键盘,主要通过安全控件来保证安全,只有安装了工行的安全控件,才能在工行网页上输入密码。
修改密码的操作,你可以在登陆工行网银以后,在“客户服务”的“修改客户密码”里找到相关链接。
考虑是由于天气比较干燥和身体上火导致的,建议不要吃香辣和煎炸的食物,多喝水,多吃点水果,不能吃牛肉和海鱼。可以服用(穿心莲片,维生素b2和b6)。也可以服用一些中药,如清热解毒的。
确实没有偿还能力的,应当与贷款机构进行协商,宽展还款期间或者分期归还; 如果贷款机构起诉到法院胜诉之后,在履行期未履行法院判决,会申请法院强制执行; 法院在受理强制执行时,会依法查询贷款人名下的房产、车辆、证券和存款;贷款人名下没有可供执行的财产而又拒绝履行法院的生效判决,则有逾期还款等负面信息记录在个人的信用报告中并被限制高消费及出入境,甚至有可能会被司法拘留。
第一步:教育引导
不同年龄阶段的孩子“吮指癖”的原因不尽相同,但于力认为,如果没有什么异常的症状,应该以教育引导为首要方式,并注意经常帮孩子洗手,以防细菌入侵引起胃肠道感染。
第二步:转移注意力
比起严厉指责、打骂,转移注意力是一种明智的做法。比如,多让孩子进行动手游戏,让他双手都不得闲,或者用其他的玩具吸引他,还可以多带孩子出去游玩,让他在五彩缤纷的世界里获得知识,增长见识,逐渐忘记原来的坏习惯。对于小婴儿,还可以做个小布手套,或者用纱布缠住手指,直接防止他吃手。但是,不主张给孩子手指上“涂味”,比如黄连水、辣椒水等,以免影响孩子的胃口,黄连有清热解毒的功效,吃多了还可导致腹泻、呕吐。
合肥政务区网络广告推广网络推广哪家公司比较好 一套能在互联网上跑业务的系统,被网络营销专家赞为目前最 有效的网络推广方式!
1、搜索引擎营销:分两种SEO和PPC,即搜索引擎优化,是通过对网站结构、高质量的网站主题内容、丰富而有价值的相关性外部链接进行优化而使网站为用户及搜索引擎更加友好,以获得在搜索引擎上的优势排名为网站引入流量。
良工拥有十多位资深制冷维修工程师,十二年生产与制造经验,技术力量雄厚,配有先进的测试仪器,建有系列低温测试设备,备有充足的零部件,包括大量品牌的压缩机,冷凝器,蒸发器,水泵,膨胀阀等备品库,能为客户提供迅捷,优质的工业冷水机及模温机维修和保养。
楼主,龙德教育就挺好的,你可以去试试,我们家孩子一直在龙德教育补习的,我觉得还不错。
成人可以学爵士舞。不过对柔软度的拒绝比较大。  不论跳什么舞,如果要跳得美,身体的柔软度必须要好,否则无法充分发挥出理应的线条美感,爵士舞也不值得注意。在展开暖身的弯曲动作必须注意,不适合在身体肌肉未几乎和暖前用弹振形式来做弯曲,否则更容易弄巧反拙,骨折肌肉。用静态方式弯曲较安全,不过也较必须耐性。柔软度的锻炼动作之幅度更不该超过疼痛的地步,肌肉有向上的感觉即可,动作(角度)保持的时间可由10馀秒至30-40秒平均,时间愈长对肌肉及关节附近的联结的组织之负荷也愈高。
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415计算器的原理,为啥能算出数来?
问题描述:
计算器的原理,为啥能算出数来?
问题解答:
归根到底 是2进置的加法 由很多逻辑单元(门)组成的大规模专用芯片(ASIC).可以用FPGA做出来.与简单处理器的结构有些相似,有ALU,乘除法器,数据通路,寄存器,只读存储器,静态RAM,液晶显示控制器,键盘解码器.
我来回答:
剩余:2000字
熟记1~10的立方,作为速算的基础.熟练使用转化手段.如:4×4×4×4×4×4 = 4^6 = (2^2)^6 = 2^12 = 2²×2^10 = 4× 1024 = 4096 再问: 看不懂 再答: 我说的方法得有七年级水平,如果是小学生就用计算器或笔算吧。
长*宽=土地平方面积11.91*11.25=133.9875(平方米)
先按12,再按“^”键,再按5就算出来了
设自己想的那个数是X [(X+52.8)×5-3.9343]÷0.5-10X =(X+52.8)×10-7.8686-10X =528-7.8686 =520.1314 所以不管X是多少,结果都是520.1314
1.1xy30 1.1xy0.6 (计算器中y是上标)
其实在你进行任何记计算时,早已设定好答案的,这是因为人家早就在里面编写好相关程序的
电子辞典没有cos-1函数么?建议买个卡西欧的ES系列计算器吧38°12′52〃
计算机每秒计算上亿次,算些简单的还可以,处理图像就慢了
给你分成三块计算,根据你的合同,把需要的面积加起来就行了.中间高度直接用40计算,虽然有点误差,但影响不大.
角度单位问题.角度单位有 弧度(rad) 与度(°) 180°= π radsin30=-0.9880316 sin30°=0.5
49=50-1,所以算式可以写成:49×6=(50-1)×6=50×6-6×1,故答案为:(50-1)×6,50×6-6×1.
你是说电脑里自带的计算器吗?打开计算器后,点 查看 选项卡,选中科学型.里面有个x^y
这个16 是 10进制的 16 ,就相当于 16进制 的 10 再问: 老兄还能在详细一点么,我还是没转过来。。。 再答: 假设段地址=1000h,偏移地址=2345h 那么物理地址: 1000h * 16 + 2345h = 1000h * 10h + 2345h = 12345h
模式设定的 问题 再问: 怎么设定正常 再答: 计算器上面是否有mode, 然后找一下是否有NORM 如果有按一下mode键,再按一下NORM对应的数字键应该就是可以了
没有问题,那是科学计数法,你只要按下面的步骤作就好了:Shift > MODE(CLR) > 3(ALL) > =(RESET ALL)
你计算器上肯定按了什么键设置使小数点全被省略了,我以前也发生过在这种情况,仔细调调可以调回来
这个涉及电子电路,比较复杂. 再问: 人可以像计算器算出sin24,cos34,等这样的准确值吗? 再答: 这些都是利用迭代求出来的,比如圆周率,祖冲之算了多少年,计算机运算速度快,所以算的快。
如果这个数每一位上的数字之和能被9整除,那么这个数就能被9整除.比如说:+0+3+6=18,18/9=2,18能被9整除,所以27036就能被9整除.这个跟某数能否被3整除的验证方法是一样的.就这意思.
用WINDOWS附件中的计算器即可以计算注:左上角的INV按纽是反函数,用INV和TAN结合起来就是arctan X.
也许感兴趣的知识合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下
计算机本质
这个问题从高中就开始疑惑,计算机究竟是如何理解人类思维,如何进行计算?
我很想知道最最基本的工作原理,但是大学里好多课程,数字逻辑,计算机组成原理,只是从不同层次上解释了计算机的工作原理,很可惜的是,我并没有把知识穿起来。看了很多人的回答,大家也只是解释了一部分问题,没有完整的把计算机整个的抽象层次说清楚。在大学里我看到了 Charles Petzold的《编码 隐匿在计算机软硬件背后的语言》,这部永不退色的计算机经典著作,为了讲明白了这件事儿,今天我决定用自己简略的话,回顾一下作者写作的思路,用我的理解为大家讲述计算机的工作原理。希望我能够完成。
今天的计算机已经变得相当复杂,是有史以来人类创造的最复杂最精密的仪器,没有之一,是二十世纪技术领域的“登峰造极之作”,计算机与生俱来的层次化体系结构,掩盖了技术背后最本质的东西,现在已经很少有人去关心计算机最本质的工作原理,我希望能剖析计算机一层层‘“抽象”面纱,展现最本质的“计算”过程。基本的知识基础是高中物理,高中数学。
第一节 计算器
下面回到高中课堂,我依稀记得在电磁学那一部分,讲到了电磁继电器,当时老师说,继电器是很重要的发明,我打开物理课本,“什么破东西嘛”,太简单了,那时候觉得像继电器这样的发明没什么用。高中数学中也讲到,布尔代数,简单老说就是,与、或、非,而且教科书上说,布尔代数意义重大云云。下面问题来了,我只用继电器能不是实现简单的计算器?注意是“计算器”,而不是计算机,答案是肯定的,来,那就看看,如何用继电器打造出一个”计算器“,进而打造出一台”计算机“
两个继电器串联,点亮一盏灯,这算不算实现了“与”的操作呢?两“真”为”真“
两个继电器并联,点亮一盏灯,是不是实现了”或“的操作?一真为真
一个继电器本身就可以实现”非“的操作
这样一来,物理上的继电器,和布尔代数,完美的融合起来,我把与或非门继电器实现称作”物理层“,每张图右边的符号表示,称作”布尔逻辑层“,从”物理层“到”布尔逻辑层“是我们的第一层抽象,很简单吧?(当然现代计算器从物理实现到逻辑实现,已经使用继电器,而是在硅芯片上雕刻一个个的晶体管,但晶体管的数量绝对不会减少,这一点@丁旭 已经说得很明白)
接下来可能有人问,你整这些小儿科的东西,有什么用呢?别急,看我慢慢展开!
我们知道,布尔代数是一种数学,既然是在一种数学,那么存在数学运算啊,数学运算能用继电器实现吗,of course
一个或门,一个与非门,一个与门,按照图示连在一起形成了一个最常见的运算,异或运算,”相同为假,不同为真“,那物理实现上怎么做呢?请在大脑中想想怎么连线,一共七个继电器就可以实现,有了异或运算,我们就可以实现更复杂的运算,下面就和我们实现一台”计算器“直接相关了
一个异或门和一个与门,形成一个”半加器“,图示下边的符号表示一个半加器,这里是新一层的抽象,从布尔逻辑运算到”计算器件“的抽象
有一个半加器,距离我们实现手工打造一个”计算机“还很远,然而两个半加器,一个或门,可以实现一个”全加器“,为什么叫全加器呢?因为我们使用它可以实现一位加法的计算!(这里是二进制,问题的题目,为什么计算机能读懂”0“和”1“,看到这里是不是心头一喜呢?)
有了一位”全加器“,我们实现8位加法的计算还远吗?当然不远,8个全加器,按图示相连,就可以实现8位加法计算(和我们在纸上进行加法运算很像,进位的操作很显然。当然,这里都是进行二进制加法),右下方是8位加法器的表示方式。
要是这会儿在19世纪,在电力革命的年代,我一定要亲手打造一个计算器!
画的比较简陋,见过卡车上的按钮吗?上下拨动的那种,这是我穿越回19世纪站在专利局门口,阐述我”伟大”的发明,“我发明的计算器,有两排输入按钮,每个按钮上下拨动表示输入的是0或者1,最下排是9个灯泡,灯泡的亮与灭,指示这一位是0,还是1,我的发明是划时代的,可以把人类从繁杂的计算过程中解救出来...”
“什么?就因为我的计算器不能实现减法运算儿拒绝我的专利申请,减法运算?减法运算,怎样实现计算机的减法运算呢?”
计算机发展过程中,最重要的思想是“抽象”,一层层的抽象封装了实现的细节,使的计算机开发人员更关注与逻辑的实现,相信有了我上面的表述,读者应该能看懂下边的抽象思想:
这个电路实现了把输入的数据取反(0-&1,1-&0)
这是求补器的“抽象”
减法的逻辑实现我直接给出,相信读者也应该能看明白
我还清楚的记得,在计算机组成这门课上,老师讲述,原码和补码概念,“在计算机内部,正数的补码是它本身,负数的补码,记得取反加1“,为什么取反加1呢?看看上边的实现,计算机内部如何实现减法?有个取反操作,还有个进位操作,这不正是”取反加1“吗?
下面从逻辑实现层,回到物理层,思考下,需要多少继电器才能实现这样的 ”小发明“,算了,吓一跳吧?然而我们的计算机先驱康拉德·楚泽花费了十年心学,3000多个继电器才早出一个计算机原型,所以,,,本着向先哲致敬的精神,让我们在大脑中”打造出“一台计算机
”我的专利不仅仅能实现加法操作,也能实现减法操作,计算具有普遍性,具有划时代的意义,可以把人类从复杂的计算中解救而出来...“
至此,我们实现了一个简单的计算器实现,不难吧?然而这才只是万里长征的第一步。
接下来我来说说,计算机是如何存储信息的,这真是个费力活儿,在不太遥远的过去,二十年前,计算机的存储量还非常有限,我记得初中那会儿还没有MP3,用磁带听歌,直到最近,存储技术才有了长足的进步,当然这是后话。
第二节,计数器
人类的感官,听觉,触觉,味觉,视觉,感官器官接受外界的刺激,在大脑中留下神经信号,进而形成对“外部世界”的认识,那抽象的事物怎么去认识呢?
电灯通电点亮灯泡,高中的物理知识解释,足够了。电可以让物体运动,这个道理人人都懂。坐在回家的高铁上,让我想想一下高速列车是如何运动的:驾驶员按下通电按钮,带动电车引擎,电车引擎通过传动装置把牵引力传给电车车轮,列车得以启动。高速列车的动力系统也相当复杂,我不了解每一个实现的细节,但是我可以想想出电车引擎的工作原理,为什么?因为这些都是实实在在的实物,看得见摸得着。那我想想出计算机的工作原理吗?答案是不能,为什么?因为计算机一层层的“抽象”,一个小小的物理器件上集成了上亿的基本元器件,使计算机真正的工作原理是我们越来越遥远。
下面还让我们回到19世纪末,二十世纪初,那个激荡人心的电力革命的年代,让我们去还原真实的技术实现过程。回到高中物理课堂
我们已经讲解了如何去制造一个一台简易的“计算器”,不知不觉下课了,这时我听到一阵刺耳的下课铃声。电铃和计算机有关系吗?我直接上图吧
注意看旁边的那个金属小锤子
电铃的工作原理如上图所示,大家想象下,电铃的小锤子震荡起来敲打金属盖发出声音的情形,duang,duang,daung,形象吧?(这种电路叫做震荡器)
振荡器是不是可以实现计数功能呢?交替的输出0和1,哈哈,感叹造物的神奇吧!
下面我们再来看一些神奇的电路,当初的先驱们是怎么想到这些复杂而精致的设计
闭上上方的电路,灯亮了
断开上方的电路,灯依然在亮
闭合下方电路,灯灭了
断开下方的电路,灯依然不亮
电路的奇特之处在于:同样是在开关都断开的状态下,灯泡有时候亮,有时候不亮,当开关都断开时,电路有两个稳定状态,这类电路叫做“ 触发器”。(英国物理学家1918在工作中发现的)
触发器电路可以保持信息,确切的说,可以“记忆”某些信息,他可以“记忆”那个开关先闭合。触发器是一个大家族,大家要是有兴趣可以去看相关资料。请记住一点!触发器是用来“记忆”信息的,我再给出两类常用的触发器
这个叫做“D型触发器”,具体实现如上图,我们的表示一直都停留在很“底层”,一直都很关注实现的细节,随着细节实现越来越多,我们需要上升到高一层的层次,更加关注功能的实现,而不是陷于细节实现的泥潭!(想一想,为什么说,计算机具有与生俱来的层次结构)
数据端简写为D,时钟端简写为Clk,功能表如下:
脑袋里想象下,触发器是一个很听话的孩子,当clk端通电时,相当于告诉孩子,“孩子啊,你要记住我传给的信息”,clk断电时,孩子在自由自在的玩耍,完全不接受任何传过来的指令,很形象,不是吗?
在D型触发器的基础上实现了更复杂的功能,“ 边缘触发的D型触发器”
“抽象”图again,抽象的思想,使我们脱离的细节实现(上图),更加关注功能
向上的箭头,表示电信号从0到1变化的那一瞬间有效,再次在脑袋里想象下,触发器是一个很听话的孩子,当clk从0-&1变化时,相当于告诉孩子,“孩子啊,赶紧接住我给你的球,球在这里指信息”,其他状态下,孩子在自由自在的玩耍,完全不接受任何传过来的指令。
有人问,说了这么多,到底想干什么?好的,告诉你,用这些可以实现一个计数器,记得小孩子学数数吗?我们要做的的就是要用机器来从0开始数数,真的吗?恩,离这一步已经很近了,不信看下边
简单的,把振荡器和触发器相连
电平信号的变化
稍微扩展一下,实现更复杂的功能,应该能看明白吧
电平信号的变化(标上0和1)
嗨嗨,清醒下,我们得到了什么?把上图顺时针旋转90度,你发现了吗
这不就是在计数吗?用二进制的方式计数!
把8个触发器连接在一起,然后放入一个盒子里,构成了一个8位计数器,能从0数数到2^8-1,(0-255),这个计数器称为“8位行波计数器”
现在,我们已经懂得如何继电器来做加法、减法、计数了,这一件很有成就感的事儿,使用的技术也是100多年前就存在的技术。
第三节 存储器
我想用继电器打造一个存储量为64K x 8的存储阵列,我能实现吗?这会儿可是在二十世纪初!如果我穿越回那个年代,一定会再次为我的“发明”申请专利,如果真是这样,那计算机的发展史上会留下我的名字(呵呵,意淫一下),下面就看看我是如何实现我的“发明”吧
上节,我已经提到,触发器可以“记忆”1位的信息
就是上图这个样子,我们把它抽象成:
我们把上图称作“1位锁存器”,想一想,两个输入线和一个输出线都是什么意思,我上节已经解释过,来、来、来,想一想那个淘气的小朋友。
有了“1”,那么距离“100000”还会远吗?无非就是如何组织n个“1”,“抽象”的量级提升的过程
这是8位锁存器
简写成这种形式
再来看两个神奇的发明,或许你也会为发明者神奇的构思所折服
我想制作出这么一个元器件,他要实现这些功能。想想一下,某一天,你成了一个名人,每天前来拜访的人络绎不绝,今天呢,来了八个人,但是你时间有限,只能见一个人,那就让5号来吧(把拜访者编号,0-7),5号拜访者带来了自己的礼物(0或者1的信息)。看图,左边的三根线表示拜访者的地址(当然是二进制编码),000,001,010,011,100,101,110,111,5号就是101,这时候呢,我只需要把S0和S2通电,那么5号拜访者就进来了,献上自己的礼物(1位的信息)。
怎么实现这个功能呢?有兴趣的自己去研究下面实现,请记住,我们现在讨论的内容抽象的层次已经不是最最底层的实现了,而是更加关注于逻辑器件实现的功能
这叫“8-1选择器”
反过来,我有一封信需要送出去,这封信的内容是0或者1,现在我也有8个快递小哥可以选择,编号分别是000,001,010,011,100,101,110,111,我让谁去给我送信呢?那就还是5号吧,于是我把地址分别设置为101,5号小哥就去给我送信了,给出具体实现,有兴趣的自己去看吧
这个电路名儿叫做“3-8译码器”
有了8-1选择器和3-8译码器,就可以制作出一个8位存储器了
again,把复杂的电路实现,抽象成简单的符号表示
读/写存储器,通常叫做随机访问存储器或者叫RAM,RAM可存储8个单独的1位数据
如何得到16 X 1的RAM呢?相信大家都能想到,用2个 8 X 1的RAM,我仿佛回到了《计算机组成》的课堂,让我再来做一次作业吧
简写如下:
这种方式或许正确,但是使用了三根地址线,两根数据线,能不能使用4根地址线1根数据线呢?
加一个2-1选择器不就行了吗?(设计一个2-1选择器,这会儿应该不算什么难事儿)
再次用符号简写:
回到我们的出发点,怎么得到64K X 8的存储阵列呢?
无非就是努力提高8位锁存器的集成程度嘛,我可以想象,读者看到这里,脑子里全是密密麻麻的的连线,或许你还一时想象不到连线的方式,但是看到这里,64K X 8的存储阵列一定能用某种方式实现,对吧?虽然没有实现其电路图,但我也可以说,我理解了存储器工作原理,(你懂了吗?)。
1024 X 8RAM的符号表示,2的16次方,即64K,地址线有16根,数据线有8根
为了申请我的专利,我需要做出一个机器的外部壳子,和第一节中的“计算器”一样,把这个机器的壳子把我所有实现的过程封装起来,形成一个“黑盒”,只保留几个外部的接口(也就是那几根数据线,一定要记得他们的功能),我要做成的外部盒子是这个样子
上一排的对应16根数据线,下一排有8根数据线,这个不用解释,相信把上文看完的都能明白什么意思,takeover这个按钮表示是否使得当前控制面板处于“激活状态”,也就是说,这个开关的作用是确定由控制面板还是又外部所连接的其他电路(从来没说过,没有连接外部其他电路,或者想象下,我这个机器壳子外面有一排的针孔,外部电路可以接进去,想想电脑机箱后边的针孔,就是这个意思,Soga)来控制。如果有其他电路相连。这时候takeover为
0(图示状态),此时存储器由其他电路接管,控制面板上的其他开关不起作用,当takeover为1 时,控制面板将重新获得对存储器的控制能力。
最后还是给出电路实现
想一下,机器壳子后面的针孔连那里,控制面板的开关又连接哪里?
简化的图示,是不是又用到“抽象”的思想呢?
一个辛辛苦苦装满65,536字节(8位为一个字节,字节编码请去参考ASCII编码)珍贵数据的64K X 8的RAM阵列,如果断电,会发生什么事情?首先电磁铁会因为失去电流失去磁性,随着“梆”的一声,金属片讲弹回原位,RAM中的所有数据将如风中残烛一般消失在黑暗之中,所以,RAM也成为“易失性”存储器。
那我一手打造的64K X 8的存储阵列,需要多少继电器呢?答案是是500W左右,是不是惊讶到恐怖呢?谁会没事儿造出这么个恐怖的怪兽?(100年后的今天,用二极管,三极管,集成这么多元器件的芯片,连指甲盖的大小都不到,感叹人类技术的进步吧)。
我穿越回二十世纪初,再次站在专利局的门口,为我这项“伟大的发明”申请专利,瑞士专利局的爱因斯坦会因此吓尿吗?世界上最聪明的大脑,能理解“黑箱”背后发生了什么吗?
第四节 自动操作
说了这么多电子线路的知识,我相信的我的讲述方式,大家都是能看懂的,前面所写的,其实只是为大家讲述一件事儿,“把电子元器件内部实现展开”,现有的一个个电子元器件,现在就是一个个小工具(把内部实现封装起来,保留外部接口,外部接口,就是那一根根地址线,数据线,和其他开关)、原材料。那我们现在看一看现在都有那些原材料呢?
计算器:一个会算数的小朋友,每次你把要进行计算的两个数给他,拍一下小朋友的头,小朋友帮我算一下吧,他会把计算的结果给你,没有一点误差,计算速度很快,并且乐此不疲。
计数器:一个一直在数数的小朋友
存储器:辛辛苦苦装满了64K 字节的箱子
译码器:《唐伯虎点秋香》中有个代号,9527,一个数字,你说它什么意思呢?如果,我“规定”9527指的是唐伯虎,让译码器来做这件事,译码器你把9527给我带过来(地址线用2进制表示的二进制是多少呢?),这时候译码器“很听话”的把唐伯虎叫过来。(在这里,机器“理解了”人类的语言吗?)
有了这些原材料,我们就可以着手打造一台computer了,我们的工作才刚刚开始,请读者保持耐心,我们最终要实现的是一台通用计算机,这台“先进的”机器可以使加减法的过程自动化,is that unbelievable?这台机器可以解决所有能有加、减法处理的问题,而事实上现实中的许多问题确实可以用加法与减法来解决。
让我来回顾一下自己的教育经历。从咿呀学语之后,幼儿园开始,我们就要开始一生的学习了,小学的数学课现在还叫不叫“算数”?刚开始,我们扳着自己的手指数数“1,2,3,4,5,上山打老虎...”,学会数数之后呢?老师先教我们加法与减法,那么乘法和除法呢?我依稀记得,是用加法和减法来实现的,对吗?
加法与减法,可以从底而上,构建更加复杂的算数系统,以至于,微积分也是建立的基本的算数系统之上,我还清楚的记得泰勒公式带给我的震撼,记得第一次见到牛顿迭代法时的情景。
最美的数学公式之一,不解释为什么了,参考大学微积分
假如,假如我们已经实现一台可编程的最原始的执行加减法运算的“计算机”,如何计算出e的值呢?
想明白这一切,就需要我们了解“自动操作”的过程,了解程序的本质什么?编写程序的过程就像堆多米诺骨牌,辛辛苦苦,小心翼翼堆了半天,只为了那一下推到骨牌的快感!下面这一部分内容较难,请读者一定保持耐心,我会试着按我自己的理解讲清楚,如果我有理解不对之处,欢迎大家指出来,讨论改正
新纪元-能接受“指令”的计算器
有人问我,真的可以用上述提供的那些原材料(计算器、计数器、存储器、译码器)造出一个计算机吗?就像维克多·弗兰肯斯坦组装怪物一样,当一切都已经就绪,看着我们一手打造出的庞大的怪物,小心翼翼的通上电,“醒来吧,孩子”,就像给他赋予生命一般,这些破铜烂铁奇迹般的苏醒过来,按照我给他的指令,完成我想要的工作,真的,人世间没有比这样的工作更让人神往了,你能理解《模拟游戏》中Turing对克里斯托弗的一往情深吗?至少他打动了我的心。
扯多了,我可以很明确的告诉你,只用那些原材料确实可以打造出一台计算机,并且历史上确实有人实现了!是谁?冯诺依曼?图灵?很遗憾地告诉你,no。主人公的名字,我前边已经提到了,他叫康拉德·楚泽,1935年还是一个工科学生的他,在位于柏林的家中打造出一个可编程的计算机,一共花了3000多个继电器。
接下来让我们穿越回到1935左右,让我们跟随“主人公”的思路,尝试打造出一台“计算机”。
还记得上小学时,你学完数数,学完加减法之后,大人们常常考考你的题目是什么?“你给我算一下从1一直加到100吧”,问题是,我能用机器代替我来算数吗?哦哦,简单,我的原材料里不是有“加法器”了吗?,稍作修改就行,好,看看我的设计
拿一个8位的加法器和一个8位的锁存器,按上述方式相连,每次我们可以通过加法器的开关输入我们要算的数(当然要输入的数是0-255之间,计算的结果也是0-255之间,在这里可以先计算1-10的和),我们小心翼翼的拨动开关,最后下方的一排指示灯显示计算的结果。简单吧(这个器件称作累加器)可是我一不小心输错了一个数怎么办?只有重新来算,完全再来一遍,好麻烦啊,有没有可以改进的方式呢?我突然想到,不是有存储器嘛,可不可以把我要计算的数据先存入存储器,再通过读取存储器的内容,把数据传送到加法器,执行运算,最后显示结果。
good idea!具体该怎么做呢,我给出一种实现方案
一个振荡器(想想duang,duang,duang的电铃),16位计数器(我们的存储器容量不是64K X 8么,需要16根地址线),一个64K X 8的RAM(RAM连接控制面板,控制面板可以输入数据,还记得控制面板的takeover按钮是做什么用的么?),一个8位加法器和一个8位锁存器。
让我们闭上眼睛,来想一想,这是怎么工作的。首先,请清零开关,然后闭合控制面板上的takeover按钮,这时候控制面板接管了存储器,如果要算的有100个数,我们一次调整存储器的地址线和数据线,把数据存入h的地址空间(这一部分你明白了吗,该怎么操作控制面板呢?上述地址空间用16进制表示)。数据输入完了,我们断开控制按钮(takeover键),这时候控制面板失去对存储器的控制,断开清零开关,这时候,计数器开始工作,0000h,电信号传入存储器的地址线,存储器呢,是一个忠实的仓库保管员,来,我看看你要取什么东西,他接过传来的地址,哦原来要0000h盒子内的东西啊,好,你拿走吧,(0000h“盒子”内的东西就是刚才输入的第一个数),第一个数据传入到加法器,加法器小朋友一看,好了,你和自身相加,这不还是你自己吗?他把计算结果给了锁存器,锁气器把计算的结果放入一个临时的盒子内。经过一点时间(很短)计数器变成0001h,还是和刚才一样,计数器小朋友把自己的数给存储器管理大叔,大叔根据传过来的数,把取出的数据传给加法器小朋友,加法器小朋友执行加法运算,把得到的结果给锁存器。他们是如此的兢兢业业,乐此不疲,“机械式”的完成自己的任务,没有一点儿怨言。
哎,计算的结果是什么?我怎么看到指示灯在闪烁,计算的结果哪里去了?哦哦哦,计数器小朋友实在是太敬业了,根本没有办法让他停止工作,当他数到FFFFh之后又从0000h开始数数了。
还有这样的计算也太机械了,功能也实在是太有限了,要是我想把100个数,分成50组,计算每一组的和,这又该怎么做到呢?聪明的读者你也动动脑袋想一想,怎么做到呢?
楚泽看到这里也许和咱们一样皱紧眉头,怎么做呢,怎么做呢?该怎样解决这个问题呢?这时候或许突然迸发出“革命性”的想法,把运算的结果存回到RAM阵列中不行吗?这样一来,就可以在适当的时候用RAM阵列 的控制面板来检查运算结果(按下takeover),为了实现这个目的,在控制面板上加一排显示灯。eureka!
改变之后的连线图
这里略去了一部分,包括振荡器和清零开关。这样做是很好,但是问题来了,怎样控制RAM写入信号呢(何时存入RAM,把结果存在什么位置?)
假如我有一个这样的计算任务要完成:首先对三个数进行求和,然后对两个数进行求和,最后再对三个数进行求和,图示如下
图中用一小段连续的纸条(标记上连续的格子)表示一小段存储器,格子内表示存的内容。怎样使自动加法器为我们完成这项任务呢?我们不能期待向RAM阵列中输入一组数,然后自动加法器自动完成任务,自动加法器怎样“理解”我们交给它的任务,它怎么“知道”我们要他们干什么?
为了完成这个任务,我们需要用一些数字代码来标示加法器需要完成的每一项工作:加载(Load)、相加(Add)、保存(Save)、终止(Halt)
有了上述的指令,我们就可以命令计算器来工作了(暂时不去了解如何实现),对于上述的任务,可以表示如下:
(1)把0000h地址处的内容加载到累加器
(2)把0001h地址处的内容加到累加器
(3)把0002h地址处的内容加到累加器
(4)把累加器中的内容存储到0003h地址处
(5)把0004h地址处的内容加载到累加器
(6)把0005h地址处的内容加到累加器
(7)把累加器中的内容存储到0006h地址处
(8)把0007h地址处的内容加载到累加器
(9)把0008h地址处的内容加到累加器
(10)把0009h地址处的内容加到累加器
(11)把累加器中的内容存储到000Ah地址处
(12)命令自动加法器停止工作
有了这些指令代码,那么这些指令代码存放在哪里呢?得了,不去想了,简单粗暴的解决方式就是在加一个RAM,一个RAM存放数据,另一个RAM存放数据对应位置的操作符(也就是上文指定的那些代码),再次对我们的机器进行改造,改造后的结果如下
观察要仔细啊,数据的RAM即可以通过Control Panel控制面板进行输入,也可以接受外部的数据,而存储代码RAM只能通过控制面板写入!
那么往存储代码的RAM里写入什么内容吧?机器又不认识load、store、add、halt这些单词。既然机器不认识,我就让他们认识!解决方式,就是编码,其实两位信息编码足够
操作码,代码
Load(加载),10h
Store(保存),11h
Add(加法),20h
Halt(停止),FFh
这样一来,存储代码的那个RAM里边要存的内容就一目了然了
看到这里,读者有疑问吗?还是我最早提出的那个问题,机器是如何“理解”人类的语言的,我虽然把要操作的指令用0和1进行编码,但你把编码之后的内容拿给我们一手打造的这台机器,他还是“不明白”什么意思,去进行何种操作啊!我们转来转去又转回最初的起点,你让冷冰冰的机器去“理解”人类的指令,无异于天方夜谭,机器就是机器,永远也不可能具有思维,当初,我在这里也是困扰好久,哦,原来如此!
我已经把答案告诉你了,机器就是机器,永远也不可能具有思维
我不管你有没有思维,你必须完成我给你的任务,你把上述的任务算个结果出来,这一点儿或许能办到,嘻嘻
为了体现Load和Add命令,我的机器内部又进行了部分改变,你看出差别来了吗?
其实上述有一小部分没有连线。again,闭上眼睛,跟我来想想机器执行的过程,可爱的小朋友们和敬业的大叔们又来了。计数小朋友把数据给两个RAM的仓库管理员,一个取出数据,一个取出指令。数据传给累加器和2-1选择器(这是个什么鬼)?数据到了2-1选择器小朋友的面前,发现了一道门,门上写着,“此山是我栽,此树是我开,要想从此过,留下买路财”,小朋友,让我过去吧,叔叔给你糖吃,2-1选择器小朋友说,“我只有一条路,你们两个人,我让谁通过呢?”(图中,2-1选择器接收了两组数据),就在这时候,2-1选择器小朋友,收到了一条指令,这条指令来自哪里呢?哦哦,刚才管代码的RAM大叔,取出指令(10h或者,11h或者20h或者FFh),他把指令交给“指令解析器”(图中没有画)指令解析器负责把信送给2-1选择器、RAM、计数器的指令接收端(也就是2-1选择器的S,RAM的W等,在这里称为控制信号,控制信号决定机器中某些部件是否工作或者决定某些期间如何工作。例如,如果代码RAM阵列输出是load指令,2-1选择器S端收到0,如果代码RAM阵列输出是Add,2-1选择器S端收到1,操作码是指令Store时,数据RAM阵列的W收到1。实现“指令解析器”很困难吗?想一想第二节中是如何送信的,3-8译码器,译码器实现只是一种方式,当然也可以用逻辑门来实现、你明白了吗?),2-1选择器小朋友收到了0,也就是要执行Load操作,8位锁存器把临时信息保存起来。然后计数器小朋友又开始数到了0001h,这些勤劳的小朋友和勤劳的大叔又继续工作了...
用这种方式,我终于实现了我的想法,这真是一件值得高兴的事儿,我要好好休息下,等等,休息之前,顺便扩展一下我们的机器,让它也能运算减法。好简单,增加一条指令不就行了?Subtract(减)
相应的,机器内部实现再改造下,增加一个取反器
布置一道作业题,取反器的那根控制信号线接在哪里?
数据“流水”
我们从继电器打造出门电路,进而实现加法器,计数器,存储器,都是为了向我们的那个终极目标一步步前进。这就像点亮科技树的过程,一步步提高,直到实现我们的终极目标--一台可编程的通用计算机,那现在来看看,我们的科技树点亮到哪一步了,现在我们亲手打造的“能读懂人类指令的计算器”,离我们的目标还有多远?
来看看我们这台机器能不能完成我们想要完成的任务。假设现在要把56h和2A相加,然后再从中减去38h,结果是多少呢?不是有指令了吗?来,设置指令,让机器去完成
由于指令和数据是分开存储的,我们分别通过控制面板在RAM中输入数据,启动机器,机器就“神奇”的计算出结果,可以用个控制面板来查看计算的结果。
如果我的计算任务扩大一些,算一算1W个数的和吧?啊?10000个数,这时候我可以想象,站在台机器前面的“主人公”满脸苦逼的表情,我们小心翼翼的输入这指令,Load ...,Add ...,Add ...,Add ...,......Store ...。然后我们再输入数据,这真是个体力活儿啊!当我们终于把这一切都完成之后,启动机器,Come on,baby!计算吧
让我们再次闭上眼睛,想象机器工作的情形,计数器多么像一颗跳动的“心脏”,过一段时间发出一次“心跳”,存储器收到心跳的脉冲,从此中取出数据,数据被传送到累加器“加工厂”等待处理,要通过一道道的“门”(2-1选择器),最后会传到存储器。每每想到这里,我不禁想起在欢乐谷水上漂流的过程,穿过一道道门,经过一间间屋子,每经过一道关卡,都可能被水淋到(数据被加工),最后转了一圈回到起点,机器内部执行的过程,就是数据坐在船上“流水”的过程,不是吗?
让我们来看看机器算出来的结果,这可真是一个激动的时刻,辛辛苦苦拨了半天开关,现在要见证奇迹了。“咦”?怎么结果不对,这数值也太小了!
哦,原来如此,我的累加器只能算8位的数据,让我去安静的哭一会儿去。
你可能想到,把两个8位的加法器连在一起构成一个16位的设备,这是一种解决方案,但是,还有代价更小的解决办法。
比如要计算76ABh+232Ch,最终结果是99D7h
我们可以把高低位分开来算
最后把计算的结果写回存储器
D7h被写入地址0002h处,99h被写入地址0005h处
这是很理想的状况,因为,在上述的例子中把高低位分开计算,低位计算恰巧不存在进位的情况。如果要把76ABh和236Ch这两个16位的数相加该怎么做?ABh+6Ch=117h;1h+76h+23h=9Ah。计算的结果为9A17h,怎么解决这个问题呢?可能有读者已经想到了,加一个进位锁存器(存储进位)不就行了?那我再问一句,“那我们的指令码是不是需要扩展一下呢?怎么使得译码器来触发读取进位的信号呢?”读到这里,读者也应该和我一样,我们现在不关心具体实现细节,一定会有某种逻辑门的组合来实现,对吧?下边我给出扩展的指令码(也叫作操作码)
上述指令中,增加了一个“进位加”(Add with Carry)和“借位减”(Subtract
with Borrow)有了他们,就可以极大的扩展加法器的功能,而不仅仅局限于8位数据的运算了,可以对16位,24位,32位,40位数进行加、减法操作了!比如对两个32位数7A892BCDh和65A872FFh进行加法运算。仅仅需要1条Add指令和3条Add with Carry指令
我们通过增加操作码指令扩展的我们的“计算器”,在通往终极目标的路上又迈出了坚实的一步,“数据流水”的方式也确实也可按照我们的意愿实现一些计算任务,但是,对于计算1W个数相加之类的任务,总不能期待一条条的输入指令吧?
让我们看看问题出在哪里。第一,对于上图来说,保存计算结果的存储单元地址不连续。第二。当前设计的自动加法器不允许在随后的计算中重复使用的前面的中间结果,一旦我们把计算的结果写回存储器,我们就无法再次读取它的值了。
产生上述情况的原因就在于,我们构造的自动加法器,代码的存储和数据的存储是同步的、顺序的,并且只能从0000h开始顺序寻址,直至停机。
要解决这个问题,需要对我们设计的加法器做一个根本性且程度极大的改变。我想几十年前第一代的计算机的设计者康拉德·楚泽,Turing等人一定会为这个问题寝食难安,因为解决了这个问题,才可以实现真正意义上的“自动操作”,这个问题也是计算器与计算机最根本的区别。
没想到会有这么多人点赞,谢谢你们的鼓励,我们的万里长征已经看到胜利的曙光了,马上就要迎来激动人心的时刻了,请保持最后的耐心。
数据“转圈圈”
再次看一下我们设计的机器,代码的存储和数据的存储是同步的、顺序的,并且只能从0000h开始顺序寻址(计数器小朋友在一次计数,告诉存储器管理员大叔从哪个抽屉里取数据),直至停机。但是,如果我的数据是连续存储的,并且在任意地址保存数据(也就是说,存储器存放数据的抽屉式随意的,我们只知道抽屉的编号),该怎样去取数据进行计算,并且存储计算结果啊?这时候我突然听到一声,“你傻啊,你把要取数和存数的抽屉编号告诉我不就行了?”,管理员大叔一语惊醒梦中人,是啊,有了存储器的地址不就行了?可以把数据的地址与数据的内容分开存!这可真是石破天惊
那就再次改变我们的设计吧,
这次,我们把指令(代码和数据的地址称为一条指令,先得到数据的地址,在根据地址取数据)放在一个RAM中,把数据存在另一个RAM中,并加了3个8位锁存器(临时存放8位数据),示意图只画出了改变的部分,其余部分与原来保持一致(累加器和代码解析器还有相应的控制信号)。指令占1个字节,16位的数据地址占2个字节,一条指令共占用3个字节,每次从RAM中取出1个字节,所以每次取出一条完整指令需要3次计数,数据地址再次传给存储器(这里多加了一个RAM),RAM取出数据传给加法器,而代码的解析与数据传输到加法器进行计算操作也需要1次计数,这必然需要更加复杂的控制信号。
从存储器中取出一条完整指令的过程叫做取指令,机器响应指令码的一系列操作的过程叫做执行指令,虽然机器可以自动取出指令,并执行指令,你能说它是一种“有生命”的东西吗?
看到这里有人可能要问,我们现在不是假设在1935左右吗?RAM是很奢侈的(500W个继电器),能不能想法舍弃掉一个RAM?把指令(代码和数据地址)与数据存在一起就可以了,这简单,还记得2-1选择器小朋友吗?(存储器部分提到了)
很简单,得到数据地址之后,把地址回传给存储器(此时计数器小朋友的计数无效),再次根据地址取出数据。
来看一个小例子吧,计算45h+A9h-8Eh=?,假设45h,A9h,8Eh分别存在地址0010h,0011h,0012h处,计算的结果存于0013h处。我们应该给机器这样的指令:
把0010h地址处的字节装入累加器,
把0011h地址处的字节装入累加器,
从累加器中减去0012h地址处的地址,
把累加器中的内容保存到0013h地址处,
数据的存储可以是任意的,我们只需要知道其相应的地址,那么指令呢?指令还是机械的顺序的往下执行,会不会出现这种情况,顺序执行指令,可是数据和指令地址冲突(要存指令的地址处已经有了重要的数据,需要跳过),指令能否跳过某一段区域,继续执行呢?
这涉及到指令寻址方式的改变(耐心听下去,我们万里长征,最终的一步来了,跨过他,前方就是一马平川),怎样跳过某一段儿区域,继续执行指令呢?那就jump啊,对,扩充一条跳转指令(Jump)
相应的机器内部实现也要改变
在上一步基础之上,增加了一条到计数器的数据通路,相当于告诉计数器小朋友,“小朋友,你下次从我告诉你的那个数开始计数,叔叔给你糖吃,乖~”
让我们回到电子线路中,计数器的实现,振荡器和D触发器串联方式(16个D触发器),我们稍作修改一下边缘型触发的D型触发器
可以不用了解上图的实现,请注意我们现在重点不在于具体实现,而在于实现某一功能,我们需要为16位计数器的每一位都设置一个这样的触发器。一旦加载了某个特定的值,计数器就开始从该值开始计数(是不是用糖果把计数器小朋友收买了,呵呵)
Jump(跳转)指令确实很有用,但是一个有条件的跳转更有用(“我是个有原则的人,除非满足我的条件才jump”),比如要计算A7h与1Ch(十进制的28)相乘的结果,和28个A7h相加的结果相同,计算过程涉及到大量的重复操作
假设乘数和被乘数以及计算结果保存在一下地址:
1000h:00h,A7h,(16位乘数保存在此处)
Ch,(16位被乘数保存在此处)
h,(16位乘积保存在这两个连续的地址空间)
当这六条指令执行完毕之后,存储器1004h和1005h地址保存的16位数与A7h乘以1的结果相同。还要把这6条指令反复执行27次才能达到乘法的目的,如果在地址0012h处置放一条Jump指令会怎样?
这个过程不会停止下来,它会一直反复执行下去!
我们需要这样一种Jump指令,它只让这个过程重复执行所需要的的次数,这种指令就是条件跳转指令,怎么实现它呢?我给出一种实现方式,简单看看就好
这种锁存器叫零锁存器,当8位加法器输出为零时他锁存的值才是1。有了进位锁存器和零锁存器以后,可以为指令表新增4条指令
非零跳转指令只有在零锁存器输出为0时才会跳转到指定的地址,如果上一步的加法、减法、进位加法或者借位减法运算结果为0时,将不会发生跳转。只需要在常规的跳转命令的控制信号之上再加一个控制信号
那么继续刚才提出的问题,0012h地址之后的的指令为
Store指令不会影响零标志位的值,只有Add、Subtract、Add with Carry、Subtract with borrow这些指令才能影响零标志位的值,当执行到地28次循环时,1004h和1005h地址保存的16位数等于A7和1Ch的乘积。1003h地址保存的值为1,他和FFh相加的结果为0.零标志位被置位!Jump If Not Zero指令不会再跳转回到0000h地址处,程序执行完成。
现在可以说,我们这台不断完善的机器真的可以称得上是一台真正意义上的computer了!条件跳转指令将计算器和计算机真正区分开来。
那么,你现在明白了吗,为什么计算机能读懂0和1?计算机和程序到底是什么?
数据被附在电流上不断地转圈圈(循环的过程),当满足某一条件之后,得到最终结果。
把上述机器码表示成助记符的形式
那么这个乘法的程序可以写成这种形式
编码时最好不使用实际地址,用label来指代存储器中的地址空间,所以上述程序可以改写为
终于在春节到来之前写完了,算是圆了自己的一份小小的心愿。
写的不好,欢迎大家批评改正。
173 条评论
同学的答案中已经回答地相当仔细了,相信有钻研精神的朋友读完他的答案,就能在布尔代数原理和基本电路原理上对计算机的0和1有一个感性的认识。唯一有点美中不足的是他没有在物理层面上解释电路器件的运作方式,那么答主就来解释一下计算机的硬件核心:IC电路在物理层面是如何工作以及是如何制备出来的。
首先还是通过两个不同层面的基本介绍来总结一下
同学的答案。
一、逻辑实现
IC数字电路中,用高电压(比如3.3V)代表1,低电压(比如0V)代表0。利用布尔代数的与、或、非基本逻辑,就可以构造出不同的电路,实现复杂的运算。
与逻辑:1与0=0、1与1=1、0与0=0
或逻辑:1或0=1、1或1=1、0或0=0
非逻辑:非1=0、非0=1
比如要实现一个1位的加法器(C=A+B):
因为是1位加法器,我们就不考虑进位了。那么逻辑的实现就是:
C=(A 与 非B)或(非A 与 B)
这样在逻辑上一个简单的加法器就实现了。复杂的IC数字计算电路,就是由几亿个这样的简单逻辑构成的。
在这一个层面的总结中,我们了解到,IC芯片的数学原理是布尔代数,这是芯片工作的逻辑基础。
二、电路实现
以上介绍的只是纯逻辑的实现,那么怎么在电路上把它实现出来呢?举个最简单的例子,非逻辑,我们用一个称为非门的电路来实现。
以上是一个非门的电路表示。如果Input为高电压(代表1),Output就是低电压(代表0),反之亦然。图中,Vdd表示高电压,Vss表示低电压(接地,即为0)。
PMOS可以看做一个用G端电压控制的开关器件:如果加在G端是高电压,那么PMOS可以看做是断线,如果加在G端的是低电压,那么PMOS可以看做是一根导线。NMOS正好相反,如果G端是低电压,则是断线,如果G端是高电压,则是导线。
那么看这个非门的电路,当Input为高电压时,PMOS断线,NMOS导通,Output相当于接地(Vss),那么Output就是低电压了;当Input为低电压时,PMOS导通,NMOS断线,Output相当于接Vdd,那么就是高电压。
这样我们就在电路层面实现了最基本的门逻辑-非门。与逻辑和或逻辑可以使用相似但稍复杂的电路来实现。IC数字电路归根结底都是靠这三种电路来实现的。
在这一个层面的总结中,我们了解到,其实计算机的工作原理并没有想象中那么“智能”,其实跟用水闸开关控制水流的冲力去推动风车转动的基本思想是一致的。计算机并不“懂得”0和1,它只是靠我们精妙的组织具有特定特性的物理器件,让器件发挥自身的物理性质,从而能在电压上反应出一个计算电路的输入和输出。
有了以上总结,我们就可以研究现代IC芯片的基本器件单元:MOS管了。
从以上介绍中可以看出,数字电路中最重要的器件就是MOS管了,分为PMOS和NMOS。不同于电阻、电感、电容等基础电子器件,MOS管的导通与否是通过G端的电压来控制的,那么就不能使用最基本的电阻器等原件来实现了,需要重新设计一种器件。
以NMOS为例:
以上是一个NMOS的剖面图。黄色区域为掺杂了正离子的硅,绿色区域为掺杂了负离子的硅。上面的三块灰色区域为源(Source)、栅(Gate)、漏(Drain)的电极,分别对应了非门电路中NMOS连接Vss、Input(G)、Output的三个电极。从以上非门的介绍中可以了解到,我们使用NMOS,是希望通过控制Gate的电压,来控制从Source到Drain能否导通。
如图所示,现在红色虚线勾勒出的区域,从左到右形成了一个N-P-N的结构,表示掺杂了负离子的硅-掺杂了正离子的硅-掺杂了负离子的硅。因为正负离子的同性相斥、异性相吸的特征,在P、N的交界处,会形成一段“耗尽层”,其中是没有电子的(都被同性相斥、异性相吸到其他区域去了),那么如果Gate上不加电压的话(电压为0),从Source是Drain是不能导通的,对应了以上电路分析时的断线情况。如果Gate上加上合适的电压,那么情况就不一样了,因为电压为正,那么会吸引下方红色虚线勾勒区域内的负离子到Gate的下方来(电容器原理),从而在Gate下方形成了一段有负离子(N-type)的区域,也就是说原来的掺杂了正离子的硅在Gate下方的一小段区域发生了翻转变成了掺杂了负离子的硅,这样就将Source和Drain连接了起来。因为Source和Drain本身也是连接着负离子区域,这段区域就相当于一条导线,那么从Source到Drain就导通了。这就是NMOS能通过Gate控制导通能力的原理。PMOS原理类似,只不过掺杂的离子极性和NMOS刚好是相反的。
由以上介绍我们知道,控制芯片电路中的“水闸”其实是一个运用电子的基本物理特性工作的人造器件。在现代电路中,这样的器件尺寸是非常小的,基本在100nm级别(也就是说人的头发丝的截面可以放得下几百个这样的MOS器件)。那么这么小的器件,人类是怎么制造出来的呢?
四、物理实现
了解了MOS管的功能和它的结构后,就可以继续了解CMOS工艺了。CMOS工艺的目的就是在硅晶圆上通过多道工序,建造Source、Gate、Drain结构,实现NMOS和PMOS管,从而构造出与或非门,构建出更复杂的逻辑。硅晶圆其实就是从沙子中提取出来的硅单质,我们把它制作成薄片,在表面同时制备成千上万个MOS器件,形成IC芯片。
首先介绍一下一些基本工艺的目的和原理:
1、 生长SiO2:将硅晶圆放入通了氧气的烘烤炉中,使Si氧化,在表面生成一层SiO2。一般是为了绝缘。
2、 光刻(湿法):因为半导体器件的尺寸非常小,不可能通过机械手段加工,所以只能通过刻蚀的方法。原理是先在要刻蚀的表面均匀涂抹一层光刻胶并烘干,然后通过掩膜板(上面绘制了需要刻蚀出的图像,需要刻蚀的部分为透明的,不需要刻蚀的部分用黑色阻挡),将紫外线照射到光刻胶上。光刻胶分为正胶和反胶,如果是正胶的话,照射到紫外线的部分就溶解掉了。这样,需要刻蚀的部分上覆盖的光刻胶就被紫外线透过掩膜照射溶解了,而不需要刻蚀的部分因为紫外线不能透过掩膜的黑色部分,所以仍在器件表面。这时将器件放到能溶解其表面物质的溶液中,被光刻胶覆盖的部分因为接触不到溶液,所以不会被去除,而没有光刻胶的部分就溶解掉了,于是就在器件表面形成了需要刻蚀出的图形。
3、 离子刻蚀:前序步骤和湿法光刻是一样的,都是用光刻胶形成图形。但是不同于用溶液溶解,离子刻蚀是使用高能离子打向器件表面,没有被光刻胶保护的部分就被打掉了,被光刻胶保护的部分留了下来。
然后我们就可以了解一下MOS的具体制备流程了(以下图片来自FSI)。
1、 STI浅沟槽隔离:STI的目的是为了在IC电路中,将各器件隔离开来,否则会有漏电等情况发生。STI使用SiO2作为隔离介质,因为SiO2有良好的绝缘性。
首先将切下来的硅晶圆做清洁。
在Si表面生长一层很薄的SiO2,然后在上面覆盖一层Si3N4。这里Si3N4起到一个占位的作用。
涂抹光刻胶并烘烤,用紫外线透过掩膜进行光刻。
没有被掩膜黑色区域保护的光刻胶部分就被去掉了,留下了被保护的部分。
干法刻蚀,就是离子刻蚀,没有光刻胶保护的部分被高能离子打掉了,从而形成了凹槽。
去除残留的光刻胶并清洁硅晶圆。
在晶圆上沉积一层较厚的SiO2,因为是沉积得到的,表面很不光滑。
通过CMP(化学机械研磨),将不光滑的表面磨平。
这时用能溶解Si3N4的溶液将Si3N4去除。之前提到,Si3N4是占位的作用,它去除后,SiO2的高度就略高于晶圆表面了,这也是为了起到更好的保护隔离作用。
2、 生长阱。阱就是之前介绍MOS管时的黄色区域,作用之前也提到过了,是为了形成N-P(阱)-N或者P-N(阱)-P这样的结构。
首先还是光刻,用掩膜留下跟需要刻蚀图形相同的部分光刻胶。
进行离子注入。假设我们是要制作NMOS,那么就注入正离子(形成P阱)。注意没有被光刻胶保护的部分会注入,而被光刻胶保护的部分就不会注入到了。
去除光刻胶并清洁表面。
退火,主要目的是为了让离子在硅晶圆中更好地扩散,形成合适尺寸的阱。
3、 制作栅(Gate)。Gate就是控制Source和Drain是否导通的部分,一般材质是多晶硅,现在有时也用其他材质了。
先对晶圆做一下清洁。
在晶圆上覆盖一层多晶硅。注意,要覆盖只能是晶圆表面全部覆盖,因为尺寸太小在这一步不能可能控制它的覆盖部分,只能在后续工艺中用光刻去除不需要覆盖的部分。
还是涂抹光刻胶,用紫外线透过掩膜照射,留下一部分。
湿法刻蚀,把没有被光刻胶保护的多晶硅去除。
去除光刻胶并清洁。这样就留下了我们需要的多晶硅部分了。不过这一部分形成的多晶硅层还不是Gate用的多晶硅,这个叫做牺牲层,主要是为了形成真正的Gate垫背用的。原因是由于Gate的尺寸很小,目前刻蚀工艺无法形成特别精确的矩形图形,所以使用了两步工序,这一步形成的多晶硅还会在以后被刻蚀掉,具体原理不再赘述。
再次覆盖一层多晶硅。
覆盖一层电极物质,一般是金属(比如Al)。
涂抹光刻胶并刻蚀光刻胶。
栅离子注入。没有被光刻胶保护的多晶硅部分就被注入了离子了,这是为了增强Gate的导电性。
去除光刻胶并清洁。
继续涂抹光刻胶并刻蚀光刻胶。注意这一步形成的图形就是栅真正的结构了。
干法刻蚀。没有被光刻胶保护的金属(黄色部分)和多晶硅(表面红色部分)就被高能离子轰击掉了,留下了我们需要的栅结构。
去除光刻胶并清洁。
在栅上覆盖一层氧化层(紫色部分),这是为了在下一步离子注入时保护栅。到这一步,栅(Gate)就制作完成了。
4、 在阱上制作Source和Drain的低掺杂部分。由MOS结构图可知,Source和Drain之间有一个N-P-N(或P-N-P结构)。之前在制作阱的时候,我们把中间的这个部分(也就是阱)制作完成了,现在就是制作两边的部分。
首先还是光刻,留下部分光刻胶。
离子注入,被光刻胶和栅保护的部分是注入不到离子的,而中间两块区域就被注入了和阱的极性相反的离子了,于是就形成了N-P-N或P-N-P的结构。
去除光刻胶和保护层并清洁。
5、 形成栅两旁的保护层。这是为了防止栅和源、漏之间由于量子隧穿效应形成漏电流。用SiO2保护就可以了。
沉积一层SiO2和Si3N4。
直接用高能离子轰击表面,控制轰击的时间,从而就把大部分SiO2保护层去掉了,留下了栅两边的比较厚的部分。
清洁表面。从以上步骤我们也可以看出,之所以MOS工艺中要用一步步复杂的光刻、刻蚀、沉积,主要原因就是因为器件太小了,没办法直接进行机械加工操作,只能通过化学或离子轰击的方法来制作,但是这些方法又只能针对一个表面,所以需要用光刻胶和掩膜板来一次次地制作保护区域,形成我们要制备的图形。
6、制作Source和Drain的高掺杂部分。之所以在制作Source和Drain时要分为高掺杂和低掺杂两块区域,是为了使用所谓LDD(轻掺杂漏极)技术,来抑制短沟道效应带来的Source和Drain之间的漏电流,并且提高MOS器件的横向耐压。
首先还是上光刻胶并刻蚀出图像。
低掺杂的离子注入,形成了两边的亮蓝色区域。
去除光刻胶并清除。
退火,使掺杂离子稍扩散。这样高掺杂和低掺杂区域共同构成了源和漏。
7、 金属硅化物的制备。主要是用来连接Gate和电极的,导电性介于金属和多晶硅之间。
首先是清洁表面。
在表面覆盖一层金属硅化物。
通过刻蚀等方法将不需要的金属硅化物部分去除,留下连接栅的那部分。
再次退火。到这一步金属硅化物(栅到电极的连接部分)就制作完成了。栅的形状是L形,之后会在L的尾部连接金属电极。
8、制作接触电极。栅、源、漏的硅部分已经制作完成了,现在要把它们用金属导线引出来,这样才能连接到电路中去。
首先覆盖一层SiO2和Si3N4。这是MOS管和上层导线的隔离层。
涂抹光刻胶,在光刻胶上形成几个穿孔。前面两个是用来连接源和漏的,后面那个是用来连接栅的。
干法刻蚀。用高能离子轰击晶圆表面,上一步形成的3个穿孔下方由于没有保护,SiO2隔离层就被击穿了,栅、源、漏就被暴露了出来。
去除光刻胶并清除表面。
在表面沉积一层金属,这样金属就填充了穿孔,从而连接了栅、源、漏,将它们引了出来。
CMP工艺,打磨掉表面多余的金属。
清洁表面。
9、制作金属层。这一层就完全根据电路设计中的引线来制作了,使用的金属材质和图形都是因设计而异的。
首先沉积一层介电层(就是绝缘层,用来隔离)。
光刻出跟需要制备的金属层图形相同的光刻胶层。
干法刻蚀,用高能离子轰击,刻蚀掉不需要的介电层。
去除光刻胶并清洁。
覆盖一层金属,这层金属填充到了介电层被刻蚀出的凹槽中,连接到了下方的金属电极。
CMP工序,去除掉表面多余的金属。
清洁表面。
然后就是根据电路结构继续制作金属互联层,一层层地连接到外部电路中去。一般一个简单的芯片需要10-20层互联结构。最后就是将芯片打上与外部电路连接的电极,一块完整制作好的晶圆就产生了。一般一块晶圆上会有几十块芯片,把芯片切下来就可以测试、封装、使用了。
如此,一块芯片就制作完成了。计算机通过以高低电压形式表示的1、0状态作为输入,在芯片上的千千万万个MOS管的作用下,得到同样是以电压形式表示的输出,然后通过以电压驱动的输出设备(比如显示器)显示给用户。整个过程其实是利用了电子的物理特性和极其精妙的器件组合,获得了一个“自动化”的处理方式。
102 条评论
既然是问最最原始的那个工作原理。。。
从小到大,我们被告知的都是,计算机只能读懂1和0,但我好奇的是为什么计算机它就能够读懂1和0呢,它是怎么读懂的?读懂后,又是怎样进行工作的呢?嗯...我想问的就是,最最基本原始的那个工作原理
+++理论的分割线+++
最最基本原始的那个工作原理甚至都和电无关,是数学原理,布尔代数(搜索),任何可以改变状态传递信息的技术都可以拿来实现布尔逻辑,而实现了布尔逻辑,就离计算机不远了。
像是三体里面的人列计算机,就是用三体人实现计算机,这一段我直接跳了,没什么可看的,因为我懂嘛。。。
我还设想过水流+开关实现逻辑门,是可行的。
「现在可以公开的情报」
+++基础实现的分割线+++
继续正题。。。
起初, 科学家 创造计算机, 科学家 说,要先有逻辑门,然后就用真空二极管实现了逻辑门
真空管的原理去搜吧
电子计算机的原理就是利用通电、断电(或曰高电平低电平)这两个状态来表示布尔代数中的逻辑真和逻辑假从而实现布尔运算,由于这个原因,设逻辑真为1和逻辑假为0,这样就可以用计算机表示二进制的数字了。
现在的计算机用的是晶体二极管,虽然底层原理不同,但是性质是一样的,这就是编程中常说的封装和抽象的好处,你不需要关心它的原理,用它实现你的功能就行了。
所以说起来,现代电子计算机的实现,是物理原理,计算理论,是数学原理。
二极管的性质是这样的,只有一个方向可以通电,反向不通电
『想知道具体原理的可以搜索PN结』
还有三极管(还有一种性质相似的场效应管FET),性质是这样的,b通电ec通,b断电ec断
『具体原理搜索NPN结』
【【【【配图】】】】
二极管和三极管
然后可以组成逻辑电路,下面分别是与或非(AND、OR、NOT)三种逻辑门的电路实现
【【【【配图】】】】
从左到右分别是与或非三种门,x j表示输入,m表示输出
有了这三种逻辑门电路,你就可以实现任意逻辑门了,比如与非门、或非门、异或门、同或门(异或非门)。(搜索逻辑门)
(实际应用中,是以与非门(NAND(Not AND) gate)为基础原件来构建电路,因为其他所有门电路都可以用与非门构建,关于这一点,你可以思考一下)
「现在可以公开的情报」
+++逻辑的分割线+++
二进制数字的加法如下:
1+1=10
用上文中的逻辑门就可以实现这个加法。
不考虑进位的情况下(术语叫半加器),用一个异或门就可以实现两个数字相加,很简单,就不画图示意了,自行思考吧。。。
考虑进位的情况下(术语叫全加器),稍微有点复杂,输入通过XOR(异或门)得到结果,同时过一个电路得到进位结果
进位规则如下:
1+1进位1
1+0进位0
0+0进位0
0+1进位0
可见进位规则可以用AND(与门)得到结果,所以电路图如下:
【【【【配图】】】】
把这样的电路串起来,就可以实现多位加法,自己想想看吧。
不过这里有一个问题,要连多个例图中的加法器,需要给电路添加一个输入口m,它是上一位的进位,有兴趣可以思考一二。
实际应用中,电路并不是凭空想的,是通过布尔逻辑运算得到一个最简逻辑表达式,然后按照这个表达式来组装电路,『请搜索数字电路』。
淘宝可以买到LED灯、二极管和三极管,虽然现在涨价了,但价格依旧感人,不到顺丰快递费就可以买一大把,有兴趣的同学可以自行购买这些元器件组装电路来玩玩。
输出端接上led灯,就可以观察到电路运行结果。
额外的,如果你把几个灯泡并联并且弄成一条线段的样子当做一个整体灯管,然后通过输入来点亮相应灯泡,就可以用来显示数字了。。
像下面这种,一共7个灯管
1点亮右边两根、2点亮相应的,以此类推
这样可以用布尔代数做出来5个输入7个输出相对应的逻辑,然后用上文的逻辑门组成电路图实现
(为啥输入是5个?)
「现在可以公开的情报」
+++分割线+++
太长了。。。
后续还有反馈电路、触发器、时序逻辑存储器等等等等,最终目标是弄出一个CPU来(如果我有时间的话)可以写一个模拟器让感兴趣的同学用逻辑门拼凑CPU(如果我还有时间的话)
『待续(应该大概真的会续)』
**不过最后还是想提醒还在学校的cs同学们,这些知识对找工作毫无帮助,请不要在此屠龙之技上浪费时间。
244 条评论
现代数字电路的基础是场效应管(模拟电子的基础是三极管),场效应管的基本机构是长这样的
蓝色部分平时处于绝缘的状态,此时源级(Source)和漏级(Drain)是不通的,电流不能从中间流过。当栅极(Gate)有电压时,一部分蓝色区域变成导体,源级和漏级就被打通了。这种材料可以表现出导体和绝缘体的两种特性,所以我们称之为半导体。由此我们获得了一个类似于开关的东西,可以通过是否给栅极电压,来控制电路导通与否,符号化地,我们将之表示为:
当我们已经拥有了场效应管,我们就可以以此为基础搭建基本的逻辑门,即 非门,与门,或门。我们来看一个简单的或门的实现(非门的实现已经有很多答案提到了):
或门要求,当输入的a和b任一等于1,输出就为1。如果a和b均为0.,则输出为0.
————————————————原理简介,可跳过————————————————————
假设现在a为1,b为0,此时a控制的场效应管的栅极有了电压,这个管子被打通了,这个场效应管的漏极直接与地(即低电平)相接,它的漏极又形成了输出F的场效应管的栅极输入,因为场效应管F的栅极没有电压,处于截止状态,输出F上拉到电源电压Vcc(高电压),输出1。
我们接下来考察当ab输入均为0的情况。此时ab两个管子都处于截止状态,F管的栅极会上拉到Vcc,F管会被导通,于是输出F与地直接相连,F为低电平0.
————————————————————————————————————————————
相似地,我们可以构建其他基本逻辑门,并以非门,与门,或门为基础,构建或非,异或,同或,与非门等复杂一点的逻辑门。
有了基本的逻辑门,我们如果把1对应真,0对应假,我们已经可以进行基本的逻辑决策了。但在实际情况中,我们做出一个决策,并不仅仅依赖于当前的输入,还依赖于之前的状态,因此我们需要构建带有记忆功能的逻辑组件,即触发器,看一个最简单的RS触发器:
它的真值表为
——————————————原理简介,可跳过——————————————————————
当RS均为0,触发器的两个输入为1(输入是RS取反),当Q为1时,下面的与非门的两个输入都是1,因此输出为0,上面的与非门输入为1和0,输出是1,因此Q保持1。当Q为0时,下面的与非门两个输入为1和0,以为内输出为1,上面的与非门输入为两个1,因为输出为0,因此Q保持0。
所以当RS为0时,Q输出与前一状态相同。
类似地,我们可以推到其他3种状态,得到上面的真值表。
————————————————————————————————————————————
我们可以看出,触发器的前一输出会影响到触发器后一输出。所以在某种意义上,我们称它具有记忆功能。触发器将会是构成状态机(控制单元)的重要基础组件。但为了对CPU的工作原理有更加全面的认识,我们暂时把目光从逻辑控制单元上移开,转向另外一个重要单元,计算单元。
3.2半加器和全加器
我们还是以逻辑门为基础。我们考察异或门的真值表:
我们发现,这恰恰就是二进制加法当前位的结果。
0+0等于0,0+1等于1,1+1等于0(因为产生了进位),因此我们很容易地想到,可以用异或门构造一个加法器(半加器):
S为当前位的结果,C为进位,当且仅当AB都为1时,产生一个进位1。
当然我们做加法时,是不能不考虑进位的,之前的半加器是不够完备的,一个完整的加法器(全加器)是这样的:
低一位的进位,和当前位的两个加数,共同决定输出。
好了,我们有了最基本的运算单位,加法运算单位。减法运算单位与之类似。从某种意义上讲,乘法运算可以看做是次数为被乘数的加法运算,除法可以看做是次数是被除数的减法运算,因为也可以用类似的方法实现(现代数字电路中,为了加快运算速度,已经不采用这种方法了,而是类似于我们用笔算乘法的逻辑,只不过是从10进制变成了2进制)。
这些数学运算单位,可以构成CPU的另一重要组件,计算单元。但仅仅有控制单元和计算单元并不足以组成CPU,我们还需要存储单元。
3.3静态随机存取存储器
不同的存储器的基本原理差别很大,有五花八门的存储器基于不同的单位成本,读取速度,是否需要上电保持来供计算机不同的应用进行选择,一一介绍冗长而又无趣,为了简单起见,仅介绍一种基于场效应管的存储器,静态随机存储器:
原理介绍我直接摘取了维基百科的内容,一如既往地,可以快速跳过以保持阅读的流畅性。
——————————————原理简介,可跳过——————————————————————
如果字线没有被选为高电平, 那么作为控制用的M5与M6两个晶体管处于断路,把基本单元与位线隔离。由M1 – M4组成的两个反相器继续保持其状态,只要保持与高、低电平的连接。
假定储存的内容为1, 即在Q处的电平为高. 读取周期开始时,两条位线预充值为逻辑1, 随后字线WL充高电平,使得两个访问控制晶体管M5与M6通路。第二步是保存在Q的值与位线BL的预充值相同,所以BL保持逻辑1,而Q与BL的预充值不同,使得BL经由M1与M5放电而变成逻辑0(即Q的高电平使得晶体管M1通路).
在位线BL一侧,晶体管M4与M6通路,把位线连接到VDD所代表的逻辑1 (M4作为P沟道场效应管,由于栅极加了Q的低电平而M4通路). 如果储存的内容为0, 相反的电路状态将会使BL为1而BL为0. 只需要BL与BL有一个很小的电位差,读取的放大电路将会辨识出哪条位线是1哪条是0.
敏感度越高,读取速度越快。
写入周期开始时,把要写入的状态加载到位线。如果要写入0,则设置BL为1且BL为0。随后字线WL加载为高电平,位线的状态被载入SRAM的基本单元。这是通过位线输入驱动能力设计的比基本单元相对较弱的晶体管更为强壮,使得位线状态可以覆盖基本单元交叉耦合的反相器的以前的状态。
————————————————————————————————————————————
4 冯·诺依曼结构
我们在3.1中讨论过的触发器可以进一步构成状态机,例如我们可以用两个按钮和一个RS触发器控制一个电机。当按钮为01时,控制电机正转,按钮为10时,控制电机反转,按钮为00时,控制电机保持现有方向不动。此时这个控制组件就是状态机。通过它,我们可以实现面对特定的用户输入,机器可以自动做出对应的输出。状态机将构成CPU中的控制单元。
从3.2中我们获得了一个计算单元。
从3.3中我们获得了一个存储单元。
加上我们最熟悉的输入设备(鼠标,键盘)和输出设备(屏幕,音响),我们现在已经足够搭建一个典型的冯诺依曼结构的计算机了:
连接各个单元的是总线,数据和命令都以01二进制码的形式,通过总线奔跑在各个单元之间。每当用户输入一个命令时(点击一下鼠标或者敲击一下键盘),控制单元会接受这个命令,根据程序员已经写好的决策方式(程序),决定从存储器调用历史数据,并将数据放入运算器中运算,最后的结果会在输出设备上得到展现。
但是我们之前对于状态机的讨论中我们知道,控制器只能接受0和1的控制命令,意味着程序员写程序时,需要挨个给每个状态机的输入变量和初始变量赋予0或1,因此写程序会变成不断敲击0和1的一件事。这无疑是十分反人类的,我们需要更加接近自然语言的程序语言。
我们讨论一种最简单的机器语言,如果我们用10110 来代表数据移动的操作(X86),某一个寄存器AL的编码是000,那么向AL写入61(二进制为)这个数这个操作,程序员需要这样写:
于是我们尝试,把10110 翻译成MOVE,把000翻译成AL,这样代码就变成:
这种用自然语言翻译之后的语言,就是汇编语言。汇编语言是用自然语言对机器码的一一翻译。以便于阅读和编写。
汇编语言当然比机器语言的可读性和可编写性都好上不少,但无疑还是十分让人蛋疼的,计算机科学家们又发明了诸如C语言等高级语言,它们的语法更加符合人的逻辑思维模式,而不是计算机的。编译器负责将这些高级语言,翻译成汇编语言,再翻译成机器语言。
基于C语言或者JAVA这种编程语言,还有一些更加友好的可读性强的脚本语言,例如WEB前端的Javascript,当然这些成熟的高级语言的区别将是一个繁复并超出我的能力范围的讨论,不展开了。天才的程序员们用这些语言,为我们编织了一个光怪陆奇又精彩纷呈的互联网世界。
最后的话:
在整个电子工业中,封装和复用的思想都贯穿其中,通过封装底层模块,让上一层的工程师不需要将精力花在冗长复杂的底层物理实现上,可以专注于自己算法和逻辑的推进。由于现代电子工业的快速发展,计算机计算能力的冗余越来越多,我们越来越不需要去关心底层封装的具体结构。当然了,对于一部分异常关注计算性能的方向,例如并行计算(计算量巨大)和嵌入式设计(有时微处理器计算能力有限),适当地关注底层逻辑实现,对编写更加高效的代码十分有帮助。
一般来说,问这个问题的和来参考的人肯定是完全没有学习相关课程的。所以我尽可能简单的从最基础的开始。请听我慢慢道来。
1.计算机怎么认识0和1的?
首先你应该听过二极管是什么,这是逻辑电路中最常见的电子器件。
额。。。又扯上“逻辑电路”了:逻辑电路是以二进制为原理、实现数字信号逻辑运算和操作的电路。
要想短短几百字说清楚还真难。不过,这里就看到“二进制”了,二进制就是问题中提到的0和1!而在实际电路中,0和1由低电平(低电压)和高电平(高电压)实现。非高即低,很容易实现。
回到逻辑电路,怎么用逻辑电路实现我们想要的一些功能呢?(这些简单功能就是计算机的基础,各项简单功能组合起来就能实现复杂的功能!)
首先,二极管具有单向导电性(原理就不说了,一下子很难懂的)。好,这个你先记住,把二极管看做一个箭头,电流只沿箭头方向走。
然后,给你举个例子。如果有个决定,你和你朋友只有两个人都同意时才去执行。回到初中物理知识。给你控制开关一,给你朋友控制开关二,都同意时才会把两个开关都放下,使电路导通,灯泡点亮。这就是一个简单的“与逻辑”。
当然复杂的电路中并不是人去控制开关的,所以得用二极管来实现。下面这个电路实现的是同一个功能。(画图神马的最折腾人了。。。)
当A,B都为高电平时(所谓的1),电源VCC的电流是不能通过D1,D2两个二极管的(电流只能从高电压处流到低电压处)。所以电流只能流向L点,如果在L点接个电灯泡(实际上是发光二级管),就会被点亮了。
还得继续解释,如果A,B中只要有一个为低电平(所谓的0),电流就可以通过了,就不会流向L点了,灯泡就不会亮了(为什么,想象一下电流为水流,导线为水管,而D1,D2处的管子是很粗的(几乎没电阻)!水流过不会有阻碍。而L处的水管是很细的(因为接了电灯泡,有电阻),水流很难流过,即使通过也是很小的水流(电流),不足以点亮灯泡。更确切的应该用电压去解释,能力有限,只能这么玩了。)
所以这个简单的电路就能实现一个简单的功能,而且电路能够识别1和0了!
2.计算机能用1和0做什么?
除了与门,逻辑电路中还有常见的或门,非门,或非门,与或非门等。(其中有些还要用到三极管,原理就跟上面大同小异了,只要了解的童鞋就不用管了)。
与门在电路图中的符号:
当A=1,B=1时,L=1;(1代表高电平,0代表低电平)
当A=1,B=0时,L=0;
当A=0,B=1时,L=0;
当A=0,B=0时,L=0;
或门在电路图中的符号:
当A=1,B=1时,L=1;
当A=1,B=0时,L=1;
当A=0,B=1时,L=1;
当A=0,B=0时,L=0;
非门在电路图中的符号:
当A=1时,L=0;
当A=0时,L=1;
然后我们就可以用这些门电路相互组合去实现复杂的逻辑功能了。
好,有了上面这些知识,下面来个实用的:计算机怎么做加法的?
就是上面那个电路就可以实现两位二进制数的加法了。容易扩展为更多位的加法运算,然后依次类推,可以用门电路实现减法,乘法和除法等。这样,不说是计算机,计算器的模型总出来了吧。
最简单的理解:这是一个庞大的机关兽。(参见“秦时明月”,千万不要当真!)
———原文在日报长评———
这个问题本身有个瑕疵:0和1指的是什么?
1. 我大胆的猜测题主指的是汇编代码。
高级代码(C++)经过编译后会转化为汇编代码传递给硬件,汇编是由一串特定长度的0和1组成。一般而言的64位计算机,就是指可以处理64位长度的汇编代码。而这一串0和1本身,包含了微指令以及一些变量,根据所处的位置不同,0和1们组成了不同含义的命令。
然后就是题主所问的计算机如何读懂0和1。以简单的芯片来说(如MIPS),片上系统由controller和datapath组成(不知怎么翻译)。前者可以理解成公司的管理层,后者就是具体干活的。controller接受了上文所术的微指令,就知道这个汇编代码是什么作用(比如“011001”代表读取数据)。然后controller告诉datapath哪些模块要工作,数据从哪条唯一的路走。你可以想象一下赛车,从起点到终点只能走一条路。最终,输入的数据走过规定的路径,被处理成期望的输出值。类似的过程不断上演,大量的数据经过处理后,我们就在显示器上看到反馈的结果。
2. 如果题主认为0和1指的是高低电压,那问题本身就不严谨了。
数字电路中认为有三种值:0、1和高电阻(在设计中还可认为有“不确定”状态)。而真实的电路中没有确切的高低电压值,不同系统规定了不同的电压范围代表不同的值。你甚至可以把电压分成十级,就得到了十进制。只能说现实是相对的,自然界没有明确的0|1之别,人类设计出来的规则让计算机识别了0|1。
3. 扯远一些。硅技术之后的有力候选者--量子计算机。量子本身有多个叠加态,不只两个,所以可以做到0、1、2、3……到时问题就变成了“计算机如何识别0、1、2、3?”
知识背景:VLSI Master
欢迎指正,谢谢读到结尾。
No,它根本不懂。就像算盘不懂你拨珠子时心中默念的口诀类似。但是这样并不妨碍最后得出你想要的结果。
至于为什么在它完全不懂的情况下,还能搞出点有用的东西,这是另一个问题。
知乎有个毛病就是有许多答主喜欢长篇大论不说人话,现在我试图用最简单的话来说明这个原理:
1. 只有数字电路才基于0和1,或者说布尔逻辑进行工作。模拟电路的输入是某个范围内任意的电压,输出也是某个范围内任意的电压,输入输出是个连续函数的关系,最简单的比如说放大器的电路;如果做过相关实验的话也会熟悉用运算放大器搭建模拟计算电路的方法。模拟电路可以进行许多各种各样的计算,加减乘除甚至乘方开方,输入输出都是用连续的电压表示。
2. 模拟电路计算有个致命的缺点:输出会受到输入噪声的影响,因而变得不稳定,不适用于严格的科学计算。元件的精度、老化程度也会影响计算的精度。产生这个缺点的原因是电子元件工作在线性区域,所以输出对输入的变化很敏感。
3. 正如上面所说的,电子元件工作在线性区时,输出会对输入的变化过于敏感,不适合精确计算。那么反过来,电子元件工作在非线性区时,输出对输入的变化是不敏感的。一个典型的非线性电子元件电路有两个这样的非线性区,以共射接法的BJT晶体管为例:
输入&0.7V时,晶体管截止,输出为最高电压(假设是5V);
输入&0.75V时,晶体管进入饱和区,输出为最低电压(约为0V);
输入介于两者之间时,晶体管处于线性工作状态,函数大概是5 - (Ui - 0.7) * 100,100是放大倍数,实际上一般会比100更大。在这段区域中输出对于输入是极端敏感的,不适合数字电路工作。
而前两种状态下,输入在相当大的范围(0 - 0.7V, 0.75 - 5V)中变化时,输出都是几乎不变的,也就是说输出几乎不受噪声影响,非常适合数字电路工作。
4. 因为我们的元件普遍只有两个非线性区,所以我们不可避免地用其中一个表示0,另一个表示1,而没有其他的状态去表示2或者3或者更多了。这并不是人类特别的喜欢二进制,而是受到了元件特性的限制。因为所有的变量都只有0和1两个状态,所以所有的逻辑都可以用布尔代数表示,这就构成了数字电路的基础。二进制计算只是布尔代数逻辑的一个特例。
那么你最后就应该明白了:计算机只能接受0和1两种输入是因为数字电路只能接受0和1两种输入,数字电路只能接受0和1两种输入是因为非线性电子元件只有两个非线性区。
我的这个回答针对的是小白,不叨扰专业人士。这里没有很专业的东西,不够严谨,但有助于小白稍微理解一下计算机如何通过处理二进制信息来运转。
1. 0和1组成的是二进制的数字,计算机内部处理的是0和1其实就是说计算机内部处理的是二进制数字
2. 计算机是

我要回帖

更多关于 安卓手机科学计算器 的文章

 

随机推荐