汇编语言:不同的段......它们存储在RAM中吗?

时间:2017-04-06 06:41:38

标签: assembly memory x86-16

我是汇编语言的新手。每当我初始化一个内存段时,例如:代码段或数据段,就会说操作系统会为此分配一部分内存。但是,我真的很困惑我的书所指的“记忆的一部分”。 RAM中的代码段是否具体?

2 个答案:

答案 0 :(得分:2)

您在评论中有很多参考资料,但我想补充一点,在回答您的核心问题时需要考虑不同的状态:

  1. 编译和链接代码时,它会将结果写入并将其作为可执行文件或库存储到磁盘。
  2. 在磁盘映像中,编译器/链接器对有关各个段的信息进行编码。
  3. 加载可执行文件/库时,操作系统会将您声明的段设置为RAM,并使用适当的权限标记段所占用的内存页(noted by fuz)。
  4. 是否读取段的整个内容并将其加载到RAM中取决于您运行的平台提供的众多因素和优化。你可以在其他地方研究......

答案 1 :(得分:1)

是的!通常,所有段都加载到RAM中。出于效率和安全原因,我们区分各个部分。例如,我们区分文本和数据,因为文本是可执行的但不可写,而数据是可写的但不可执行。

在嵌入式平台上,某些部分可能存在于EEPROM或闪存ROM而不是RAM中,因此它们不会浪费宝贵的RAM。对于程序员来说,唯一的区别是除非你做一些特别的准备,否则你不能写这些部分。