Подпрограмма умножения целых положительных чисел
Распределение общих регистров: R2: счетчик, R3: множимое Y, R4: множитель X, R5: ст. часть произведения Рн, R6:мл. часть произведения PL
Сам загрузчик может либо размещаться в постоянной памяти, либо вводиться в оперативную память покомандно вручную с пульта управления. Поскольку загрузчик используется для ввода в память самых разных программ и, возможно, данных, ему должна быть сообщена определенная информация. В типичных случаях требуются следующие сведения:
1. Начальный и конечный адрес загружаемой области памяти. 2. Начальный адрес загружаемой области памяти и число вводимых слов. 3. Начальный адрес загружаемой области памяти и вид ограничителя (признака конца) вводимой информации. Кроме ввода программы, на загрузчик могут быть, вообще говоря, возложены дополнительные функции. Например, перемещение программы в памяти. Выполнение такой функции требует от загрузчика изменения ссылок на ячейки памяти в командах таким образом, чтобы они соответствовали новому положению программы. Другая распространенная функция загрузчиков — это обнаружение ошибок, например ошибок, возникающих при передаче информации между устройствами ввода и памятью. Рассмотрим простейший загрузчик для нашего иллюстративного микропроцессора. Это позволит нам не только полнее проиллюстрировать идеи загрузки, но и рассмотреть выполнение в микропроцессоре операции ввода. Будем предполагать, что загружаемая информация (программа или данные) поступает с некоторого устройства ввода. Устройство ввода получает эту информацию слово за словом с некоторого носителя и делает ее доступной для микропроцессора через некоторый порт ввода. Будем предполагать, что слова имеют ту же длину 8 бит, что и слова в микропроцессоре. Будем считать, что первые два слова на носителе содержат 16-битовый адрес (старшие разряды в первом байте), указывающий загрузчику начальную ячейку области памяти, куда должна быть загружена информация. Следующие два слова определяют конечный адрес области памяти. Далее следует информация, которая должна быть загружена в эту область. Итак, загрузчик получает информацию пословно от устройства ввода. Первые четыре слова — это, как было сказано выше, адресная информация, а остальные — загружаемая. Устройство ввода в силу своей механической природы, как правило, работает существенно медленнее микропроцессора, обрабатывающего вводимые слова. Поэтому нужно запрограммировать микропроцессор так, чтобы он ожидал, когда очередное вводимое слово станет доступным. Поэтому для передачи информации о состоянии устройства ввода мы используем второй порт. В этот порт устройство ввода устанавливает 1 в некоторый (скажем, крайний левый) бит каждый раз, когда готово очередное вводимое слово. Микропроцессор прежде, чем вводить данные, должен проверять этот бит и при необходимости ждать, пока он не станет равным единице. В тот момент, когда микропроцессор действительно вводит слово, этот бит состояния автоматически внешними схемами сбрасывается в 0, так чтобы одно и то же слово не было введено дважды.
Работа программы - загрузчика изображена в виде блок-схемы на рис. 5.5. В нескольких точках главная процедура обращается к подпрограмме ввода. Эта подпрограмма сначала вводит данные о состоянии устройства ввода, по которым определяется готовность очередного вводимого слова. При готовности вводится очередное слово (в следующем блоке схемы), при неготовности повторяется опрос состояния устройства ввода. Таким образом, микропроцессор зацикливается в ожидании готовности слова. Главная процедура четырежды обращается к подпрограмме ввода для ввода первых четырех адресных слов, передавая эти слова каждый-раз в новые общие регистры. Затем начинается цикл передачи вводимых слов в память. Каждое слово вводится подпрограммой ввода и затем передается в соответствующую ячейку памяти, адрес которой задается текущим значением адреса (ТА). ТА увеличивается на 1 при каждом прохождении цикла, т. е. при поступлении каждого слова. В конце цикла происходит проверка, не превышает ли ТА значение конечного адреса (КА). Если это так, процедура загрузки заканчивается; в противном случае — цикл повторяется. Программа-загрузчик приведена в табл. 8. Как легко видеть, она начинается в ячейке 0000. Однако в реальных условиях она могла бы располагаться и в других ячейках, скажем со старшими адресами, чтобы не мешать размещению других программ. Программа обращается к двум портам ввода: к порту 00 — за информацией о состоянии и к порту 01 — за данными,
Первая группа команд соответствует главной процедуре. Подпрограмма ввода начинается с ячейки 001D. Общие регистры 1, 2, 3 и 4 хранят соответственно ТАН TAL, KAH и KAL. Они загружаются адресной информацией, поступающей с устройства ввода. Для этого каждый раз выполняется команда перехода на подпрограмму и команда пересылки. Цикл, показанный на блок-схеме, начинается в ячейке 0010 командой перехода на подпрограмму ввода. После возврата из нее очередное введенное слово находится в аккумуляторе. Это слово передается в ячейку памяти с помощью имеющегося в иллюстративном микропроцессоре механизма косвенной адресации. А именно, команда MOV 0 to F передает содержимое аккумулятора в ячейку памяти, адрес которой задан содержимым регистров 1 и 2 (т. е. Н и L). Поскольку эти регистры содержат значение ТА, слово попадает в нужное место памяти. Следующая команда, IHL, увеличивает на 1 значение ТА. Сравнение адресов ТА и КА осуществляется при помощи процедуры вычитания с двойной точностью и последующего условного перехода. Для вычитания с двойной точностью сначала вычитаются младшие части ТА и КА, а затем старшие части с участием заема, оставшегося от младших частей. Окончательный заем остается в триггере С. Следующая команда — «переход при нулевом переносе» на начало цикла. При С=0 снова входим в цикл, при С= 1 программа останавливается.
Рис. 5.5. Блок-схема программы-загрузчика
Подпрограмма ввода начинается с ввода слова из порта состояния 00 в аккумулятор. Левый (т. е. знаковый) бит тестируется командой «переход при положительном аккумуляторе». Если содержимое аккумулятора положительно (старший бит равен 0), устройство ввода не готово. В этом случае управление передается на начало подпрограммы и процесс повторяется. Если старший бит в аккумуляторе равен 1, следующая команда вводит слово из порта 01 в аккумулятор, а команда возврата завершает подпрограмму. Следует обратить внимание на то, что бит готовности в слове состояния был выбран специально совпадающим со знаковым разрядом аккумулятора. Это позволило выполнить тестирование бита одной командой. В общем случае тестируемый бит может оказаться в любом другом разряде. Тогда тестирование проводится путем выделения этого разряда. Для этого достаточно логически умножить слово состояния на слово, называемое маской и содержащее 1 в интересующем нас разряде и нули — в остальных.
После этого результат тестируется либо командой перехода при нулевом аккумуляторе, либо командой перехода при ненулевом аккумуляторе. Таким образом, команду JAP, проверяющую левый бит слова состояния, в нашей программе можно будет заменить следующими командами LRI 5 80 (маска) AND 5 JAZ 1D
Таблица 5.8 Программа-загрузчик Распределение общих регистров:R1:TAH, R3:KAH, R2: TAL, R4:KAL
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|