为什么'.CODE'只能在'main PROC'之前插入?

时间:2015-04-04 20:22:24

标签: function assembly

我正在学习汇编语言并且对程序的语法有疑问。 (我正在使用VS 2012)。

对于主程序,如果线路主要PROC'在' .data'之前插入,会发生错误。

 .data

 .code    
 main Proc

 ;some code

 main ENDP

 local1 Proc
 .data
 .code
 ret
 .local1 ENDP
 END main

但对于主要的其他本地程序,它适用于' .data'宣布程序后。

有人可以向我解释原因吗?

P.S。也是装配lanaugage不受欢迎?我已经学会了很少的java和c ++并与它们进行比较,谷歌上的讨论和搜索次数要少得多。

1 个答案:

答案 0 :(得分:1)

将汇编程序想象成一个读取输入源并将(发出)写入两个输出通道的机器:一个用于可执行代码,另一个用于数据。 段开关指令 .data .code 告诉汇编器应该在哪里写入发出的信息。 使用指令 .data 实际命令你的汇编程序:停止向当前的当前输出段发出,切换到段.data并继续在下一个空闲空间(原点)写入该段,你最后一次活动时离开它的地方。

源文本中的.code和.data段之间的交替有利于程序的可读性,它允许使代码过程接近其操作的全局数据。另一方面,当编译的程序被加载到存储器中时,所有过程必须在一个代码段中链接在一起,并且所有数据在数据段中保持在一起。操作系统通常不允许执行标记为" data"的段的任何指令,并将任何数据写入标记为" code"的段。这就是程序员在发出任何可执行语句之前切换到 .code 的责任。