0

受保护平面模型中给定进程的 CS 和 DS 段寄存器是否保持相同的值?
换句话说,在同一个程序中执行以下代码序列
mov dword ptr [0x7fffffff], ebx
并且
org 0x7fffffff
...some instruction ...

参考同一个位置?(如果是这样,那么在受保护的平面模型中拥有单独的 CS 和 DS 的目的是什么?)谢谢。

4

1 回答 1

2

段寄存器的值和含义取决于环境(即操作系统和操作系统模式),今天主要使用平面内存模型的保护模式。我假设您正在为 Windows (Win32) 开发,因为您正在使用 MASM 语法。

Win32 编程模型使用平坦的 32 位地址空间,就像大多数 Unix 变体一样。通过 CS、DS、ES 和 SS 寻址的位置指的是相同的逻辑地址。i386 的 FS 寄存器指向 Win32 任务信息块 (TIB)。

段寄存器 CS、DS、ES 和 SS(我是否忘记了一个 :-)?)主要具有历史意义,源于 8086 时代。任何体面的 x86 汇编教程都会为您解决这个问题。

org伪操作码告诉汇编器将其位置计数器更改为给定值。这会影响代码的位置以及计算的基本相对地址。不同的汇编程序以不同的方式处理此命令(NASM/MASM)。对于应用程序,请坚持示例中的默认设置。如果您对系统编程感兴趣,请下载 Linux 内核和 Grub 并分析引导代码。

坚持主题 - 你会学到很多关于你的机器的知识!

于 2013-06-05T17:30:56.373 回答