所以我知道以下寄存器及其用途应该是什么:
CS = 代码段(用于 IP)
DS = 数据段(用于 MOV)
ES = 目标段(用于 MOVS 等)
SS = 堆栈段(用于 SP)
但是以下寄存器的用途是什么?
FS =“文件段”?
GS = ???
注:我是not询问任何特定的操作系统——我询问 CPU 的用途(如果有的话)。
答案
它们的用途以及 Windows 和 Linux 的用途。
段寄存器背后的初衷是允许程序访问许多不同(大)的内存段,这些内存段是独立的并且是持久虚拟存储的一部分。1966 Multics操作系统,将文件视为简单的可寻址内存段。
我们当前的 2010 年操作系统是一个巨大的倒退,这就是为什么它们被称为"太监"。你的进程空间的单个段,给出所谓的"平坦(恕我直言,迟钝)地址空间"。
AMD 在转向 64 位时决定,他们并不关心是否消除了 Multics 作为一种选择(这是仁慈的解释;无情的解释是他们对 Multics 一无所知),因此禁用了 64 位模式下段寄存器的一般功能。
恕我直言,让每个线程的内存映射都有一个绝对虚拟地址(例如,0-FFF)作为其线程本地存储(不需要[段]寄存器指针!);
所以,段寄存器现在有点像你的附录。
那些不了解历史的人并不注定要重蹈覆辙;