网站建设的制度,黄页网址大全免费,wordpress 底部 wap,网站建设教程大全 百度网盘嗨~你好呀#xff01;
我是一名初二学生#xff0c;热爱计算机#xff0c;码龄两年。最近开始学习汇编#xff0c;希望通过 Blog 的形式记录下自己的学习过程#xff0c;也和更多人分享。
这篇文章主要讲述学习汇编所需的基础知识。
话不多说~我们开始吧#xff01; 目…嗨~你好呀
我是一名初二学生热爱计算机码龄两年。最近开始学习汇编希望通过 Blog 的形式记录下自己的学习过程也和更多人分享。
这篇文章主要讲述学习汇编所需的基础知识。
话不多说~我们开始吧 目录 二 1. 汇编语言是什么
二 2. 汇编语言的产生及组成
二 3. 存储器、内存地址空间及 CPU 对内存的读写
1. 存储器
2. 内存地址空间
3. CPU 对内存的读写
二 4. 总线
1. 地址总线
2. 控制总线
3. 数据总线 二 1. 汇编语言是什么
先上概括
汇编是一种低级语言。它直接和计算机硬件打交道直接描述和控制了 CPU 的运行。
我们都知道计算机是听不懂 int main()coutcin 等一类的高级语言中的语句的它们最终都或会被 g或 gcc编译成二进制指令编译器再把这串二进制指令交给 CPU让它去执行.......
那我们知道这个过程中计算机到底做了些什么吗cout Hello Assembly!; 到底是怎么被计算机理解并执行的忽然发现这个问题有点像 “从按下 Enter 键到浏览器把网页显示出来之间都发生了什么”...
这时候就要汇编上场啦~
汇编可以让我们了解 CPU 的到底做了些什么有助于我们理解高级语言代码的运行步骤。也可以把汇编和计算机组成原理 “配套学习”全面地了解计算机的底层原理。
在写高级语言代码的时候如果真的遇到一些难以理解的问题用汇编看一看是一个非常好的选择呀
不过汇编能做的事可不仅仅限于这些......
汇编主要用于底层开发如操作系统驱动程序、内核、嵌入式等。几乎所有大型系统包括硬件和软件的底层都是汇编。
我最初决定学汇编是因为我在学网络安全汇编是逆向工程的基础也是 re 和 pwn 的基础或者说成为黑客的基础哈哈哈哈哈哈。
不过学了一天后我发现汇编本身就很好玩 二 2. 汇编语言的产生及组成
Weeeeell。其实汇编的产生原因很简单——计算机能理解二进制指令但是人类很难理解啊对人类来说二进制指令难以记忆、难以调试、极端浪费时间。试想把你现在正在写的代码全部替换成二进制其中有一个 0 被错误地写成了 1.......请找到这个 bug。
是不是很可怕。如果使用二进制指令的话或许全球所有设备加起来的存储空间也放不下 ChatGPT 的源代码bushi。
必须使用二进制指令给整个计算机行业的发展带来了很大的障碍所以汇编语言诞生啦
汇编语言的主体是汇编指令而汇编指令其实就是二进制指令便于记忆和书写的格式它和二进制指令是一一对应的。
这也是为什么汇编语言无法跨操作系统因为每种操作的系统的二进制指令集都是不同的所以对应的汇编语言也不同。最简单的例子就是 x86 和 arm。
but虽然汇编指令和二进制指令一一对应但它毕竟不是二进制指令所以也需要汇编编译器将汇编代码编译为二进制代码再交给 CPU 执行——不过这个过程较为 “公开透明”。
汇编语言主要由三部分组成
· 汇编指令——二进制指令对应的文字形式计算机执行
· 伪指令——assume 等由编译器执行计算机不执行
· 特殊符号—— - * / 等都算由编译器识别计算机不执行 前面说过汇编相当于 “面向硬件编程”所以在学习编写汇编程序前我们需要简单了解一下计算机的重要组成部分。不过不会很复杂因为我也还没学《组成原理》......。 二 3. 存储器、内存地址空间及 CPU 对内存的读写
存储器想必我们都不陌生......寄存器、RAM/ROM、硬盘等都属于存储器的范畴。
CPU 要工作它先要知道工作内容是什么——这就需要向它提供指令和数据其实就是一串二进制数字。
那这些指令和数据存储在哪呢——存储器。
存储器就像 CPU 的脑子一样没有存储器CPU 什么也干不了。
学习汇编首先需要了解什么是存储器 内存地址空间 CPU 是如何读写内存的。
1. 存储器
顾名思义存储器就是用于存储信息的。不同存储器的存取速度和存储容量如下图所示一般情况下存取速度和存储容量成反比即速度越快容量越小。 一台设备中装有多个存储器芯片它们在物理连接上彼此独立。按照读写属性可分为两类随机存储器RAM和只读存储器ROM。前者可读可写但断电后内容丢失后者只可读不可写但断电后内容不丢失。
RAM/ROM 存储器从功能和连接上可分为以下几类在此不过多介绍。
· 随机存储器 RAM
· 装有 BOIS 的 ROM
· 接口卡上的 RAMCPU 通过接口卡间接地对外部设备进行控制 因为 CPU 无法直接读取外存储器需要先读取到内存储器中CPU 再读取内存储器所以下文仅介绍内存储器。
2. 内存地址空间
诶这就有一个问题了。
内存储器是彼此独立的那它们所对的地址空间呢不同存储器对应的地址空间也是彼此独立的吗即RAM 从 0-1000ROM 从 0-2000每个都从 0 开始
好像并不是诶......
没错虽然内存储器是彼此独立的但它们的地址空间并不彼此独立而是连续的。
这表明CPU 在操控内存储器的时候把它们总的看作一个逻辑存储器这个逻辑存储器就是内存地址空间。
不同的物理存储器在这个逻辑存储器中占有一段地址空间CPU 在这段地址空间中读写数据就相当于在对应的物理存储器中读写数据。
下图是一个内存地址空间的模型它将各类内存储器都看作一个逻辑存储器地址连续。 比如 RAM 在内存地址空间中占有的地址段就是 00000-9999F在这一段中读写数据相当于在 RAM 中读写数据。
类似一个个储物柜每个有不同的编号存放不同的人的东西。内存地址空间也被划为一个个内存单元每个内存单元有不同的编号存放不同的指令或数据。
内存单元的编号是连续的最小编号是 0最大编号是由地址总线宽度决定的后面会提到~。
一个内存单元可以存储 8 bits八个二进制位也就是 1 Byte一个字节设备的内存容量都是以 Byte 为最小单位计算的。如 4 GB 内存 4 * 2^10 * 2^10 * 2^10 Bytes即 4 * 2^10 * 2^10 * 2^10 个内存单元。
3. CPU 对内存的读写
设想你在储物柜存放物品后肯定会记住这个储物柜的编号方便来取物品或放入新的物品。CPU 也一样它想读写存储器就必须知道它要读写的内存单元的编号物理地址。
同理你知道你要取物品还是放物品。CPU 也需要知道它是要读还是要写。
同理你知道要从储物柜中取出什么东西或放入什么东西。CPU 也需要知道它要读或写什么信息。
总结一下CPU 想要读取存储器需要和存储器芯片进行以下三类信息的交互
· 内存单元的地址地址信息
· 读 or 写控制信息
· 读或写的数据数据信息
问题来了CPU 如何将这些信息传到存储器芯片中
我们知道在计算机硬件中一切都是电信号高电平代表 1低电平代表 0。所以这些信息最终也会被用电信号表示出来那当然就要用导线传送啦emm 还没学到的初三物理知识突然开始攻击我
在计算机中有专门连接 CPU 和芯片们的导线称为总线也就是一根根导线的集合。
总线可以按照逻辑或用途分为三类下文会详细介绍
· 地址总线传送地址信息
· 控制总线传送控制信息
· 数据总线传送控制信息
比如CPU 从 3 号内存单元中读取数据的过程如下图所示注此处的 “3” 并不是一个规范的内存地址。 1. CPU 通过地址线将内存单元的地址3告诉内存。
2. CPU 通过控制线向内存芯片发出读取内存的命令。
3. 内存将 3 号单元中的数据8通过数据线送入 CPU。
至此内存读取就已经完成啦~
内存写入和读取大同小异只需要把第 2 步改成 “发出写入内存的命令”第 3 步改成 “CPU 通过数据线将数据8送入 3 号内存单元”。
这部分看起来并不深奥但对于理解汇编语言也是很重要的哦 二 4. 总线
上部分提到了“总线”。总线其实就是在 CPU 和各个器件之间传递信息的导线的集合分为以下三类
· 地址总线
· 控制总线
· 数据总线
它们的物理构造是相同的但逻辑功能不同。
1. 地址总线
CPU 通过地址总线来指定内存单元。
它如何指定内存单元呢——按照内存单元在内存地址空间中的地址。
可见地址总线一共能组合出多少种内存单元地址CPU 就可以对多少个内存单元进行寻址因为如果内存单元数大于地址总线可以组合出的数量CPU 就无法通过地址总线找到那些内存单元了。
一个 CPU 有 N 根地址线就说这个 CPU 的地址总线的宽度为 N根据排列组合可得这样的 CPU 最多可以寻找 2^N 个内存单元一根线可以表示 0 或 1 两种情况N 根线就可以表示 2^N 种情况。
2. 控制总线
上文提到CPU 进行内存读写时需要通过控制总线发出读或写的命令这是 CPU 对其它器件此处为存储器的一种控制。
CPU 通过控制总线控制其它器件如存储器、外设接口卡等。
控制线的数量决定了 CPU 对器件的控制能力有多少根控制线就意味着 CPU 提供了对器件的多少种控制。
3. 数据总线
CPU 与内存或其它器件之间的数据传送是通过数据总线进行的。
数据总线越宽CPU 和器件之间的数据传送速度越快。比如我们经常说的 “64 位”、“32 位” 等都是指数据总线的宽度。N 根数据总线一次能传送 N 个 bit也就是 N/8 个 Byte。
下图展示了 8 位数据总线和 16 位数据总线之间的区别
8 位 16 位 这部分也不难但后面学到 CPU 读取、执行指令的工作原理时还会提到也是一个重要的部分。 以上就是本文的全部内容啦~感谢你看到这里~
作者只是一名初学者有任何错误或解释不当之处欢迎指出呀~一起加油
那我们下一篇再见咯~ 2023-02-25 By Geeker · LStar