为什么我们需要在程序集中定义.data和.text部分?

Moo*_*oon 15 assembly

我正在读一本装配书.该书解释了计算机内存中有.text和.data部分.本书中的示例还使用以下源代码.

[SECTION .data]

[SECTION .text]
Run Code Online (Sandbox Code Playgroud)

由于上面的代码片段是用汇编语言编写的,我有一个问题.

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

Zul*_*jin 17

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

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