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

Memory 程序中是否始终需要数据段?,memory,assembly,x86,cpu-registers,segment,Memory,Assembly,X86,Cpu Registers,Segment,我正在学习一门汇编语言课程,重点是x86奔腾处理器,我在Linux系统上工作。我知道程序被加载到内存中,您可以直接在寄存器中执行操作,但我不确定您是否可以完全避免创建数据段 回答“是”或“否”,然后简单解释为什么会很棒。这不是必需的。数据段只是分配给数据的内存块,因此可以写入和读取。代码段是只读的。如果试图写入代码段,硬件将生成中断。但是,汇编代码可以输入内存中的任何地址,如果禁用保护模式,则硬件不会生成中断 例如,启动扇区在启动时加载到一个非常有限的空间中,在代码字节之间放置变量是非常常见的(

我正在学习一门汇编语言课程,重点是x86奔腾处理器,我在Linux系统上工作。我知道程序被加载到内存中,您可以直接在寄存器中执行操作,但我不确定您是否可以完全避免创建数据段


回答“是”或“否”,然后简单解释为什么会很棒。

这不是必需的。数据段只是分配给数据的内存块,因此可以写入和读取。代码段是只读的。如果试图写入代码段,硬件将生成中断。但是,汇编代码可以输入内存中的任何地址,如果禁用保护模式,则硬件不会生成中断

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

然而,虽然您肯定可以避免创建数据段,但99.99%的时间您确实会分离出数据段


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

因此,基本上您是说,在实模式下,我可以为数据段以外的段分配和初始化变量?关于你的第一段,是的。机器代码可以让你。汇编程序可能不依赖于其设置和版本。此外,这有时是特定于体系结构的。嵌入式微处理器可以有不同的方式来处理内存页;什么芯片?到目前为止,所有的评论都是正确的(尽管它们相互矛盾),直到我们建立了一个关于特定芯片的概念参考框架。本课程针对奔腾。我要修改我的问题。我刚才说的是关于x86的。这是正确的,其他体系结构可以有自己的内存访问框架,并且会有所不同。您能否就“…
汇编语言课程”
…”进行一点阐述(两句话就足够了),例如;你在关注一个微处理器吗?它是基于x86 PC的吗?根据所讨论的微处理器,“数据段”一词的含义明显不同。是否有更好的措辞,或者我最近的编辑是否足够?好的举措;现在有道理了。您在本课程中使用的操作系统是什么?Linux。再次修改了这个问题。