做CS& 受保护的平面模型中给定流程的DS段寄存器是否保持相同的值?
换句话说,在同一程序中执行以下代码序列
mov dword ptr [0x7fffffff], ebx
和
mov dword ptr [0x7fffffff], ebx
指的是同一个地方? (如果是这样,那么在受保护的扁平模型中使用单独的CS& DS的目的是什么?)谢谢。
答案 0 :(得分:1)
段寄存器的值和含义取决于环境(即操作系统和OS模式),现在大多数情况下使用具有平坦存储器模型的保护模式。我假设您正在使用MASM语法开发Windows(Win32)。
Win32编程模型使用扁平的32位地址空间,就像大多数Unix变种一样。通过CS,DS,ES和SS寻址的位置指的是相同的逻辑地址。 i386的FS寄存器指向Win32任务信息块(TIB)。
段注册CS,DS,ES和SS(我忘了一个:-)?)主要具有历史意义,源于8086年代。任何体面的x86汇编教程都会为你清楚。
org
伪操作码告诉汇编器将其位置计数器更改为给定值。这会影响代码的位置以及计算基本相对地址的位置。不同的汇编程序以不同方式处理此命令(NASM / MASM)。对于应用程序,请坚持使用示例中的默认值。如果您对系统编程感兴趣,请下载Linux内核和Grub并分析引导代码。
坚持这个主题 - 你会学到很多关于你机器的知识!