АССЕМБЛЕР. Компоновщик. Загрузчик. Макрогенератор

Запуск программы на счет.


Теперь осталось только запустить программу на счет. Для этого надо сделать две вещи.

Во-первых, надо загрузить регистры SS и SP так, чтобы они указывали на сегмент стека программы. Делается это просто. Из заголовка ЗМ извлекается относительный адрес этого сегмента, к которому загрузчик прибавляет начальный адрес программы и полученный таким образом настоящий адрес записывает (без последнего 0) в регистр SS. Извлеченная же из заголовка ЗМ длина стека заносится в регистр SP.

Во-вторых, надо записать в регистры CS и IP адрес точки входа в программу. И это делается просто, т.к. этот адрес указан в заголовке ЗМ. Правда, там указан относительный адрес точки входа, но он легко преобразуется в абсолютный адрес добавлением к нему начального адреса программы. Запись же этих величин в данные регистры есть ничто иное, как переход на начальную команду программы.

Итак, загрузчик все, что надо, сделал и передал управление на нашу программу. Теперь она начинает выполняться.

Замечание: в последние годы на лекциях не рассматривается работа макрогенератора, поэтому здесь эта тема опущена.



Содержание раздела