Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Аналитический обзор книги "Программирование на языке ассемблера..."

Документ 1 | Документ 2 | Документ 3 | Документ 4 | Документ 5

←предыдущая  следующая→
1 2 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

РАСПОЗНОВАНИЕ ОШИБОК АССЕМБЛЕРОМ

Большинство ассемблеров немедленно распознает наиболее распространенные ошибки, такие как:

1.   Неопределенный код операции (обычно это неправильное написание или отсутствие двоеточия или метки);

2.   Неопределенное имя (часто это неправильное написание или отсутствие определенного имени);

3.   Неверный символ (например, 2 в двоичном числе или В в десятичном числе);

4.   Неправильное значение (обычно это число, которое слишком велико для 8 или 16 разрядов);

5.   Отсутствует операнд;

6.   Двойное определение (одному и тому же имени присваиваются два различных значения);

7.   Недопустимая метка (например, метка, предписанная псевдооперации, не допускающей метки);

8.   Отсутствие метки ( например, при псевдооперации EQU, для которой требуется метка).

Эти ошибки неприятны, но они легко исправимы. Единственная трудность возникает тогда, когда ошибка (такая, как отсутствие точки с запятой у строки с комментарием) приводит ассемблер в "замешательство", результатом чего является ряд бессмысленных сообщений об ошибках.

Существует, однако, много простых ошибок, которые ассемблер не может распознать. Программисту следует иметь в виду, что его программа может содержать такие ошибки, даже если ассемблер и не сообщил о них. Типичны следующие примеры.

1.   Пропущенные строки.

2.   Пропущенные определения.

3.   Ошибки в написании, когда запись сама по себе допустима.

4.   Обозначение команд как комментариев.

5.   Если в команде, которая работает с парой регистров, задается одинарный регистр.

6.   Если вводится неправильная цифра, такая как Х в десятичном или шестнадцатеричном числе или 7 в двоичном числе.

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

РАСПРОСТРАНЕННЫЕ ОШИБКИ В ДРАЙВЕРАХ

 ВВОДА - ВЫВОДА

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

1.   Смешивание портов ввода и вывода.

2.   Попытка выполнить операции, которые физически невозможны.

3.   Упущенные из вида неявных эффектов аппаратуры.

4.   Чтение или запись без проверки состояния.

5.   Игнорирование различия между вводом и выводом.

6.   Ошибка при сохранении копии выводимых данных.

7.   Чтение данных до того, как они стабилизируются, или во время их изменения.

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

9.   Смешивание действительных портов ввода-вывода с внутренними регистрами интегральных схем ввода-вывода.

Неправильное использование двунаправленных портов.

Отсутствие очистки состояния после выполнения команды ввода-вывода.

РАСПРОСТРАНЕННЫЕ ОШИБКИ В

ПРОГРАММАХ ПРЕРЫВАНИЯ

Многие ошибки, связанные с прерываниями, зависят как от аппаратного, так и программного обеспечения. Самыми распространенными ошибками являются следующие.

1.  Отсутствие разрешения прерываний.

2.   Отсутствие сохранения регистров.

3.   Сохранение или восстановление регистров в неправильном порядке.

4.   Разрешение прерываний до инициализации приоритетов и других параметров системы прерываний.

5.   Неучет того, что реакция на прерывание включает сохранение счетчика команд в вершине

←предыдущая  следующая→
1 2 


Copyright © 2005—2007 «RefStore.Ru»