Каждая программа должна содержать директиву END, отмечающую конец исходного кода программы. Все строки, которые следуют за директивой END, Турбо Ассемблером игнорируются. Если вы опустите директиву END, то генерируется ошибка. Вы можете посчитать, что концом программы является конец файла, но это не так: всегда требуется указывать директиву END.
END является типичной директивой в том смысле, что она не порождает никакого кода. Например:
DOSSEG
MODEL SMALL
STACK 200h
.DATA ProgramStart:
mov ah,4ch
int 21h
END ProgramStart
Это, возможно, простейшая программа на Ассемблере. Она ничего не делает, просто немедленно возвращает управление DOS. Обратите внимание на использование директивы END для завершения кода, из которого состоит данная программа.
Без сомнения вы заметили, что на одной строке с директивой END содержится метка ProgramStart. Кроме завершения программы, директива END может выполнять еще и вторую функцию, указывая, где должно начинаться выполнение при запуске программы. По той или иной причине вы можете не захотеть начать выполнение программы в файле .EXE с первой инструкции. Директива END предусматривает такие случаи. Предположим, например, вы запускаете программу, полученную в результате ассемблирования и компоновки следующего кода:
DOSSEG
MODEL SMALL
STACK 200h
.DATA Delay:
mov cx,0 DelayLoop:
loop DelayLoop
ret
ProgramStart:
call Delay ; пауза на время,
; необходимое для
; выполнения 64 циклов
mov ah,4ch
int 21h
END ProgramStart
Выполнение здесь начинается не на первой инструкции исходного кода (MOV CX,0) по метке Delay. Вместо этого выполнение начинается с инструкции CALL Delay по метке ProgramStart, как определено в директиве END.
Если программа состоит только из одного модуля (то есть одного исходного файла), то в директиве END всегда нужно определять адрес запуска программы. В программе, состоящей из нескольких модулей, определять адрес запуска программы следует только в директиве END модуля, содержащего инструкцию, с которой должно начаться выполнение программы. В директивах END других модулей должно указываться только ключевое слово END и нечего более. В самом деле: каждая программа должна иметь точку начала выполнения, но было бы бессмысленно иметь несколько таких точек. Убедитесь в том, что вашей программе имеется один (и только один) адрес начала выполнения. (Кстати, если в вашей программе имеется два таких адреса, компоновщик TLINK использует только первый адрес, который он обнаруживает, и игнорирует другой.)
