Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

2.3. Инициализация программы

Существует два основных типа загрузочных программ: ЕХЕ и СОМ. Рассмотрим загрузочные программы типа ЕХЕ.

Система DOS имеет четыре требования для инициализации ассемблерной ЕХЕ-программы. Для этого необходимо:

1) указать ассемблеру, какие сегментные регистры должны соответствовать сегментам,

2) сохранить в стеке адрес, находящийся в регистре DS, когда программа начнет выполнение,

3) записать в стек нулевой адрес,

4) загрузить в регистр DS адрес сегмента данных.

Пример.

STACKSEG SEGMENT PARA STACK 'STACK'

DB 64 DUP(?)

STACKSEG ENDS

DSEG SEGMENT PARA PUBLIC 'DATA'

SOURCE DB 10

DEST DB ?

DSEG ENDS

CSEG SEGMENT PARA PUBLIC 'CODE'

BEGIN PROC FAR

ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG

PUSH DS ; записать DS в стек

SUB AX, AX ; установить ноль в AX

PUSH AX ; записать ноль в стек

MOV AX, DSEG ; занести адрес

MOV DS, AX ; DSEG в DS

MOV AL, SOURCE ; скопировать значение

MOV DEST, AL ; SOURCE в DEST

RET ; возврат в DOS

BEGIN ENDP

CSEG ENDS

END BEGIN

1. Псевдооператор ASSUME устанавливает соответствие между конкретными сегментами и сегментными регистрами; в данном случае CSEG соответствует CS, DSEG – DS и т.д.

2. Загрузочному модулю в памяти непосредственно предшествует 256-байтовая (100Н) область, которая называется префиксом программного сегмента PSP. Когда программа загружается на выполнение регистр DS указывает на начальную точку PSP. Пользовательская программа должна сохранить этот адрес, поместив его в стек. Позже команда RET возьмет этот адрес из стека для возврата в DOS.

3. В системе требуется, чтобы следующее значение в стеке являлось нулевым адресом (точнее, смещением). Для этого команда SUB очищает регистр АХ, вычитая его из этого же регистра АХ, а команда PUSH заносит это значение в стек.

4. Загрузчик DOS устанавливает правильные адреса стека в регистре SS и сегмента кодов в регистре CS. Поскольку программа загрузчика использует регистр DS для других целей, необходимо инициализировать регистр DS двумя командами MOV.

5. Команда RET обеспечивает выход из пользовательской программы и возврат в DOS.

3. Команды пересылки данных

3.1. Команда mov

Команда MOV (move – переслать) пересылает байт или слово между регистром и ячейкой памяти или между двумя регистрами. Она может также пересылать непосредственно адресуемое значение (константу) в регистр или в ячейку памяти.

Напомним, что команда MOV имеет следующий формат:

MOV приемник, источник

В ней допустимо большинство из возможных сочетаний операндов.

В команде MOV исключаются следующие сочетания операндов:

1. Нельзя осуществить непосредственную пересылку данных из одной ячейки памяти в другую. Чтобы выполнить такую пересылку, данные источника надо загрузить в регистр общего назначения, а затем запомнить содержимое этого регистра в приемнике.

2. Нельзя загрузить непосредственно адресуемый операнд в регистр сегмента. Как и в случае 1, сначала надо загрузить его в регистр общего назначе­ния.

Например, загрузка номера блока сегмента данных (DSEG) в регистр DS осуществляется следующим образом:

MOV АX, DSEG

MOV DS, AX

3. Нельзя непосредственно переслать значение одного регистра сегмента в другой. Подобные пересылки также делаются через регистр общего назначения.

Напри­мер, чтобы регистр DS указывал на тот же сегмент, что и регистр ES, можно воспользоваться командами

MOV AX, ES

MOV DS, AX

4. Нельзя использовать регистр CS в качестве приемника в команде пересылки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]