2011-08-31 41 views
13

我正在阅读装配图书。该书解释说,在计算机内存中有.text和.data部分。本书中的示例还使用以下源代码。为什么我们需要在程序集中定义.data和.text部分?

[SECTION .data] 

[SECTION .text] 

因为上面的代码片段是用汇编写的,所以我有一个问题。

是否在物理内存中分隔.data和.text代码(如果是这样,为什么?以及CPU是否关心?)?或者只是我们(人类)用汇编语言将它们分开?

回答

15

应用程序的文本部分是只读的,而数据不是。无论应用程序启动了多少次,许多操作系统都只将文本部分加载到内存中。这减少了内存使用和启动时间,并且安全,因为代码不会改变。 数据部分包含可在应用程序执行期间更改的信息,并且必须为每个实例复制此部分。

+0

// so ...这个操作系统是否被指定?假设我正在编写自己的操作系统(不打算这么做:)),我是否需要遵循这个约定? – Moon

+0

让他们分开是明智的做法,因为那样你就可以对与该部分相关的每个部分做些事情。例如,您可能需要为程序的这些不同部分设计不同的内存交换输入/输出规则,内存保护代码和连续存储强制。 – Pete855217

+1

是的我认为这是操作系统特定的,你不需要在你自己的操作系统中遵循这个约定。即使是现在,操作系统也允许将文本部分从只读改为读写,并在调试应用程序或某些调试API中写入,例如http://msdn.microsoft.com/en-us/library/ms681674(v=vs。 85)的.aspx。 但对于正常使用不在您的操作系统中,我将遵循此规则。 – Zuljin

相关问题