程序中是否始终需要数据段?

时间:2014-03-11 06:00:41

标签: memory assembly x86 cpu-registers segment

我正在开发一门专注于x86奔腾处理器的汇编语言课程,并且正在开发一个Linux系统。我知道程序被加载到内存中,你可以直接在寄存器中执行操作,但我不确定你是否可以完全避免创建数据段。

是或否,然后简要解释为什么会很棒。

1 个答案:

答案 0 :(得分:2)

不是必需的。数据段只是为数据分配的一块内存,因此可以写入和读取。代码段是只读的。如果您尝试写入代码段,硬件将生成中断。但是,汇编代码可以被馈送到存储器中的任何地址,如果禁用了保护模式,则硬件不会产生中断。

例如,引导扇区在启动时加载到一个非常有限的空间中,并且很常见(因为空间受到限制)在代码字节中放置变量。有一次,我甚至编写了一个引导扇区,调整了自己的字节码,以适应从不同磁盘引导的差异。所以这是一个使用代码地址作为变量的代码。

但是,虽然您绝对可以避免创建数据段,但99.99%的时间会将数据段分开。

您可能还想阅读protected mode以更好地理解这一点。