Performance 汇编级和硬件级内存获取、处理、分段、偏移、内存寻址范围等方面的混淆
我很困惑学习了一段时间的汇编,并回顾了许多关于它的优秀教程 我必须说,除了记住一些指令去做一些你不完全理解的事情之外,要完全理解整个计划的有用性是非常困难的 我想成为一名操作系统开发人员和设计师,因此我必须从硬件本身了解低级硬件数据处理、内存管理、处理器获取、解码和内存分割、内存使用、位和字节使用、调用堆栈和硬件堆栈,以及机器级程序的机制 以下是我感到困惑的主要问题: 处理器从RAM中提取字节。在编写引导加载程序时,在编写指令之前,您可以“跳转”到一个地址。跳转到内存中的地址后执行的第一条指令,例如move/data copyPerformance 汇编级和硬件级内存获取、处理、分段、偏移、内存寻址范围等方面的混淆,performance,Performance,我很困惑学习了一段时间的汇编,并回顾了许多关于它的优秀教程 我必须说,除了记住一些指令去做一些你不完全理解的事情之外,要完全理解整个计划的有用性是非常困难的 我想成为一名操作系统开发人员和设计师,因此我必须从硬件本身了解低级硬件数据处理、内存管理、处理器获取、解码和内存分割、内存使用、位和字节使用、调用堆栈和硬件堆栈,以及机器级程序的机制 以下是我感到困惑的主要问题: 处理器从RAM中提取字节。在编写引导加载程序时,在编写指令之前,您可以“跳转”到一个地址。跳转到内存中的地址后执行的第一条指令,
MOV AL,MOV BL
类指令检索CPU管道上未直接在内存中使用的数据。但是,如果指令是从内存加载/获取的,处理器如何在其管道上生成代码数据段呢?还是我这里都错了?微处理器在引导加载程序中的基本步骤是什么?如果指令都是从内存中提取的(例如汇编中的代码段,但数据段和文本段都是处理器的指令),CPU如何在不使用内存的情况下从管道生成代码数据
另外,对于一些比我更有经验的人来说,我的下一个主要问题可能很容易回答:
为什么x86和其他体系结构上的内存/RAM存储为带偏移量的“段”?对我来说,这比需要的更复杂。为什么所有的内存不能是线性的、寻址的、获取的、存储的和计算的,并以更直接的方式移入和移出寄存器到内存单元?这难道不比让大量寄存器处理基于内存的数据存储和访问的二维分段更容易理解和理解体系结构吗?这不仅仅是“汇编”与“高级语言”
真正的问题是“真实”与“受保护”(虚拟内存)模式
不幸的是,大多数x86程序集示例恰好是DOS示例。IMHO与当代32/64位虚拟内存体系结构(包括但不限于x86)几乎没有关联
优质底漆:
附言:
在大多数现代操作系统(包括Windows、Linux和Mac操作系统)上,x86的地址空间实际上是线性的。x86段寄存器在很大程度上是DOS时代的错误
如果您感兴趣,下面是Linux引导过程的一个很好的概述: