Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен эвм2.docx
Скачиваний:
1
Добавлен:
23.09.2019
Размер:
66.15 Кб
Скачать
  1. Инициализация программы

Существует два основных типа загрузочных программ: EXE и COM. Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы:

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

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

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

4) загрузить в регистр DS адрес сегмента данных. 5)Выход из программы и возврат в DOS сводится к использова нию команды RET.

1. ASSUME - это ассемблерная директива, которая устанавливает для ассемблера соответствие между конкретными сегментами и сегментными регистрами; Ассоциируя сегменты с сегментными регистрами, ассемблер сможет определить смещения к отдельным областям в каждом сегменте.

2. Загрузочному модулю в памяти непосредственно предшествует 256-байтовая (шест.100) область, называемая префиксом программного сегмента PSP. Программа загрузчика использует регистр DS для установки адреса начальной точки PSP. Пользовательская программа должна сохранить этот адрес, поместив его в стек. Позже, команда RET использует этот адрес для возврата в DOS. 3. В системе требуется, чтобы следующее значение в стеке являлось нулевым адресом . Для этого команда SUB очищает регистр AX, вычитая его из этого же регистра AX, а команда PUSH заносит это значение в стек. 4. Загрузчик DOS устанавливает правильные адреса стека в регистре SS и сегмента кодов в регистре CS. Поскольку программа загрузчика использует регистр DS для других целей, необходимо инициализировать регистр DS двумя командами MOV. 5. Команда RET обеспечивает выход из пользовательской программы и возврат в DOS, используя для этого адрес, записанный в стек в начале программы командой PUSH DS.

  1. Ассемблирование и выполнение программ

Прежде чем исходную программу, написанную на языке ассемблера, можно будет выполнить, ее необходимо ассемблировать в объектную про­грамму на машинном языке. Задача осуществляется программой-ассембле­ром, заменяющей все символические обозначения операций и адресных режимов двоичными кодами, а все имена и мет­ки — их настоящими значениями.

Ассемблер присваивает командам и блокам данных адреса, начиная с адреса, заданного в директиве ORIGIN. Эта директива отвечает за размещение по нуж­ным адресам констант, которые могут быть заданы в директивах DATAWORD, и резервирует память в соответствии с указаниями, содержащимися в директивах RESERVE.

Важнейшим моментом процесса ассемблирования является определение зна­чений, заменяющих имена. В тех случаях, когда значение имени определяется ди­рективой EQU, это очень простая задача. Но если имя задается в поле «Метка» команды, представляемое им значение определяется положением этой команды в ассемблированной объектной программе. Поэтому в ходе формирования ма­шинного кода ассемблер должен отслеживать адреса, по которым будут загру­жаться последовательные команды программы. В некоторых случаях ассемблер не заменяет представляющее адрес имя реаль­ным значением этого адреса. Сканируя исходную программу, ассемблер записывает все имена и соответст­вующие им числовые значения в специальную таблицу, называемую таблицей символов. Когда имя встречается в программе повторно, оно заменяется соответ­ствующим значением из таблицы. На первом проходе ассемб­лер создает полную таблицу символов. В конце этого прохода всем встречающимся в программе именам должны быть поставлены в соответствие числовые значения.

После этого ассемблер снова проходит по исходной программе и заменяет все имена значениями из таблицы символов. Такой ассемблер называется двухпро-ходным.

Ассемблер сохраняет объектную программу на магнитном диске. Перед вы­полнением эта программа загружается в память компьютера. Для этого там должна присутствовать еще одна служебная программа, называемая загрузчиком. Загруз­чик выполняет последовательность операций ввода, необходимых для пересылки программы на машинном языке с диска в заданное место памяти. При этом за­грузчик должен знать длину программы и адрес, по которому ее необходимо за­грузить. Обычно ассемблер помещает такого рода информацию в заголовок про­граммы, предшествующий объектному коду. Загрузив код, загрузчик начинает выполнение объектной программы с перехода к той ее команде, которая должна быть реализована первой. Адрес этой команды включается в программу на языке ассемблера в качестве операнда директивы ассемблера END. Ассемблер помеща­ет этот адрес в заголовок, предшествующий объектному коду на диске.

Программа начинает выполняться и выполняется до своего завершения, если только в ней нет логических ошибок. Пользователь должен уметь находить такие ошибки. Что касается синтаксических ошибок, то ассемблер выявляет их сам и сообщает об этом пользователю. В состав системного программного обеспечения обыч­но включают программу, называемую отладчиком. Эта программа предоставляет пользователю возможность остановить выполнение объектной программы в ука­занной им точке и проанализировать содержимое памяти и регистров процессора.

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