Performance 汇编级和硬件级内存获取、处理、分段、偏移、内存寻址范围等方面的混淆

Performance 汇编级和硬件级内存获取、处理、分段、偏移、内存寻址范围等方面的混淆,performance,Performance,我很困惑学习了一段时间的汇编,并回顾了许多关于它的优秀教程 我必须说,除了记住一些指令去做一些你不完全理解的事情之外,要完全理解整个计划的有用性是非常困难的 我想成为一名操作系统开发人员和设计师,因此我必须从硬件本身了解低级硬件数据处理、内存管理、处理器获取、解码和内存分割、内存使用、位和字节使用、调用堆栈和硬件堆栈,以及机器级程序的机制 以下是我感到困惑的主要问题: 处理器从RAM中提取字节。在编写引导加载程序时,在编写指令之前,您可以“跳转”到一个地址。跳转到内存中的地址后执行的第一条指令,

我很困惑学习了一段时间的汇编,并回顾了许多关于它的优秀教程

我必须说,除了记住一些指令去做一些你不完全理解的事情之外,要完全理解整个计划的有用性是非常困难的

我想成为一名操作系统开发人员和设计师,因此我必须从硬件本身了解低级硬件数据处理、内存管理、处理器获取、解码和内存分割、内存使用、位和字节使用、调用堆栈和硬件堆栈,以及机器级程序的机制

以下是我感到困惑的主要问题:

处理器从RAM中提取字节。在编写引导加载程序时,在编写指令之前,您可以“跳转”到一个地址。跳转到内存中的地址后执行的第一条指令,例如move/data copy
MOV AL,MOV BL
类指令检索CPU管道上未直接在内存中使用的数据。但是,如果指令是从内存加载/获取的,处理器如何在其管道上生成代码数据段呢?还是我这里都错了?微处理器在引导加载程序中的基本步骤是什么?如果指令都是从内存中提取的(例如汇编中的代码段,但数据段和文本段都是处理器的指令),CPU如何在不使用内存的情况下从管道生成代码数据

另外,对于一些比我更有经验的人来说,我的下一个主要问题可能很容易回答:

为什么x86和其他体系结构上的内存/RAM存储为带偏移量的“段”?对我来说,这比需要的更复杂。为什么所有的内存不能是线性的、寻址的、获取的、存储的和计算的,并以更直接的方式移入和移出寄存器到内存单元?这难道不比让大量寄存器处理基于内存的数据存储和访问的二维分段更容易理解和理解体系结构吗?

这不仅仅是“汇编”与“高级语言”

真正的问题是“真实”与“受保护”(虚拟内存)模式

不幸的是,大多数x86程序集示例恰好是DOS示例。IMHO与当代32/64位虚拟内存体系结构(包括但不限于x86)几乎没有关联

优质底漆:

附言: 在大多数现代操作系统(包括Windows、Linux和Mac操作系统)上,x86的地址空间实际上是线性的。x86段寄存器在很大程度上是DOS时代的错误

如果您感兴趣,下面是Linux引导过程的一个很好的概述:


但不幸的是,“真实”与“受保护”模式或虚拟内存的概念与CPU直接使用真实内存(无虚拟实现)进行的数据处理的实际实现无关。我想知道的是我应该如何理解数据处理,如何利用这些知识来真正了解我的代码在做什么,以及我将如何在该级别实现代码、数据和内存段以及处理。DOS x86示例是无用的,因为磁盘操作系统的操作特别适用于该操作系统。我想从一个公正的角度全面了解它(例如,磁盘操作系统和基于Linux的引导是特定于该操作系统的,并没有概述内存地址、指令解码和系统处理设计实现的基本概念)。Q:“但不幸的是,“真实”与“受保护”的概念“模式或虚拟内存通常与CPU直接使用真实内存(无虚拟实现)进行的数据处理的实际实现无关。”答:这完全是错误的。“虚拟内存”是一种“硬件设备”。CPU加载、存储和操作进程所看到的相同虚拟地址(或内核)。阅读PGU-我真的认为你会喜欢它:)但目前我只是想理解它,而不想混淆虚拟内存,而你给出的网站并不清楚。伙计-这不是“混淆”。这是基本的。对于当代系统来说,你根本无法理解“内存访问”的概念同时也没有掌握“物理”和“虚拟”地址之间的区别。而且,就这点而言,内存映射IO也是如此。老实说:)IMHO。。。