不能免俗,学习汇编,首先,我们先从一个简单的事例开始,比如,我们要输出一句话“Hello,word”,那么是早期的计算机中,我们可能需要进行如下的编程:

00011110

1011100000000000000000

10000001110000000000110

110001000000000000010010

看到这样的程序,对于里面的10,你是否范糊涂了,如果敲错一个01会如何办,是否感觉太难懂了,用01表示的这段程序就是机器语言。

1.机器语言是机器指令的集合,机器指令是一台计算机能够正确执行的语言,它是由一系列的二进制数据而组成的。计算机将其转换为高低电平,以便能够控制计算机的部件,比如:cpu,内存等,从而进行计算。

但是这样的方式对于开发人员来讲,实在是太晦涩难懂了,有没有方法进行改进呢?
在这样的情况下,就产生了汇编语言。

2.汇编语言的主体是汇编指令,其实际上是对机器语言的另一种表式形式,方便开发者进行编程。例如:
1000100111011000,
如果我们用汇编指令可这样描述:
mov ax,bx
,表示将bx寄存器的内容赋给ax
寄存器:是cpu中可以存数据的玩意。Cpu包含很多寄存器,ax,bx只是其中的两个寄存器而已。

3.那么计算机是如何识别类似于mov ax,bx这样的指令呢,实际上是通过编译器,最终将汇编指令转换成机器码,由计算机最终执行的。(具体的例程我们基础篇讲完后再来看实例)。

那么计算机中的各个部件到底是如何工作的呢?

实际上,对于计算机而言,cpu和内存的关系就好比:一个好的作家一定是来源于生活中,一个才华横溢的天才大脑也是建立在充足的记忆和数据上的。这里cpu就好比天才的大脑,它是用来计算的。内存就好充足的记忆和数据。它是用来存储数据以供cpu调用并最终计算的。

那么我们平时用c#javavc++写的而存在硬盘中的程序呢,同样的道理,它们运行时也一样要被读到内存中,否则cpu是无法识别的。

想想,如果我们了解了通过cpu读取内存数据,或者熟悉了cpu向内存中写数据,那么我们能够做什么呢?
我们可以从中结取程序的中间值,并修改后再写入程序。
我们也可以制作类似于各种游戏外挂的东东。

那么cpu是如何对存储器进行读取的呢?

首先,我们来看看存储器的分布规则:

 

1.在计算机中最小的信息单位是bit,也就是一个二进制位,8bit组成一个Byte,也就是字节。一个存储单元可以存储一个字节,也就是8个二进制位。计算机的存储器容量是以字节为最小单位来计算的,对于一个有128个存储单元的存储器,可以说它的容量为128字节。

例如:如果有一个1KB的存储器,则它有1024个存储单元,它的编号为从01023

2.我们平时开发的程序中,变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。

3.好比一条商业大街上的门店一样,存储器就是商业大街,门店就是存储单元的地址。

 

其次,我们要通过cpu从内存中读取数据,就必须要知道存储单元的地址。就像在商业街上找人,你需要知道他开的门店的具体地址。

另外,在一台微机中,不只有存储器这一种器件。CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读出数据,还是向里面写入数据。

可见,CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。

存储单元的地址(地址信息)

器件的选择,读或写的命令(控制信息)

读或写的数据(数据信息)

那么CPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢?电子计算机能处理、传输的信息都是电信号,电信号当然要用导线传送。在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类,地址总线、控制总线和数据总线。

CPU3号单元中读取数据的过程(见图1.3)如下。

上述过程可描述如下:

(1)CPU通过地址线将地址信息3发出。

(2)CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。

(3)存储器将3号单元中的数据8通过数据线送入CPU

写操作与读操作的步骤相似。如向3号单元写入数据26

(1)CPU通过地址线将地址信息3发出。

(2)CPU通过控制线发出内存写命令,选中存储器芯片,并通知它,要向其中写入数据。

(3)CPU通过数据线将数据26送入内存的3号单元中。

从上面我们知道了CPU是如何进行数据读写的。可是,如何命令计算机进行数据的读写呢?

要让一个计算机或微处理器工作,应向它输入能够驱动它进行工作的电平信息(机器码)

机器码:        101000000000001100000000

含义:          3号单元读取数据送入寄存器AX

CPU接收这条机器码后将完成我们上面所述的读写工作。

机器码难于记忆,用汇编指令来表示,情况如下。

机器码:        10100001 00000011 00000000

对应的汇编指令:MOV AX,[3]

含义:          传送3号单元的内容入AX

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

posted on 2009-03-25 18:41  jasonM  阅读(235)  评论(0编辑  收藏  举报