汇编教程2:汇编基础知识
那么让我们开始今天的话题…..
今天主要扯点计算机的工作方式,因为汇编是面向机器的语言,所以非常有必要了解下计算机的结构,CPU的工作方式.这里我假设你只有一点点最基本的电脑基础啊,最好自己去弄懂那个什么进制转换的,我觉得特麻烦,不过却也比较简单..我这里就不和大家扯了自己了解下~~那么既然假设你没有什么电脑知识就会显得有些啰唆,高手别见笑啊!
说到汇编语言啊,就扯远拉,远到哪里呢, 嗯很远, 汇编语言和机器语言是很亲密的,所以要聊下汇编语言那就不得不又扯下机器语言了,^_^.真远啊!!
机器语言
什么叫机器语言呢,机器语言就是一些机器指令的集合拉,也就是一些二进制的数字什么010010的,这就是机器指令,计算机呢可以把这些010010什么的转变为高低电平,使计算机的电子器件收到驱动,进行运算..嗯,搞的好像很复杂似的,其实简单理解就是计算机也有一门语言(机器语言)就像我们的汉语一样,我们汉语的构成呢是由字来构成的,机器语言(也就是电脑自己的语言,就是一些01001什么的来构成的.当初我理解的时候就想啊,机器语言不是人发明的么,为什么不教他学汉语啊要教他学什么01001的那么麻烦^_^.呵呵其实现在很多人都在做着这样的努力呢, 诶~~又扯远了.
给大家扯了机器语言的那就再给大家扯一下计算机吧,你有跟朋友去过电脑城装过电脑吗?或者见过别人把电脑机箱打开后里面的情况吗? 对里面有一个大风扇,大风扇下面知道是什么吗? 那是CPU就是电脑的心脏,那家伙就像我们脑袋一样是指挥部.其实我们见到的那CPU叫微处理器,是它控制着电脑的显卡啊,声卡什么的,当然我们不能够直接去控制这些东西那些玩意不听我们的,但是他们的指挥官(CPU)听我们,我们编程的任务就是指挥CPU(嗯,你可以把这想象成一场战争)去控制显卡显示图像,声卡发声.是不是很兴奋,可是我要跟你说的是他们的指挥官(CPU)是个莽夫特别讨厌学习国家的语言(这个和我倒是有些类似啊).所以我们想要和CPU沟通就要学习他的语言,可是他的语言实在是太难学了(有点向英语那么难学^_^)所以我不准备去学习他的语言,同时我也不建议你去学它的语言,那你要问我怎么办拉,嘿嘿很好办,你看过老 和布什谈话的时候是怎么谈的吗? 对拉有翻译,毛主席说人人都是平等的,胡主席可以请翻译,我们也可以~~~~我们的翻译的就是 汇编, 汇编是个好同志啊,他帮我们把指令翻译成很长很长的0101001,从此我们就离开了机器语言的怀抱,而用汇编来控制CPU拉,这是什么,这是世界的进步啊,是不是又感觉这世界又美好了一些!!
汇编语言
那么,我们现在已经理解了汇编语言和机器语言的相同和区别了,要说相同的话他们都好像是4个汉字,区别就是前2个字不同,倒下一片~~~~~~“, 其实汇编和机器语言在我理解是没有什么区别的,汇编只是把机器语言的010010对应的翻译了一下,就像我学英语一样,老是喜欢做硬式翻译,所以此时此刻我不得不再打击你一下,因为汇编只是硬式翻译了下机器语言,所以造成了汇编的指令过多,和过于复杂了.当然后来为了解决这个问题又出了C语言对吧,你不会想当叛徒去投靠C吧,晕,张三丰说过,千万不能够当叛徒,这不,现在的32位汇编就有宏汇编,搞的和C都差不多了,所以你也别想着要跑C那里去,现在我们只要学习下DOS下的汇编理解了那些指令的用处,到时候我们在windows下面写程序的时候都有很多宏可以调用了..
汇编语言的组成
那么我们现在把机器语言扯完了,(其实我还想再扯一会的).但是怕你不满意!!下面就是汇编闪亮登场了,你也许会问我汇编长什么样子呢?? 这不好说啊,但是我可以肯定的是他绝对没有我帅^_^…其实汇编不能够说长什么样子,应该说汇编由什么东西构成呢, 那么我告诉你汇编是由 一些指令 比如你看着头晕的mov啊什么的, 还有就是伪指令了,伪指令就是些段标记啊什么,现在不知道没有关系,到时候我再跟你扯..
存储器(内存)
现在我假设你已经把汇编指令学完了,那么你肯定是命令计算机执行几条指令对吧,理论上说的过去,但是现在还有个小问题就是..你在什么地方给计算机发布命令呢? 计算机可不是很随便的人啊, 计算机很死板死板到什么程度呢,它只能够在内存(存储器)中接受我们的指令.其他地方…sorry不行.所以我们必须把我们的指令放到内存里面让CPU来读取和执行,所以知道内存的作用了吧,很重要吧,那么我们当然要了解下CPU是如何来读取我执行我们的指令的对吧..所以我们的学习环节里面又多了个,了解CPU是如何在内存中读取指令和写入指令..
那么到底CPU是如何去读取指令呢,是这样的,CPU把内存划分成一个一个的单元,单元里边的编号是从0开始的,比如有128个存储单元,那么第一个就是0 最后一个就是127,你现在肯定想问拉,那一个存储单元可以存多少信息呢?? 计算机把一个2进制位称为一个比特(bit)8个就是一个字节了,(Byte)实际上现在的电脑啊它的内存是大的不得了的,我们只有了解这个概念就成,比如我现在写文章这台的电脑就有512M内存,那么换算下来是多少呢?
1KB = 1024 B(Byte) 1MB = 1024 KB 1GB = 1024 MB 1TB = 1024 GB
你可能要问了,我这是不是在讲硬盘啊,硬盘上面才用多少个G啊这样标示啊,其实内存和硬盘是一样的,他们的计量单位都是按照上面那些公式来的.
存储单元
刚才给大家扯到,内存被分为多个存储单元,存储单元是从0开始编号.你可能有疑问为什么要编号呢,这里就可以给你回答了,这就向一条街啊,你找一户人家肯定不好找对吧, 但是给他们的房子都弄个编号那就好找了..其实CPU读数据就向找人一样啊,根据门牌号(存储单元编号)这样找就非常快拉.
地址总线
既然说到了编号啊,就给大家聊点编号的问题吧,CPU本是有限啊,只能够指定特定多的存储单元,为什么啊,这个就是由于CPU的地址总线的限制了,比如啊我们的身份证是18位的,当我们国家的人口啊超过18为数字能够容纳的范围的话是无法标示的对吧(不过估计目前是无法达到这个数字的,这都是计划生育搞的好啊),那么现在是CPU有多少地址总线的话就只能够对特定多的内存进行寻址,如果再多出来的内存是没有用的,我们假设CPU有10根地址总线那么我们来看下他的寻址情况,在电子计算机中,一根导线可以传送的稳定状态只有2种,0和1
那么10根地址总线可以标示的范围为, 2的10次方个,最小就是0,那么最大就是1023了.所以可以得出结论,一个CPU有N跟地址线,则可以寻址的范围为2的N次方个内存单元.
数据总线
既然聊了关于存储器(内存)的那么多,不妨再聊点比较有趣的事情,聊什么呢,聊点关于CPU读取指令的问题,首先我想向大家提个问题,比如我现在在内存中有1000条指令啊, CPU来读取这些指令的时候可以一次全部读完吗? 这个问题啊,据我所知啊我们现在用的CPU是没有办法一次全部读完的,那么它怎么办呢,你也想到了,就是分多次来读取对吧.那么问题又来了CPU一次可以读取多少条指令呢? 这要看CPU的数据总线的宽度了,8086的CPU数据总线宽度为16位,是16位2进制的数据比如现在传送 89D9H 8086CPU就可以一次传送完,如果是89D898那么这个数字16位就标示不完了,所以要分两次来传送.
你看到这里我不得不佩服你的勇气,你是一个精神可嘉的人,虽然我写着很累,但是相信你看着也不轻松啊,诶..主要是因为我文采不好写的很烂,让人不大容易明白,其实这些东西都是概念性的东西,我这人最讨厌概念性的东西了,所以我学汇编的时候也是囫囵吞枣就过去了,所以现在给大家讲起来也底气不足..不过没有关系这些概念性的东西没有弄懂也没有关系,了解下就成了,等你到时候把汇编学个入门后再倒回来看就会获益匪浅的.
回忆下我们吹了什么东西, 机器语言, 汇编语言明白了吗? 存储器(内存)的作用明白了吗?存储单元和地址总线还有数据总线这些明白了吗? 如果明白了就过关了,如果没有诶~~~~不是你有问题就是我有问题了..
这段终于给大家吹完了,我也松了一口气,以后的扯淡应该会更加轻松些.所以别紧张.下一篇可能要过几天了,这几天比较忙啊!下一篇就给大家真刀实枪的干了,我们就要接触汇编指令了,期待吧! 请多多支持我的blog,你们的支持是我最大的动力..有动力马才跑的快啊! 转载的人应该著名下出处啊,不容易啊大哥!