Директива END


Каждая программа должна содержать директиву 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 использует только первый адрес, который он обнаруживает, и игнорирует другой.)

Загрузка...