主题:学汇编的不看别后悔 - 【有图有真相】雨荷教你学汇编【1】
这是我看见的最趣味的汇编学习,现在转来给大家看看,我觉得这个博主是在太有才了。。。。
谈到汇编、C、C++等等,凡是不是拖拖了事的软件“革命”,对于很多人,包括我身边很多来讲,大家都会像浮云一样---飘过。其实在这个“革命”性的行业里面,我也何尝不是这样,对于一个新的知识,学习一时半会儿没有看到结果,谁TMD的还会有心情和动力继续学习下去呢?何况像雨荷她姐这样的孩子,对技术这么执着的人,伤不起啊伤不起。不过,今天咱们要一起来学习的是,就是让我们蛋疼一时而想割掉的“汇编”。是不是有一种想喷的感觉。。。呵呵,其实,只要跟着我的感觉走,学完这个专题。咱们后面一个专题,一定会让各位看官领教汇编的神奇和她的魅力。现阶段,咱们先修真气。
汇编汇编,只要我们会编写就行了。所以,难理解的概念我尽量用简洁YY的文字描述出来。
大家都知道,咱们CPU其实是一个很悲剧的孩子。它悲剧在它除了1和0,其他什么都不认识。它的爹据说是根据咱们的易经而产生的灵感所造就的这样一个玩意儿。呵呵,其实开一个玩笑。CPU是怎么来的咱们就不多说。我们直接进入主题。
早起的“天使”写的代码都是1和0,哈哈。。。那个时候玩的都是打纸袋这种程序。大家想象下,对于一段程序出错,怎么办?对,很难办。所以,在50年代中期,一个很给力的人出现了:巴科斯。他慢慢改良了机器语言。慢慢的后面产生了一种通过助记符的方式编写代码。而这种很贴近人类能够识别的语言,就是我们今天所学的汇编语言。
一个简单的汇编代码编写过程
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/214109e4uo565vxxunf66f.jpg[/img]
这个图就说明了汇编的编写过程。我们编写好的汇编指令通过汇编编译器将汇编指令翻译成计算机能够识别的二进制机器码,然后交给计算机执行。我们将这样的翻译器称为汇编语言编译器。
汇编语言发展到目前,有3类指令集:
1:汇编指令:机器码的助记符,有对应的机器码
2:伪指令:没有对应的机器码,交由编译器处理,计算机并不执行,没有对应的机器码
3:其他符号:+ - * /等符号,交由编译器处理,计算机并不执行,没有对应的机器码
了解了以上的基本概念,接下来,我们看看CPU怎么和我们的存储器进行交互工作。
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/220351wl57d6hvkqweiw2w.jpg[/img]
内存作为了一个外部磁盘和CPU交互的临时区域,CPU不能也没有权限直接去读取硬盘上的数据。这是一个原则,也是一种潜规则。CPU必须找到能够让自己控制的指令和数据,这些都是二进制代码的。而不是小明看到那些XXOO的文字。
所以,这就有个疑问了?既然是指令和数据,而且都是二进制代码,那我们怎么来辨别它们到底什么是指令什么是数据呢?-_-#当然,提出这个疑问的人不止我一个人,所以,我告诉各位,其实CPU也不清楚,这个也是咱们去告诉它的。因为它丫的一个白痴。什么都要我们人去告诉它。我擦。
举个简单的例子:
1000100111011000这个二进制代码,如果表示数据,那么就是89D8H(16进制末尾用H表示,二进制用B表示。)。
而1000100111011000如果表示汇编指令的话: mov ax, bx (程序)。
所以,这个是我们人为控制的。CPU不知道的。
既然CPU读取数据都是通过临时的存储空间RAM内存,那我们来继续讨论下存储单元。
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/223314ombmmlggb1brbtp3.jpg[/img]
我们的存储器被分为若干个单元,就像大明河畔有很多个住户,里面大多都住着雨荷,什么夏雨荷,张雨荷,高雨荷,熊雨荷,我擦雨荷等。。。。每个单元的分配原则是从0到N-1。例如一个存储器有128个单元,那么编号自然就从0~127(128-1)。
那么,一个存储单元能存多少信息呢?就像一个夏雨荷她姐家能容下多少个人呢?1个?2个?难道是夏雨荷她爹,夏雨荷她哥?呵呵,其实很简单,我们知道,咱们的计算器最小单位是bit,也就是一个二进制位,要么是1要么是0。8bit构成了一个字节,即8个二进制位。一个存储器如果有128个存储单元,也就是说,它可以存储128个字节(Byte)。
所以,存储器的容量是以”字节“为最小单元来进行计算的。这个大家一定要记住。
常见的换算公式:
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
前面我们已经清楚了,存储器被划分为若干个存储单元,存储单元都是从0开始进行编号,后面依次顺序编号。这些编号就是存储单元在存储器中的地址。就像前面我们说的,大明河畔,夏雨荷住在11这个门牌地址,而她姐,住在304.。。哈哈,好远。
所以,CPU要从内存中读取数据,首先要指定存储单元的地址。Yeah,地址。。。你们懂的。如果你运气好,要了一个御姐或者小萝莉的手机号码,接下来是什么呢?哇哈哈,就是告诉她和你约会的地址。假如果是她的妈妈爸爸不在家,那么,你这个时候就会想,我是不是要去她家呢?那么你就要确定,这个MM住在公寓里面的那个房子里面?嘿嘿,地址已经确定,接下来呢?没错,CPU玩的不单单是我们常说的那一种内存,还有显存等。就像现在一些人,对萝莉、御姐同时中意。嘿嘿。那么CPU在读取数据的时候,还要指明,它要对哪一个器件进行操作,进行什么样的操作。是读还是写?想象下,你不可能同时约小萝莉和御姐还有其他MM出来,也不可能同时进行服务。毕竟,你会很悲剧的。你是把她约出来,吃饭、唱歌、看电影还是干嘛嘛?这个当然要看双方的意思咯~~~~(*^__^*) 嘻嘻……。
可见,CPU要想进行数据的读写操作,必须和外部的器件(标准的说法应该是芯片)进行三类信息的交互:
1、存储单元的地址:地址信息,告诉CPU读哪个地址的存储单元。!- -告诉我,MM在什么地方,让我去。。。
2、器件的选择:读或写的命令,告诉CPU是干还是不干。不干当然就读读咯。!- -我对萝莉表示鸭梨山大。。。
3、数据:是读什么写什么,就像小明看的苍老师的1.TXT。不过是被读入内存的二进制信息。!- -见面、肯德基、吃饭、电影。。
在计算机中有专门连接CPU和其他芯片的导线,我们统称为总线。物理上,就是大家看到机箱里面的那一堆堆杂乱无章的线。
而逻辑上我们将这类总线划分为三大类:地址总线、控制总线、数据总线。
下面是一个读写操作的例子
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/232027edwo9qt0egfqwje7.jpg[/img]
皇阿玛读写完毕夏雨荷,当然,最后的结果是什么,大家都懂的。通过这上面的图片,我们可以清晰的看到,皇阿玛其实什么都不会,就会来民间泡MM,结果他丫的哪都不去。就来到了大明河畔,看到了美女夏雨荷,大明河畔住那么多MM,包括我们的仓老师,谁都不泡,就把夏雨荷给喵上了。我擦。然后,皇阿玛通过大明河畔这个地方,将4号房的夏雨荷给找了出来,然后再写入大明河畔4号房,这个时候,4号房的主人家当然也就是夏紫薇咯~,就有了咱们后来了紫薇格格。。
换做计算机里面的,就是:
1、CPU通过地址总线将地址信息4发出。~(@^_^@)~雨荷,朕来了。。。
2、CPU通过控制总线发出内存读写命令,选择存储芯片,并通知它,将要从中读取数据。
3、存储器将4号单元中的数据夏雨荷通过数据总线送入CPU。
写和读都相识。大家可以自行画画图,YY下皇阿玛的写入操作吧。哇哈哈~
(明日接着继续讲解三大总线:地址、控制、数据)
本文转自:http://www.ixueyun.com/community/home-space-uid-721-do-blog-id-1330.html
谈到汇编、C、C++等等,凡是不是拖拖了事的软件“革命”,对于很多人,包括我身边很多来讲,大家都会像浮云一样---飘过。其实在这个“革命”性的行业里面,我也何尝不是这样,对于一个新的知识,学习一时半会儿没有看到结果,谁TMD的还会有心情和动力继续学习下去呢?何况像雨荷她姐这样的孩子,对技术这么执着的人,伤不起啊伤不起。不过,今天咱们要一起来学习的是,就是让我们蛋疼一时而想割掉的“汇编”。是不是有一种想喷的感觉。。。呵呵,其实,只要跟着我的感觉走,学完这个专题。咱们后面一个专题,一定会让各位看官领教汇编的神奇和她的魅力。现阶段,咱们先修真气。
汇编汇编,只要我们会编写就行了。所以,难理解的概念我尽量用简洁YY的文字描述出来。
大家都知道,咱们CPU其实是一个很悲剧的孩子。它悲剧在它除了1和0,其他什么都不认识。它的爹据说是根据咱们的易经而产生的灵感所造就的这样一个玩意儿。呵呵,其实开一个玩笑。CPU是怎么来的咱们就不多说。我们直接进入主题。
早起的“天使”写的代码都是1和0,哈哈。。。那个时候玩的都是打纸袋这种程序。大家想象下,对于一段程序出错,怎么办?对,很难办。所以,在50年代中期,一个很给力的人出现了:巴科斯。他慢慢改良了机器语言。慢慢的后面产生了一种通过助记符的方式编写代码。而这种很贴近人类能够识别的语言,就是我们今天所学的汇编语言。
一个简单的汇编代码编写过程
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/214109e4uo565vxxunf66f.jpg[/img]
这个图就说明了汇编的编写过程。我们编写好的汇编指令通过汇编编译器将汇编指令翻译成计算机能够识别的二进制机器码,然后交给计算机执行。我们将这样的翻译器称为汇编语言编译器。
汇编语言发展到目前,有3类指令集:
1:汇编指令:机器码的助记符,有对应的机器码
2:伪指令:没有对应的机器码,交由编译器处理,计算机并不执行,没有对应的机器码
3:其他符号:+ - * /等符号,交由编译器处理,计算机并不执行,没有对应的机器码
了解了以上的基本概念,接下来,我们看看CPU怎么和我们的存储器进行交互工作。
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/220351wl57d6hvkqweiw2w.jpg[/img]
内存作为了一个外部磁盘和CPU交互的临时区域,CPU不能也没有权限直接去读取硬盘上的数据。这是一个原则,也是一种潜规则。CPU必须找到能够让自己控制的指令和数据,这些都是二进制代码的。而不是小明看到那些XXOO的文字。
所以,这就有个疑问了?既然是指令和数据,而且都是二进制代码,那我们怎么来辨别它们到底什么是指令什么是数据呢?-_-#当然,提出这个疑问的人不止我一个人,所以,我告诉各位,其实CPU也不清楚,这个也是咱们去告诉它的。因为它丫的一个白痴。什么都要我们人去告诉它。我擦。
举个简单的例子:
1000100111011000这个二进制代码,如果表示数据,那么就是89D8H(16进制末尾用H表示,二进制用B表示。)。
而1000100111011000如果表示汇编指令的话: mov ax, bx (程序)。
所以,这个是我们人为控制的。CPU不知道的。
既然CPU读取数据都是通过临时的存储空间RAM内存,那我们来继续讨论下存储单元。
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/223314ombmmlggb1brbtp3.jpg[/img]
我们的存储器被分为若干个单元,就像大明河畔有很多个住户,里面大多都住着雨荷,什么夏雨荷,张雨荷,高雨荷,熊雨荷,我擦雨荷等。。。。每个单元的分配原则是从0到N-1。例如一个存储器有128个单元,那么编号自然就从0~127(128-1)。
那么,一个存储单元能存多少信息呢?就像一个夏雨荷她姐家能容下多少个人呢?1个?2个?难道是夏雨荷她爹,夏雨荷她哥?呵呵,其实很简单,我们知道,咱们的计算器最小单位是bit,也就是一个二进制位,要么是1要么是0。8bit构成了一个字节,即8个二进制位。一个存储器如果有128个存储单元,也就是说,它可以存储128个字节(Byte)。
所以,存储器的容量是以”字节“为最小单元来进行计算的。这个大家一定要记住。
常见的换算公式:
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
前面我们已经清楚了,存储器被划分为若干个存储单元,存储单元都是从0开始进行编号,后面依次顺序编号。这些编号就是存储单元在存储器中的地址。就像前面我们说的,大明河畔,夏雨荷住在11这个门牌地址,而她姐,住在304.。。哈哈,好远。
所以,CPU要从内存中读取数据,首先要指定存储单元的地址。Yeah,地址。。。你们懂的。如果你运气好,要了一个御姐或者小萝莉的手机号码,接下来是什么呢?哇哈哈,就是告诉她和你约会的地址。假如果是她的妈妈爸爸不在家,那么,你这个时候就会想,我是不是要去她家呢?那么你就要确定,这个MM住在公寓里面的那个房子里面?嘿嘿,地址已经确定,接下来呢?没错,CPU玩的不单单是我们常说的那一种内存,还有显存等。就像现在一些人,对萝莉、御姐同时中意。嘿嘿。那么CPU在读取数据的时候,还要指明,它要对哪一个器件进行操作,进行什么样的操作。是读还是写?想象下,你不可能同时约小萝莉和御姐还有其他MM出来,也不可能同时进行服务。毕竟,你会很悲剧的。你是把她约出来,吃饭、唱歌、看电影还是干嘛嘛?这个当然要看双方的意思咯~~~~(*^__^*) 嘻嘻……。
可见,CPU要想进行数据的读写操作,必须和外部的器件(标准的说法应该是芯片)进行三类信息的交互:
1、存储单元的地址:地址信息,告诉CPU读哪个地址的存储单元。!- -告诉我,MM在什么地方,让我去。。。
2、器件的选择:读或写的命令,告诉CPU是干还是不干。不干当然就读读咯。!- -我对萝莉表示鸭梨山大。。。
3、数据:是读什么写什么,就像小明看的苍老师的1.TXT。不过是被读入内存的二进制信息。!- -见面、肯德基、吃饭、电影。。
在计算机中有专门连接CPU和其他芯片的导线,我们统称为总线。物理上,就是大家看到机箱里面的那一堆堆杂乱无章的线。
而逻辑上我们将这类总线划分为三大类:地址总线、控制总线、数据总线。
下面是一个读写操作的例子
[img]http://www.ixueyun.com/community/data/attachment/album/201112/26/232027edwo9qt0egfqwje7.jpg[/img]
皇阿玛读写完毕夏雨荷,当然,最后的结果是什么,大家都懂的。通过这上面的图片,我们可以清晰的看到,皇阿玛其实什么都不会,就会来民间泡MM,结果他丫的哪都不去。就来到了大明河畔,看到了美女夏雨荷,大明河畔住那么多MM,包括我们的仓老师,谁都不泡,就把夏雨荷给喵上了。我擦。然后,皇阿玛通过大明河畔这个地方,将4号房的夏雨荷给找了出来,然后再写入大明河畔4号房,这个时候,4号房的主人家当然也就是夏紫薇咯~,就有了咱们后来了紫薇格格。。
换做计算机里面的,就是:
1、CPU通过地址总线将地址信息4发出。~(@^_^@)~雨荷,朕来了。。。
2、CPU通过控制总线发出内存读写命令,选择存储芯片,并通知它,将要从中读取数据。
3、存储器将4号单元中的数据夏雨荷通过数据总线送入CPU。
写和读都相识。大家可以自行画画图,YY下皇阿玛的写入操作吧。哇哈哈~
(明日接着继续讲解三大总线:地址、控制、数据)
本文转自:http://www.ixueyun.com/community/home-space-uid-721-do-blog-id-1330.html