前言
说起自己读汇编,总有人会在问:读汇编有啥意义?读汇编对我的开发工作有帮助吗?...我觉得读汇编是为了让我们更好地有计算机工作原理方面的知识,不仅仅是一味地高屋建瓴。就拿 IDE 和 Linux gcc 来说,我们为什么要试着用 gcc 去编译链接并生成可执行程序,而不是点一下 Run 程序就能跑起来?原因还是在我们想探究程序运行的本质。
而汇编就是一门帮助我们更好地理解程序如何“跑起来”的语言,它最接近机器语言这门计算机唯一能识别的语言,深入数据在内存单元的存储,直接对内存单元进行操作,自然就涉及到 CPU 相关的运作等等等计算机核心部件,相信读了它,我们对操作系统能有更深入地认识。
CPU与数据
由于最终运行程序的是CPU,所以我们使用汇编语言编程的时候,最好从CPU的角度去考虑问题,这里谈谈存储器、三条总线、内存地址空间的概念。
- 存储器
- 想让CPU工作,就得给CPU提供指令和数据,而这些东西存在哪呢?存在内存器里,也就是我们常说的内存,这些内存被划分成多个存储单元,顺序编号,以方便CPU从里头拿出、放入数据。
- 三条总线
- 三条总线的目的是让CPU知道此时是该从哪儿拿出放入数据,而想要完成这一步操作,就得告诉CPU:在哪儿、干什么。
- 地址总线:将地址传输给CPU,告诉CPU在哪儿操作
- 控制总线:告诉CPU是读出数据还是写入数据
- 数据总线:传输数据
- 内存地址空间
- 什么叫内存地址空间?由于我们的地址总线数量是一定的,那代表了我们可得到的地址数值也是有限的,举个例子:地址总线数量为10,那么从编号为0到1024的内存单元可以被寻址到,而在往后的地址就无可奈何了。这1024个可被寻址的内存单元就构成了内存地址空间。
- 内存地址空间是一个逻辑存储器,因为它把不同的硬件内存都映射在一个空间里,占有不同的地址段,而在实际上硬件的内存位置是离散的。
- 我们在对内存地址空间进行操作的同时,实际上就是对相对应的物理存储器进行操作。