目录 上一页 下一页 下一章

第4章 奇妙的声音 -49-


CODE ENDS
  ENDS伪操作和SEGMENT是相配合的,表示一个段结束。需要注意的是段的名字表示了这个段的起始段地址,它和段的性质并无关系,所以并不是名为"CODE"的段就一定是代码段。

  对于PROG7来说,由于程序只需要一个代码段就可以了,所以只定义了一个"CODE"段,后面我们会谈到定义多个段的方法。

ASSUME
  伪指令"ASSUME"稍微复杂一些,我们写好的程序保存在磁盘中,需要运行时由操作系统把程序从磁盘中读取到内存里,这个程序在内存中的什么位置是由操作系统自己决定,而操作系统需要我们给它提供一些存储段与段寄存器的关联关系,这就是“ASSUME”这个伪指令的作用。

  其实对于简单的程序来说并不需要明确指出这种关联,所以“ASSUME”伪指令不是必需的。在这段程序中去掉这一行并没有什么问题。

ORG
  伪指令"ORG"的主要作用就是控制偏移量。它不仅可以用于代码段中,也可用于其它段。而且这个伪指令不仅单用于程序省首部,在程序之中也可以插入使用。

  PROG7只有一个代码段,因此它可以编译成.COM类的可执行文件。注意.COM类的程序都要从偏移0100H处开始执行,所以在源程序中也要明确指出程序第一条指令的偏移为0100H,这就是指令"ORG"的作用。
  程序中的第三行和倒数第三行是"过程定义"伪操作。讲到这儿我们需要先明确几个概念:大家知道,一个程序往往由一个主程序和若干子程序组成,在汇编语言中,我们称其为"主过程"和"子过程"。而把由"主过程"和"子过程"共同组成的完整的程序称为"进程"。因此在编写一个"进程"时就需要用"过程定义"伪操作将不同的"过程"区分开,这就要用到"PROC"伪指令。

PROC - ENDP
  "PROC"伪指令的应用格式很简单,"过程名 PROC 属性"。其中过程名表示了这一过程的起始地址,它和这一过程是"主"还是"子"没有任何联系。名字不决定属性,这个特点同"SEGMENT"一样;属性指的是这一过程是"近程"(NEAR)还是"远程"(FAR),它将决定调用此过程的CALL指令和过程最后的RET指令的编译结果。
  结束一个过程在形式上和结束一个段相似,只是END后面加了表示过程(PROCEDURE)的字母"P"而不是表示段(SEGMENT)的"S":"过程名 ENDP"。

  在"PROC"与"ENDP"之间的就是真正的代码,最后一行的"END"伪指令用于表示"进程结束",即整个源程序编制完毕。

END
  伪指令"END"的用法很简单:"END 过程名"。跟在它后面的"过程名"指出了整个程序的入口,也就是程序中"主过程",这个过程是DOS调入程序后首先要执行的。当然,这个过程名在某些情况下可以省略,比如在编写"COM"类程序的时候。


Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章