assembly - x86 保护模式下段寄存器的用途是什么?

标签 assembly x86 cpu-registers memory-segmentation

我需要修改一些 dll,但我不知道,在保护模式下段寄存器( DSSS 、...)究竟做了什么。我在学校学到了真正的 16 位模式,其中段寄存器乘以 16 加上正常寄存器中的偏移量给出物理内存中的有效地址。在保护模式下,有一些平面内存模型和虚拟内存,其中每个进程“有”4GB 内存,所以如果寄存器有 32 位,那么我只能通过“偏移”寄存器来寻址虚拟内存的每个字节。例如,哪些目的在保护模式下具有段寄存器

mov eax, dword ptr ds:[20037DA0] 

最佳答案

基本上目的与实模式相同,只是它们的工作方式略有不同。您的示例中的 DS 在您的 GDT 中选择一个内存描述符(如果您真的想了解这一点,请使用谷歌这个术语,“全局描述符表”),其中包含基地址、结束地址、粒度等信息。然后将您的偏移量添加到基地址, 结束。如果你在 windows 上(我打赌在 linux 上是一样的)你通常不必担心这些段寄存器,正如你所说的它的平面模型,这意味着所有内存应该只有一个描述符,所以如果你不改变这些寄存器应该像它们不存在一样工作。

关于assembly - x86 保护模式下段寄存器的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335003/

相关文章:

c - 仅使用常量移位模拟可变位移位?

c - Apple LLVM-gcc x86 程序集中发生了什么?

c - 如何指示可以使用内联ASM参数*指向*的内存?

assembly - 影子寄存器——arm

c - 在没有堆栈的情况下在 Linux 上进行系统调用

assembly - 不延迟汇编的循环会使我的电脑崩溃吗?

c++ - 在没有 Volatile、std::atomic、信号量、互斥锁和自旋锁的情况下访问共享内存?

cpu-architecture - 为什么CPU寄存器可以快速访问?

在保存和检索机制之间拥抱命令的代码

在 C 中调用汇编函数,反转字符串