我很困惑学习了一段时间的汇编,并回顾了许多关于它的优秀教程。
除了记住一些指令来做一些你不完全理解的事情之外,我必须说要完全理解它的整个用处是非常困难的。
我想成为一名操作系统开发人员和设计人员,所以我必须了解低级硬件数据处理、内存管理、处理器获取、解码和内存分段、内存使用、位和字节使用、调用堆栈和硬件堆栈,以及硬件本身的机器级程序的机制。
以下是我感到困惑的主要问题:
处理器从 RAM 中获取字节。在编写引导加载程序时,您在编写指令之前“跳转”到一个地址。跳转到内存中的地址后执行的第一条指令,例如移动/数据复制MOV AL, MOV BL
类型的指令,在 CPU 的流水线上检索不直接在内存中使用的数据。但是,如果指令是从内存中加载/获取的,处理器如何在其管道上生成代码数据段呢?还是我在这里都错了?微处理器在引导加载程序中执行的基本步骤是什么,如果指令全部从内存中获取,CPU如何在不使用内存的情况下从流水线生成代码数据(例如,汇编中的代码段,但数据段和文本段都是指令对于处理器)?
此外,对于比我更有经验的人来说,我的下一个主要问题可能很容易回答:
为什么 x86 和其他架构上的内存/RAM 存储为带有偏移的“段”?对我来说,这比它需要的要复杂得多。为什么所有内存都不能是线性的、寻址的、获取的、存储的和计算的,以及以更直接的方式移入和移出寄存器到存储单元?与让大量寄存器处理基于内存的数据存储和访问的二维分段相比,这不会使架构的说明和理解更容易理解和更直接吗?