Дж.Хиллбурн, П.Джулич Микро-ЭВМ и микропроцессоры (1979) (1092080), страница 25
Текст из файла (страница 25)
Команда 1ИХ Н необходима для увеличения на единицу содержимого РАП. Проверяемое слово затем сравнивается с маскированным вводимым словом н устанавливаются соответствующие флажки состояний. В случае совпадения устанавливается флажок нуля, и в результате выполнения следующей команды происходит переход к подпрограмме МАТ%1л. При несовпадении слов содержимое регистра С уменьшается на единицу и производится проверка на окончание списка проверяемых слов.
Если этот список исчерпан, сравнений больше не производится и выполняется подпрограмма ХОМАТ. В противном случае управление передается команде маскирования и обрабатывается следующее проверяемое слово. Циклы применяются также при генерировании временных задержек 181. При выполнении вычислительной машиной некоторого цикла мы можем контролировать величину отрезка времени, в течение которого машина выполняет операции данного цикла, путем задания количества циклов. ПРНМЕР Б.4 Рассмотрим, каким образом реализуется временная задержка в микро-ЭВМ МСБ-40 (микропроцессор 4040).
(Набор команд ма шины МСБ-40 приведен в приложении А.) Заметим, что раздели тель; в данной машине определяет начало поля комментария. Р1М О, ОВН; Загружается 8-разрядное шестнадцатеричное число в Регистровую пару О, состоящую из регистров 0 и 1. По да~иной команде осуществляется загрузка )св — 0 и Л1 -11. 1.ООР: 1ЯЕ О, 1.ООР; Увеличивается на единицу содержимое регистра О. Если результат равен нулю, выполняется следующая команда; в противном случае происходит переход по метке ЕООР (и повторяется та же команда).
1БЕ 1, ЕООР; Увеличивается на единицу содержимое,регистра 1 и происходит переход по метке ЕООР, если содержимое регистра 1 не равно нулю. В противном случае цикл завершается. Программное обеспечение 159 Временная задержка может быть определена по количеству выполненных циклов, Время выполнения команды длиной в одно слово в микропроцессоре 4040 составляет 10,8 мкс, а команды длиной в два слова — 21,6 мкс. Оператор с меткой 1.00Р выполнится шестнадцать раз, пока содержимое регистра 0 не станет равным нулю, и после этого произойдет переход к следующей команде. Так как.команда 182 занимает два слова, то для ее 16-кратного выполнения потребуется примерно 0,35 мс.
Первоначально в регистр 1 было записано число 11. Поэтому для завершения под программы необходимо 5-кратное увеличение содержимого этого регистра на единицу. Следовательно, выполнение рассматриваемой подпрограммы занимает примерно 1,7 мс. Временная задержка может изменяться в пределах 0,35 — 5,5 мс с приращением 0,35 мс за счет выбора числа, первоначально загружаемого в регистр 1. Величину этой задержки можно изменять и далее путем внесения в цикл дополнительных команд длиной в одно-два слова.
ОПЕРАТОРЫ УСЛОВНОГО ПЕРЕХОДА Важным свойством цифровой вычислительной, машины является ее способность изменять последовательность выполнения команд в зависимости от получаемой информации. Эта способность реали- Лооорограггога' Аг йоогамграоома Аг Рооорограоггоо А оодгрограмога Ао Рис. 5.8. Типичная ветвящаяся программа. 160 Глава П зуется при помощи операторов условного перехода, таких, как ЛЗМР илн ЬК1Р. Для каждого нз возможных условий можно осуществить,непосредственную проверку имеющихся данных и определить соответствующую последовательность выполнения команд. На Рис.
5.8 приведена блок-схема типичной программы, которая производит проверку возможных условий Аь Ам А» и Аь Более эффвктивным методом, реализации условных переходов при наличии нескольких условий является использование таблицы ветвлений. При данном подходе адреса различных подпрограмм хранятся в памяти в виде таблицы и об~ращение к подпрограммам производится путем косвенной адресации. ПРИМЕР З.З ~Предположим, мы хотим выполнить одну нз восьми подпрограмм К1 — Я8, а переход на каждую подпрограмму осуществляется в соответствии с содержимым соответствующего разряда аккумулятора [61. Перейти к К1, если в аккумуляторе записано число 00000001 » К2» » » » 00000010 » КЗ» » »» 00000100 » К4» » » » 00001000 » Кб» » »» 00010000 » Кб» » » » 00100000 ц7» » » » 01000000 » К8» » » » 10000000 Таблицу ветвлений можно разместить в памяти в таком виде, как показано на рис.
5.9. В данном случае адрес жаждой подпрограммы занимает в памяти два байта или слова: (л(;)» и (Р,)». П|рограмма реализации процедуры перехода на одну из восьми подпрограмм примера 5.5 приведена на рис. 5.10 (для 1п1е1 8080). Разработка такой прогр(аммы для любого другого микропроцессора, .на~бор команд которого приведен в п~риложениях, является интересным и полезным упражнением для читателя. ПОДПРОГРАММЫ Во многих программах имеклся процедуры, которые встречаются несколько раз, но не реализованы в виде отдельной команды.
При наличии соответствующих средств в ассемблере может оказаться удобным оформить такую процедуру в виде макрокоманды Программное обгслачвшз 161 Рис. 5.9. Размещение в памяти таблицы ветвлений. ВТАЩЕТ: 1.Х1 Н, ВцТАВ ; Загрузить е регистры 0 н Е адрес из табляцы ветвлеикй. 1!ЧХ Н МОЧ О, М ХСНС РСН1. !и, Ц -!0, Е1. Загруыгть счетчик команд содер- жимым регистров И н Ь. Определить слово длиной 2 байта. ВцТАВ 0% ц! О!и Й2 '0чг цЗ О!Ч К4 О!Ч Кз О!Ч йб 0% К7 О!Ч йз Рис.
5.!О. Программа для 1п!е! 8080, использующая таблицу ветвлений. Однако подобный подход имеет недостаток, выражающийся в том„ что при трансляции программы каждое маасрообращение заменяет.- ся последовательностью команд,,из которых скомпонована макрокоманда. Таким образом, если макрокоманда состоит из 10 команд и соответствующее маюрооб~ращение встречается в программе 10 раз, то для реализации заданной ма!крококеандой процедуры необходимо использовать 100 ячеек па!мяти. СТВ!Т: КАК гС СЕТА0 1НХ Н 1НХ Н ЯМР СТВ1Т СЕТА0 МОЧ Е, М ; Загрузка И и 1.
адресом таблицы ветвлений. ; Сдвиг 1.ВВ е разрвд переноса. ; Проверить разряд переноса. ; (Н, 7.)~(НЛ.1+1. 162 Глава б ЛаЬраграмма иит Згнабнао оааграегга Рис. 5.11. Обращение к подпрограмме иа основной программы. Использование же аппарата подпрограмм позволяет обращаться к одной,и той же последовательности, команд .из разных точек программы. При каждом обращении к подпрограмме (оператор САЬЬ) адрес деланной подп~ропраммы загружается в счетчик команд. После вьгполнения подпрограммы в счетчик команд заносится адрес хоманды, непосредственно следующей за оператором САЬЬ, и продолжается выполнение основной программы.
Этот процесс иллюстрируется ~рис. 5.11 на цримере обращения при помощи оператора САЬЬ ~к подпрограмме КО()Т. После трансляции подпрограммы ей присваиваетоя некоторый адрес памяти. Символическому имени, подпрограммы (КОЫТ) соответствует адрес ее первой команды. Поскольку после заве1ршения подпрограммы нео~бходимо вернуться в основную программу, то адрес возврата помещается в стек (равд. 4.4). При выполнении команды ЙЕТ()КИ в подпрограмме адрес возцрата извлекается нз стека н продолжается .выполнение основной программы. ~При последующем обращении и подпрограмме КО1)Т повторяется та же последовательность команд с возвратом к команде, следующей после оператора САЬ1..
Для нашего примера, .когда последовательность из 10 команд должна быть выполнена в основной пропрамме 10 раз, при,использовании,подпрограмм требуется 21 ячейка памяти (!О операторов САЬЬ, 1 оператор ЙЕТ1)КХ, 1О команд) вместо 100 ячеек, необходимых в случае аьрименения мамросредств. Однако время выполнения процедуры при использовании макросредств меньше, так что, выбирая решение, следует тщательно учесть конкретные условия применения программы. Если для подпрограммы необходимы какие-нибудь данные .из основной арогрвммы, то эти данные или их адрвса должны быть переданы в подпрограмму посредством одно- Прозрамммое обесиечение 163 го из регистров процессора. Многочисленные варианты реализации этой задачи основываются на особенностях архитектуры процессора.
Простейшим из них при достаточном количестверегистровявляется обычная загрузка данных в сверхоперативную память перед обращением к подпрограмме. ПРИМЕР 5.6 Предположим, требуется написать подпрограмму с именем АЯЗОМ, которая будет складывать два числа АЬРНА и ВЕТА и записывать результат (811М) в некотОрую ячейку памяти 16]. Используя ~регистры общего ~назначения микропроцессора 1п!е! 8008, можно р~аспределнть лх следующим образом: (С) = АЬРНА (Ь>) =ВЕТА (В) = ЯЗМ Тогда рассматриваемая подпрогразгма будет включать команды АВЫМ: МОЧ А,С АПР Р МОЧ В,А КЕТ Перед обращением к подпрограмме из основной программы суммируемые числа необходимо записать в регистры С и Р. После выполнения оператора КЕТ13КН результат раимещается в регистре В.
В данном случае основная программа может включать ранее описанную макрокоманду ЬОАР и будет выглядеть следующим образом: ЬОА0 А1.РНА МОЧ С,М 1.0А0 ВЕТА МОЧ 0,М САЬЬ АВЫМ 1.0АР Я)М МОЧ М,В Часто сверхоперативная память не позволяет передать все дан. ные, необходимые для подпрогриммы. В этом случае память используется для передачи адреса списка параметров (РАЗУМЬ) подлрогра~ммы.