КОМАНДЫ ВЫЗОВА ПОДПРОГРАММ И ВОЗВРАТА ИЗ ПОДПРОГРАММ

 Команда безусловного вызова.

В микропроцессорах 8080 или 8085 косвенный вызов может быть выполнен с помощью обращения к промежуточной подпрограмме, которая переходит косвенно на вызываемую подпрограмму.

2. Команда условного вызова.

В микропроцессоре 8080 или 8085 условный вызов подпрограммы может быть выполнен с помощью последовательностей команд для условного перехода. Единственное отличие состоит в том, что команды перехода к действительным адресам назначения должны быть заменены на команды вызова подпрограмм.

Команды возврата из подпрограмм разделяются на:

1. Команды безусловного возврата

2. Команды условного возврата

3. Команды возврата с пропуском

4. Команды возврата после прерывания

 

СМЕШАННЫЕ КОМАНДЫ

В эту категорию входят следующие команды: нет операции, запись в стек, получение из стека, останов, ожидание, захват (программное прерывание) и другие, не попавшие в описание ранее категории команд.

ДОПОЛНИТЕЛЬНЫЕ СПОСОБЫ АДРЕСАЦИИ

 Косвенная адресация. В процессорах 8080 и 8085 косвенную адресацию можно выполнить с помощью загрузки косвенных адресов в регистры Н и L, используя команду LHLD. После этого обращение к регистру М является эквивалентом косвенной операции. Таким образом, этот процесс всегда включает два шага. Кроме того, можно использовать также пары регистров В и D в командах LDAX  и STAX .

 Индексная адресация. Индексную адресацию можно выполнить, добавляя индекс с помощью команды DAD к базе. Понятно, что программное сложение требует дополнительного времени выполнения.

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

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

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

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

 Косвенная адресация с предварительным индексированием (предындексирование). При предындексировании процессор должен сначала вычислить индексный адрес, а затем использовать этот адрес косвенно. Так как таблица, для которой производится индексирование, должна содержать двухбайтные косвенные адреса, индексирование должно сопровождаться умножением на 2.

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

 

ГЛАВА 3. РАСПРОСТРАНЕННЫЕ ОШИБКИ

ПРОГРАММИРОВАНИЯ

В этой главе описываются распространенные ошибки в программах на языке ассемблера 8080 и 8085. Заключительный раздел данной главы посвящен описанию часто встречающихся ошибок в драйверах ввода-вывода и программах обслуживания прерываний. Эта глава преследует следующие цели:

*  Предупредить программиста о возможных неприятных местах и источниках ошибок,

*  Описать вероятные источники ошибок программирования,

*  Подчеркнуть те методы и предостережения, которые обсуждались в главах 1 и 2,

*  Информировать программистов, занимающихся поддержкой математического обеспечения, о возможных местах ошибок и неправильных толкований,

*  Дать начинающему программисту отправную точку в трудном процессе обнаружения и исправления ошибок.

 

Конечно, никакой список ошибок не может быть полным, тем не менее, данное в этой главе описание поможет читателю отлаживать большинство программ.

 

КЛАССИФИКАЦИЯ ОШИБОК

ПРОГРАММИРОВАНИЯ

Рассмотренные ошибки программирования для микропроцессоров 8080 и 8085 могут быть разделены на следующие категории:

 Перестановка операндов ли частей операндов. К типичным ошибкам этого рода относятся перестановка операндов, указывающих на источник и назначение в командах пересылки, перевертывание формата, в котором запоминаются 16-разрядные значения, изменение направления при вычитаниях и сравнениях.

 Неправильное использование флагов. Типичные ошибки следующие:

·  использование не того флага, который в данном конкретном случае должен проверяться (как, например, флага знака вместо флага переноса),

· условный переход после команд, которые не воздействуют на данный флаг,

· инвертирование условий перехода (особенно при использовании флага нуля),

· неправильный условный переход в случаях равенства и случайное изменение флага перед условным переходом.

 Смешивание регистров и пар регистров. Типичная ошибка состоит в работе с регистром (В, D или Н) вместо пары регистров с аналогичным именем.

 Смешивание адресов и данных. К типичным ошибкам относятся использование непосредственной адресации вместо прямой адресации или наоборот, смешивание регистров с ячейками памяти, адресуемыми через пары регистров.

 Использование неверных форматов. Типичные ошибки состоят в использовании формата BCD (десятичного) вместо двоичного или наоборот и использование двоичного и шестнадцатеричного кода вместо ASCII.

 Неправильная работа с массивами. Обычная ошибка состоит в выходе за границы массивов.

 Неучет неявных эффектов. К типичным ошибкам относятся использование аккумулятора, пары регистров, указателя стека, флагов или ячеек памяти без учета влияния участвующих в работе команд. Большинство ошибок вызываются командами, которые дают непредвиденные, неявные или косвенные результаты.

 Ошибки при задании необходимых начальных условий для отдельных программ или микро-ЭВМ в целом. Большинство программ требует инициализации счетчиков, косвенных адресов, регистров, флагов и ячеек для временного хранения. Микро-ЭВМ в целом требует инициализации всех общих ячеек в ОЗУ (особо отметим косвенные адреса и счетчики).

 Неправильная организация программы. К типичным ошибкам относятся обход или повторение секций инициализации, ошибочное изменение регистров с адресами или счетчиками и потеря промежуточных или окончательных результатов.

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

Более сложные источники конфликтов связаны с системой прерываний, портами ввода-вывода, стеком и флагами. Системные программы в конечном счете должны эксплуатировать те же самые ресурсы, что и программы пользователя. При этом обычно в системных программах предусматривается сохранение и восстановление программной среды, в которой работают пользовательские программы, но это часто приводит к трудноуловимым или неожиданным последствиям. Сделать такую операционную систему, которая была бы совершенно прозрачной для пользователя - это задача, сравнимая с выработкой правил и законов или сводов о налогах, которые не имели бы лазеек или побочных эффектов.

 

Дата: 2019-05-28, просмотров: 3.