Программирование на языке АССЕМБЛЕРА. Мещерякова Э.В. - 5 стр.

UptoLike

Составители: 

5
ASSUME назначения сегментных регистров сегментам данных, стека, кода
можно разместить перед сегментом кода или в первой его строке.
Начало и конец программного модуля обозначается с помощью связан-
ных директив NAME и END. После директивы NAME следует имя модуля, а
после директивы END помещается метка входа в программу (стартовая команда
или имя процедуры).
Корректное
завершение выполнения программы можно организовать с
помощью системного прерывания INT 21H, передающего управление програм-
медиспетчеру DOS:
...............
MOV AX,4C00H ; задание функции выхода из программы.
INT 21H
После этого следует закрыть сегмент кода директивой:
имя сегмента кода ENDS ,
а затем завершить программный модуль:
END метка стартовой команды .
Во многих случаях удобно оформить программу в сегменте кода в виде
основной процедуры типа FAR , содержащей главные операции в соответствии с
алгоритмом, и набора процедур-подпрограмм. Основная процедура в последних
строках содержит:
RET
имя процедуры ENDP
Команда RET обеспечит корректный выход из программы после ее выполнения
с помощью системного прерывания INT 20H. Для исполняемого файла *.ЕХЕ
младший байт адреса этого прерывания находится в ячейке памяти с нулевым
смещением в области префикса программного сегмента (PSP). Для того, чтобы
по команде RET процессор обратился по этому адресу, адрес должен находиться
в стеке. Адрес формируется в виде SEG:OFFSET(сегмент:смещение). Значение
SEG PSP при запуске программы содержится в сегментном регистре DS, а
OFFSET=0 следует сформировать.
Таким образом, для корректного завершения программы в начале сег-
мента кода
нужно поместить следующие операторы:
PUSH DS ; сохранение в стеке SEG PSP.
XOR AX,AX ;формирование нулевого значения в AX.
PUSH AX ;сохранение в стеке нулевого значения OFFSET
По команде RET процедуры типа FAR из стека будет извлечено два сло-
ва, при этом значение SEG загружается в CS , а значение OFFSET=0 заносит-
ся в IP, чем обеспечивается обращение процессора к адресу системного преры-
вания, передающего
управление для завершения программы.
При запуске программы на исполнение логический адрес стартовой ко-
манды CS:IP , а также логический адрес стека SS:SP загружаются операционной
                                                                          5
ASSUME назначения сегментных регистров сегментам данных, стека, кода
можно разместить перед сегментом кода или в первой его строке.
         Начало и конец программного модуля обозначается с помощью связан-
ных директив NAME и END. После директивы NAME следует имя модуля, а
после директивы END помещается метка входа в программу (стартовая команда
или имя процедуры).
         Корректное завершение выполнения программы можно организовать с
помощью системного прерывания INT 21H, передающего управление програм-
ме– диспетчеру DOS:
         ...............
         MOV AX,4C00H ; задание функции выхода из программы.
         INT           21H
После этого следует закрыть сегмент кода директивой:
         имя сегмента кода ENDS ,
а затем завершить программный модуль:
         END метка стартовой команды .
         Во многих случаях удобно оформить программу в сегменте кода в виде
основной процедуры типа FAR , содержащей главные операции в соответствии с
алгоритмом, и набора процедур-подпрограмм. Основная процедура в последних
строках содержит:
         RET
         имя процедуры ENDP
Команда RET обеспечит корректный выход из программы после ее выполнения
с помощью системного прерывания INT 20H. Для исполняемого файла *.ЕХЕ
младший байт адреса этого прерывания находится в ячейке памяти с нулевым
смещением в области префикса программного сегмента (PSP). Для того, чтобы
по команде RET процессор обратился по этому адресу, адрес должен находиться
в стеке. Адрес формируется в виде SEG:OFFSET(сегмент:смещение). Значение
SEG PSP при запуске программы содержится в сегментном регистре DS, а
OFFSET=0 следует сформировать.
         Таким образом, для корректного завершения программы в начале сег-
мента кода нужно поместить следующие операторы:

       PUSH    DS              ; сохранение в стеке SEG PSP.
       XOR     AX,AX           ;формирование нулевого значения в AX.
       PUSH    AX              ;сохранение в стеке нулевого значения OFFSET

         По команде RET процедуры типа FAR из стека будет извлечено два сло-
ва, при этом значение SEG загружается в CS , а значение OFFSET=0 заносит-
ся в IP, чем обеспечивается обращение процессора к адресу системного преры-
вания, передающего управление для завершения программы.
         При запуске программы на исполнение логический адрес стартовой ко-
манды CS:IP , а также логический адрес стека SS:SP загружаются операционной