所以我知道以下寄存器及其用途应该是什么:

  • CS = 代码段(用于 IP)

  • DS = 数据段(用于 MOV)

  • ES = 目标段(用于 MOVS 等)

  • SS = 堆栈段(用于 SP)

但是以下寄存器的用途是什么?

  • FS =“文件段”?

  • GS = ???

注:我是not询问任何特定的操作系统——我询问 CPU 的用途(如果有的话)。

答案

它们的用途以及 Windows 和 Linux 的用途。

段寄存器背后的初衷是允许程序访问许多不同(大)的内存段,这些内存段是独立的并且是持久虚拟存储的一部分。1966 Multics操作系统,将文件视为简单的可寻址内存段。

我们当前的 2010 年操作系统是一个巨大的倒退,这就是为什么它们被称为"太监"。你的进程空间的单个段,给出所谓的"平坦(恕我直言,迟钝)地址空间"。

AMD 在转向 64 位时决定,他们并不关心是否消除了 Multics 作为一种选择(这是仁慈的解释;无情的解释是他们对 Multics 一无所知),因此禁用了 64 位模式下段寄存器的一般功能。

恕我直言,让每个线程的内存映射都有一个绝对虚拟地址(例如,0-FFF)作为其线程本地存储(不需要[段]寄存器指针!);

所以,段寄存器现在有点像你的附录。

那些不了解历史的人并不注定要重蹈覆辙;

来自: stackoverflow.com