这是我第一次真正的接触汇编,在此之前我对这门课的印象一直停留在《c++语言程序设计》的深度探究里把一串乱码似的东西叫做汇编语言中。当时我就想:这门语言真烦人,怎么生的这么乱?现在我不怪它了,因为我知道了它是为了另一种更烦人的语言而产生的——机器语言。
机器语言是机器指令的集合,电子计算机的机器指令是一列二进制数,计算机运行时分别将0、1转变为高、低电平,从而进行运算。机器语言是唯一能被计算机直接识别的语言,它占据空间小、执行速度快、还有进行加密解密的功能。可纵然它千好万好,它用起来烦啊,哪有人有耐性天天0101的往电脑里输?于是,汇编语言应运而生。由于计算机只能识别机器语言,于是一个名叫“编译器”的东西充当起了翻译官,程序员输入汇编指令(汇编语言的主体与核心)后,由编译器将其编译为机器码并由计算机最终执行。
汇编语言是直接在硬件上工作的编程语言,既要学习汇编,便少不了对一些计算机硬件的学习与认知。
首先要提的便是计算机最重要的组成部分——CPU。CPU控制着整个计算机的运作并进行运算。要让一个CPU工作,就必须向它提供存放在存储器(内存)中的指令和数据,此处值得注意的是在内存或磁盘上指令和内存都是一串毫无区别的二进制码,只有聪明的CPU在工作时会对它们加以区分。
接着谈到存储单元。存储器被划分成若干个从0开始顺序编号的存储单元。一个存储单元的大小为一个Byte,即一个字节。以下是微机中常用的计量单位转换:
1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB .
介绍完了CPU和存储器,接下来便谈谈CPU对存储器的读写。CPU在进行数据的读写操作时必须与外部器件进行一下三类的信息交互:1、存储单元的地址(地址信息);2、器件的选择,读或写的命令(控制信息);3、读或写的数据(数据信息)。三类交互分别会用到地址总线、控制总线和数据总线,这三种总线的宽度标志了这个CPU不同方面的性能:
1、 地址总线的宽度决定了CPU的寻址能力(能寻2^N个B);
2、 控制总线决定了CPU对其它器件的控制能力。逻辑上的内存地址空间的容量便受到CPU寻址能力的限制。
3、 数据总线的宽度决定了CPU进行数据传送时的一次数据传送量(能传n/8个B);
这里单独来写一下第二步控制信息。起初我对“器件的选择”这一步骤很不理解,为什么CPU在控制信息时要选择一个存储器芯片呢?于是我上网查阅了有关存储器芯片的资料,网上是这么说的——“存储芯片,是嵌入式系统芯片的概念在存储行业的具体应用……”半小时后,一个字都没看懂的我回来了。终于,我在课本第10页关于各类存储器芯片的介绍中找到了答案。原来,不同的存储器芯片有不同的功能,它们从读写属性上看分为两类:随机存储器RAM(可读可写)和只读存储器ROM(听名字就知道功能了)。CPU按每次执行命令所需的不同的功能选择相应的存储器,由存储器转手将选定存储单元中的数据交给数据线传出。(课后我还就此点请教了老师,值得注意的是,读数据时数据由存储器通过数据线传出,而写入数据时数据由CPU通过数据线写入。每个存储器执行功能时只执行一个功能,不能同时读写,故而写入时不用RAM。至于写入数据时选存储器芯片有什么用,sorry啊老师我好像没有听懂【哭泣】。)
不知不觉写了这么多,不敢再罗嗦了,最后写一下我学完这章的疑问吧:存储单元中的数据被数据线传回CPU后是怎么到寄存器的呢?