汇编语言(Assembly Language)简介
汇编语言是最接近于机器语言的编程语言。如果说机器语言是计算机操作的本质,那么汇编语言就是最最接近本质的语言。汇编语言操作直接面向硬件,所以,我们在使用汇编语言的时候,我们能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系和交互形成一个清晰的认识。汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址。
汇编语言, 即第二代计算机语言,用一些容易理解和记忆的缩写单词来代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表减法操作指令,以及"INC"代表增加1,"DEC"代表减去1,"MOV"代表变量传递等等。
汇编语言的指令都是二进制的文本形式,与机器语言——二进制指令是一一对应的关系。例如:
汇编语言只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是低级语言。
学习汇编的目的,不是希望用它作软件开发。学习汇编能对计算机的运行机制有个透彻的了解:
主流的电子计算机使用二进制,计算机只认识 0和1,因为在电路中只有两种状态,要么通电要么断电,我们用数字表示这两种状态就是0和1,我们可以用0和1与计算机交流。
机器语言就是由0和1构成的语言,我们很难理解,几乎看不懂。而我们需要将这些复杂的机器语言(一堆0和1的数字)简化,就需要助计符(INC DEC MUL DIV等),也就是汇编语言。
现在汇编语言已不像其他大多数的程序设计语言一样被广泛用于程序设计,在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序中都会需要汇编语言。学汇编可以有助于理解计算机和程序运行的本质,如搞清寄存器、内存地址及寻址等等。
CPU 的全称是 Central Processing Unit ,CPU 与计算机的关系就相当于大脑和人的关系。CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段:提取,解码和执行。CPU 从系统的主存中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。
CPU 本身只负责运算,不负责储存数据。数据一般都储存在内存之中,CPU 要用的时候就去内存读写数据。但是,CPU 的运算速度远高于内存的读写速度,为了避免被拖慢,CPU 都自带一级缓存和二级缓存。基本上,CPU 缓存可以看作是读写速度较快的内存。
但是,CPU 缓存还是不够快,另外数据在缓存里面的地址是不固定的,CPU 每次读写都要寻址也会拖慢速度。因此,除了缓存之外,CPU 还自带了寄存器(register),用来储存最常用的数据。也就是说,那些最频繁读写的数据(比如循环变量),都会放在寄存器里面,CPU 优先读写寄存器,再由寄存器跟内存交换数据。寄存器在CPU中。内存在内存条中。
寄存器不依靠地址区分数据,而依靠名称。我们常常看到 32位 CPU、64位 CPU 这样的名称,其实指的就是寄存器的大小。32 位 CPU 的寄存器大小就是4个字节。
寄存器只能存放很少量的数据,大多数时候,CPU 要指挥寄存器,直接跟内存交换数据。
存储器按在计算机系统中的作用分类
主存储器(内存、Memory):由随机存储器(RAM)构成既可以从中读取数据,也可以写入数据。当机器关闭时,内存中的信息会 丢失。用于存放活动的程序和数据,它是程序与 CPU 进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,只要计算机在运行中,CPU 就会把需要运算的保存在外存储器中的程序和数据调到主存中处理,当运算完成后 CPU 再将处理结果传送出来。
缓冲存储器(Cache):主要在两个不同工作速度的部件起缓冲作用。它位于内存和 CPU 之间,是一个读写速度比内存更快的存储器。当 CPU 向内存写入数据时,这些数据也会被写入高速缓存中。当 CPU 需要读取数据时,会直接从高速缓存中直接读取,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。
辅助存储器(外存储器):主要用于存放当前不活跃的程序和数据,其速度慢、容量大、每位价位低。
机器语言、汇编语言、高级语言的关系
机器语言:
计算机执行的二进制命令,都是0和1表示的,最早的计算机采用,通过直接输入二进制数,插拔电路板等实现,这种“编程”很容易出错。
汇编语言:
用助记符代替机器指令的操作码(如:ADD表示加法),汇编语言通过汇编器(Assembler)得到机器语言。不够直观,是一种低级语言,亦称为符号语言。
高级语言。
符合人们的习惯,也更容易理解和修改。高级语言(如:C/C++)经过编译器“翻译”(方法有两种,一种是解释,一种是编译)成目标程序后由计算机执行。
下图以 C 语言为例展示了一般程序的运行流程:
附录、
汇编语言(Assembly language)实验环境搭建详解_软件开发技术爱好者的博客-CSDN博客_汇编语言实验环境
手把手教你学习汇编语言——从入门到起飞_发呆哥o_o ....的博客-CSDN博客_汇编语言学习