目录
前言
我们的口号: 编写高效、精简的汇编语言程序,踩着硬件的鼓点,掌握计算机的精髓!
汇编语言在不同的领域和应用场景中有着不同的重要性,也在大学基础教程中起着不可或缺的作用,例如:
- x86汇编:PC机上最广泛使用的汇编语言,应用于操作系统、编译器、驱动程序等方面。
- ARM汇编:移动设备和嵌入式系统上广泛使用的汇编语言,应用于单片机、嵌入式操作系统、物联网等方面。
- MIPS汇编:应用于路由器、游戏机、数字信号处理等领域。
- PowerPC汇编:应用于高性能计算机和游戏机等领域。
- AVR汇编:常用于单片机和电子嵌入式系统开发。
所以学习汇编语言还是很有必要的,最怕的结果就是要用的时候不会(dog)
从机器语言到汇编语言
机器语言和机器指令
我们知道机器语言都是有01二进制代码组成的,它被用于与计算机硬件交互的指令集。计算机的底层语言,是由CPU能够直接执行和解释的语言形式。机器语言编写的程序必须被翻译成机器指令才能被计算机执行
。每一条机器指令都对应着机器语言中的一条指令,用于告诉CPU执行具体的操作,例如将数据从寄存器中读取、将数据写入内存地址等。
汇编语言和汇编指令
汇编语言和机器语言的关系
-
机器语言和汇编语言,两者都是计算机能够理解和执行的指令序列。
-
机器语言是由二进制代码组成的指令集,它直接与计算机硬件进行交互,对硬件进行控制和操作。机器语言是计算机指令的最基本形式,所有的计算机程序最终都需要被翻译成机器语言才能被计算机执行。
-
而汇编语言则是机器语言的助手,在程序员和计算机之间建立了一座桥梁。
汇编语言是一种基于机器语言,并通过符号助记符号来描述指令、寄存器、内存地址等的语言
。在汇编语言中,程序员可以使用可读性更高的符号和命令来表示机器指令,使得程序设计和调试更加容易和直观。
因此,机器语言和汇编语言之间的关系是密不可分的。汇编语言是机器语言的翻译助手,可以帮助我们更加高效地对计算机进行控制。
汇编语言的工作流程
上面我们说明了从机器语言到汇编语言的基本过程,那么汇编语言的工作流程是什么呢?它需要翻译成机器语言后才能执行吗?
我们先看汇编语言的工作流程:
-
编写汇编语言程序:使用汇编语言编写指令序列,描述程序需要执行的操作和控制流程。
-
汇编程序:汇编器把汇编语言程序翻译成机器语言指令,生成目标代码文件。目标代码文件包括机器语言指令、数据、符号表等信息。
-
链接目标文件:将目标文件与其他目标文件或库文件链接在一起,生成最终的可执行文件。链接器把汇编语言程序所需的库函数、标准程序等一起打包成可执行文件。
-
装载程序:把可执行文件装载到内存中,并准备好执行环境。装载程序把程序代码和数据加载到相应的内存地址空间中,然后把控制权交给程序开始执行。
-
执行程序:CPU执行程序,根据指令序列完成各种操作和控制流程,包括算术和逻辑运算、内存读写、跳转、分支等。程序执行完毕后,返回结果并退出。
通过上序流程,我们不难发现,汇编语言程序是原始的指令序列,需要经过汇编、链接和装载等多个阶段才能变成可执行的程序。因此,汇编语言程序的调试和优化也需要在不同阶段进行,包括语法检查、运行时错误检查、代码分析和优化等。
插入计组知识——计算机的组成
- CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,我们要让它进行工作,就必须要向它发出指令
- 指令和数据存放到内存中,所以离开了内存再好的CPU也无法工作,比如bios,离开硬盘能进去,但是离开内存就进不去
指令和数据都存储在内存或硬盘上
例如:开机后,打开保存的程序,从硬盘读取到内存,再由内存转到CPU进行指令的执行。
指令和数据都是二进制数
计算机的存储单元
计算机当中的存储单元指储存和读取数据的基本单元,主要包括以下几种类型:
-
寄存器:位于CPU内部的存储单元,用于暂存指令和运算的数据。寄存器具有极快的存取速度和访问效率,但容量较小,一般只有几十个到一百个。
-
缓存:位于CPU和主存之间的存储单元,用于加速CPU对数据的访问速度。缓存分为一级缓存和二级缓存,一级缓存放置在CPU内部,二级缓存放置在CPU芯片上或者主板上,容量比寄存器大,但比主存小。如今的cpu一般都有三级缓存。
-
主存:也称为内存,是计算机中最主要的储存单元,用于存放程序和数据。主存的容量一般比CPU内部的寄存器和缓存大得多,但访问速度比较慢。
-
辅助存储器:例如硬盘、光盘、U盘等,用于长期储存数据和程序,容量巨大,但是访问速度比主存慢很多。
不难发现,一般情况下来说,存储器的速度和容量一般都呈现出反比
,不可兼顾,否则我们只要有一个存储器就足够了,哈哈哈
计算机的总线
专门连接CPU和其他芯片的导线,通常称为总线
物理层面:一根根导线的集合
逻辑层面:地址总线,数据总线,控制总线
它们分别负责传输地址信息、数据信息和控制信息,是计算机中各个存储单元之间进行数据交换的基础。
-
地址总线:地址总线用于传输内存地址信息,它的宽度决定了CPU可以寻址的内存容量。例如,如果地址总线宽度为20位,那么CPU最多可以寻址2的20次方,即1MB的内存空间。当CPU需要读取或写入数据时,它会将地址信息发送到内存或设备的控制器中,用于选择特定的存储单元。
-
数据总线:数据总线用于传输数据信息,它的宽度决定了CPU和存储单元之间可以传输的数据位数。例如,如果数据总线宽度为32位,则可以一次性传输32位的数据。当CPU需要读取或写入数据时,它会通过数据总线和系统总线将数据信息传输到内存或设备中。
-
控制总线:控制总线用于传输控制信息,它包含了各种控制信号,例如读写控制、中断请求、时钟信号等。当CPU需要与存储单元或设备进行交互时,它会通过控制总线向相应的存储单元或设备发送控制信号,控制其进行数据传输、状态转移等操作。
内存读写和地址空间
由于我们学习汇编语言的时候是直接和内存进行打交道的,所以关于内存的读写和地址空间,我认为有必要主要的聊聊。
CPU对存储器的读写:
- 获取存储单元的地址(地址信息)
- 器件的选择,读或写命令(控制信息)
- 读或写的数据(数据信息)
地址空间
什么是地址空间?
- CPU地址总线为N,
寻址空间为2^N B
我们从CPU角度来看地址空间的分配:
-
在32位CPU中,通常将整个地址空间分为4GB的虚拟地址空间和物理地址空间。虚拟地址空间是应用程序能够访问到的地址范围,它是针对每个进程单独分配的地址空间。系统通过虚拟内存管理机制将虚拟地址映射到物理地址上,从而实现虚拟地址空间的分配和管理。
-
物理地址空间是CPU与实际物理内存之间的地址空间。物理地址是指计算机中真实的内存地址,它是硬件地址,对应的是内存芯片上的实际地址。物理内存对应的地址空间是映射到虚拟地址空间中的某个区域上,由操作系统通过页表来完成地址映射。
-
在CPU中,地址空间的大小由地址总线的宽度来决定。如果其地址总线的宽度为32位,那么其地址空间的大小为2的32次方(即4GB)。在现代CPU中,通常采用了与此相比更大的地址总线宽度,以支持更大的地址空间和更高的内存容量。
CPU需要寻址和读写内存中的数据和指令,地址空间的划分和管理直接关系到系统的性能、可靠性和安全性。
如下图所示,CPU与地址空间的联系:
最后
如果本文对你有所帮助,还请三连支持一下博主!