您现在的位置是:首页 >其他 >[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓网站首页其他

[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓

秋名山码民 2023-05-18 12:00:01
简介[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓

🙌秋名山码民的主页
😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🙏作者水平有限,如发现错误,还请私信或者评论区留言!
🙌这是博主的汇编专栏: 参考教材为汇编语言_王爽老师


前言

我们的口号: 编写高效、精简的汇编语言程序,踩着硬件的鼓点,掌握计算机的精髓!

汇编语言在不同的领域和应用场景中有着不同的重要性,也在大学基础教程中起着不可或缺的作用,例如:

  1. x86汇编:PC机上最广泛使用的汇编语言,应用于操作系统、编译器、驱动程序等方面。
  2. ARM汇编:移动设备和嵌入式系统上广泛使用的汇编语言,应用于单片机、嵌入式操作系统、物联网等方面。
  3. MIPS汇编:应用于路由器、游戏机、数字信号处理等领域。
  4. PowerPC汇编:应用于高性能计算机和游戏机等领域。
  5. AVR汇编:常用于单片机和电子嵌入式系统开发。

所以学习汇编语言还是很有必要的,最怕的结果就是要用的时候不会(dog)

本章节的主要任务就是了解汇编语言,为后面编写汇编语言的章节打好基础!

从机器语言到汇编语言

机器语言和机器指令

我们知道机器语言都是有01二进制代码组成的,它被用于与计算机硬件交互的指令集。计算机的底层语言,是由CPU能够直接执行和解释的语言形式。机器语言编写的程序必须被翻译成机器指令才能被计算机执行。每一条机器指令都对应着机器语言中的一条指令,用于告诉CPU执行具体的操作,例如将数据从寄存器中读取、将数据写入内存地址等。

机器指令是指计算机硬件能够直接识别和执行的单条指令。与高级语言不同,机器指令不需要经过编译或解释器的处理,而是直接由CPU解码并执行。机器指令通常由一个操作码和操作数两部分组成,其中操作码表示指令的类型,操作数则表示需要被操作的数据或地址。这个在计算机组成原理中有详细介绍

汇编语言和汇编指令

汇编语言程序需要通过汇编器将其翻译成对应的机器指令,才能被计算机执行。汇编语言的出现更像是为了程序员好记而诞生,它是由一些助记符构成的,这些助记符和指令的操作码一一对应。

汇编指令是汇编语言中最基本的语言单元,它是由操作码和操作数两部分组成的。操作码表示指令要执行的操作类型,例如“MOV”表示将数据从一个存储区移到另一个存储区,而操作数则表示操作的目标地址或者是源数据。汇编指令按照不同的操作类型被分为不同的类型,例如数据传输指令、算术运算指令、逻辑运算指令等等。在汇编语言程序中,汇编指令可以结合标签和特定的寻址方式来定位具体的内存地址,访问其中的数据和代码。

汇编语言和机器语言的关系

  1. 机器语言和汇编语言,两者都是计算机能够理解和执行的指令序列。

  2. 机器语言是由二进制代码组成的指令集,它直接与计算机硬件进行交互,对硬件进行控制和操作。机器语言是计算机指令的最基本形式,所有的计算机程序最终都需要被翻译成机器语言才能被计算机执行。

  3. 而汇编语言则是机器语言的助手,在程序员和计算机之间建立了一座桥梁。汇编语言是一种基于机器语言,并通过符号助记符号来描述指令、寄存器、内存地址等的语言。在汇编语言中,程序员可以使用可读性更高的符号和命令来表示机器指令,使得程序设计和调试更加容易和直观。

因此,机器语言和汇编语言之间的关系是密不可分的。汇编语言是机器语言的翻译助手,可以帮助我们更加高效地对计算机进行控制。

汇编语言的工作流程

上面我们说明了从机器语言到汇编语言的基本过程,那么汇编语言的工作流程是什么呢?它需要翻译成机器语言后才能执行吗?

我们先看汇编语言的工作流程:

  1. 编写汇编语言程序:使用汇编语言编写指令序列,描述程序需要执行的操作和控制流程。

  2. 汇编程序:汇编器把汇编语言程序翻译成机器语言指令,生成目标代码文件。目标代码文件包括机器语言指令、数据、符号表等信息。

  3. 链接目标文件:将目标文件与其他目标文件或库文件链接在一起,生成最终的可执行文件。链接器把汇编语言程序所需的库函数、标准程序等一起打包成可执行文件。

  4. 装载程序:把可执行文件装载到内存中,并准备好执行环境。装载程序把程序代码和数据加载到相应的内存地址空间中,然后把控制权交给程序开始执行。

  5. 执行程序:CPU执行程序,根据指令序列完成各种操作和控制流程,包括算术和逻辑运算、内存读写、跳转、分支等。程序执行完毕后,返回结果并退出。

通过上序流程,我们不难发现,汇编语言程序是原始的指令序列,需要经过汇编、链接和装载等多个阶段才能变成可执行的程序。因此,汇编语言程序的调试和优化也需要在不同阶段进行,包括语法检查、运行时错误检查、代码分析和优化等。

插入计组知识——计算机的组成

在这里插入图片描述

  1. CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,我们要让它进行工作,就必须要向它发出指令
  2. 指令和数据存放到内存中,所以离开了内存再好的CPU也无法工作,比如bios,离开硬盘能进去,但是离开内存就进不去

指令和数据都存储在内存或硬盘上
例如:开机后,打开保存的程序,从硬盘读取到内存,再由内存转到CPU进行指令的执行。

指令和数据都是二进制数

计算机的存储单元

计算机当中的存储单元指储存和读取数据的基本单元,主要包括以下几种类型:

  1. 寄存器:位于CPU内部的存储单元,用于暂存指令和运算的数据。寄存器具有极快的存取速度和访问效率,但容量较小,一般只有几十个到一百个。

  2. 缓存:位于CPU和主存之间的存储单元,用于加速CPU对数据的访问速度。缓存分为一级缓存和二级缓存,一级缓存放置在CPU内部,二级缓存放置在CPU芯片上或者主板上,容量比寄存器大,但比主存小。如今的cpu一般都有三级缓存。

  3. 主存:也称为内存,是计算机中最主要的储存单元,用于存放程序和数据。主存的容量一般比CPU内部的寄存器和缓存大得多,但访问速度比较慢。

  4. 辅助存储器:例如硬盘、光盘、U盘等,用于长期储存数据和程序,容量巨大,但是访问速度比主存慢很多。

不难发现,一般情况下来说,存储器的速度和容量一般都呈现出反比,不可兼顾,否则我们只要有一个存储器就足够了,哈哈哈

计算机的总线

专门连接CPU和其他芯片的导线,通常称为总线
在这里插入图片描述
物理层面:一根根导线的集合
逻辑层面:地址总线,数据总线,控制总线
它们分别负责传输地址信息、数据信息和控制信息,是计算机中各个存储单元之间进行数据交换的基础。

  1. 地址总线:地址总线用于传输内存地址信息,它的宽度决定了CPU可以寻址的内存容量。例如,如果地址总线宽度为20位,那么CPU最多可以寻址2的20次方,即1MB的内存空间。当CPU需要读取或写入数据时,它会将地址信息发送到内存或设备的控制器中,用于选择特定的存储单元。

  2. 数据总线:数据总线用于传输数据信息,它的宽度决定了CPU和存储单元之间可以传输的数据位数。例如,如果数据总线宽度为32位,则可以一次性传输32位的数据。当CPU需要读取或写入数据时,它会通过数据总线和系统总线将数据信息传输到内存或设备中。

  3. 控制总线:控制总线用于传输控制信息,它包含了各种控制信号,例如读写控制、中断请求、时钟信号等。当CPU需要与存储单元或设备进行交互时,它会通过控制总线向相应的存储单元或设备发送控制信号,控制其进行数据传输、状态转移等操作。

内存读写和地址空间

由于我们学习汇编语言的时候是直接和内存进行打交道的,所以关于内存的读写和地址空间,我认为有必要主要的聊聊。

汇编语言程序必须通过内存寻址来访问计算机内存中的数据和指令。在程序执行时,汇编语言程序会产生不同的机器指令,这些指令会直接加载到计算机内存中执行。在执行过程中,程序需要通过内存寻址定位指令和数据的位置,并进行相关的操作。不仅直接与内存进行交互,还直接涉及CPU中的寄存器、缓存和控制器等硬件器件

CPU对存储器的读写:

  1. 获取存储单元的地址(地址信息)
  2. 器件的选择,读或写命令(控制信息)
  3. 读或写的数据(数据信息)

地址空间

什么是地址空间?

  • CPU地址总线为N,寻址空间为2^N B

我们从CPU角度来看地址空间的分配:

从CPU的角度来看,地址空间是指CPU可以访问到的内存地址的范围。在CPU中,地址空间被划分为不同的区域,每个区域被分配给不同的存储单元,例如内存、I/O设备、寄存器等。CPU在执行指令时,需要根据指令中的地址信息访问相应的存储单元,从而完成指令的执行。

  • 在32位CPU中,通常将整个地址空间分为4GB的虚拟地址空间和物理地址空间。虚拟地址空间是应用程序能够访问到的地址范围,它是针对每个进程单独分配的地址空间。系统通过虚拟内存管理机制将虚拟地址映射到物理地址上,从而实现虚拟地址空间的分配和管理。

  • 物理地址空间是CPU与实际物理内存之间的地址空间。物理地址是指计算机中真实的内存地址,它是硬件地址,对应的是内存芯片上的实际地址。物理内存对应的地址空间是映射到虚拟地址空间中的某个区域上,由操作系统通过页表来完成地址映射。

  • 在CPU中,地址空间的大小由地址总线的宽度来决定。如果其地址总线的宽度为32位,那么其地址空间的大小为2的32次方(即4GB)。在现代CPU中,通常采用了与此相比更大的地址总线宽度,以支持更大的地址空间和更高的内存容量。

CPU需要寻址和读写内存中的数据和指令,地址空间的划分和管理直接关系到系统的性能、可靠性和安全性。

如下图所示,CPU与地址空间的联系:
在这里插入图片描述

最后

如果本文对你有所帮助,还请三连支持一下博主!
请添加图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。