{img1} |
системы управления базой данных |
|
Во многих прикладных програм-
мах одной из требуемых опций является необходимость иметь вызыва-
емые процедуры, функции и подпрограммы, обеспечивающие некоторые
типы индикации об ошибках или кодах состояния. Вероятно, читатель
уже заметил, что большинство функций MS-DOS вызывает возврат ко-
дов состояния о завершении. |
norton antivirus |
|
|
Часто для индикации наличия ошибки
используется бит переноса в одном или более регистрах, обычно в
регистре AX, содержащем подробную информацию о типе ошибки.
Бит переноса используется для номера причины. Его легко про-
верить (с помощью инструкций JC - переход, если был перенос, или
с помощью инструкции JNC - переход, если не было переноса); легко
установить, дополнить или очистить (с помощью инструкций STC -
установка флажка переноса, CMC - дополнение флажка переноса и CLC
- сброс флажка переноса); а также можно сохранить и восстановить
(с помощью инструкций PUSHF - запоминание флажков в стеке и POPF
- извлечение флажков из стека). |
бухгалтерия |
|
{img3} |
утилиты резервного копирования |
|
Доступ к флажку переноса более
совершенен чем доступ к любому другому биту состояния в архитек-
туре микропроцессоров 8086/8088. Это сочетание обеспечивает иде-
альный механизм для индикации наличия исключительной ситуации.
Конечно, программист должен помнить об очистке бита переноса для
индикации нормального завершения в случае, если ошибка не прои-
зошла, потому что бит переноса может быть уже установлен при вы-
- 2-20 -
полнении обычной операции.
После того, как вызывающая программа обнаружит, что возникла
ошибка, программа должна установить природу ошибки. |
текстовые редакторы |
|
|
бухгалтерия, panda, архиватор rar, nod32, avast 4, .
asplinux 11
|
В
тех случаях, когда в вызывающую программу необходимо возвратить
более двух слов, данные помещаются в буфер памяти, а указатель на
этот буфер возвращается в вызывающую программу. Способы управле-
ния этим указателем зависят от конкретного языка.
Возврат значений в общей области
Возврат значений в общей области необходим для функций. Для
этого используется метод "стороннего эффекта", представляющий ра-
зумное, простое средство для возврата большого количества данных.
Методом стороннего эффекта он назван потому, что операция переда-
чи не сразу очевидна из прочтения раздела "вызов" вызывающей
программы и происходит как случайный результат процедуры. Так как
это не очевидно из вызова, то для ясности в документацию необхо-
- 2-19 -
димо добавить описание того, какие значения возвращаются и поче-
му.
В связи с этим, если вместо параметра в регистре или стеке
передается адрес общей области, то ожидаемые в этой отдельной об-
ласти памяти возвращаемые значения становятся более очевидными
для читателя. Кроме того, получается преимущество общности, т.к.
процедура может непосредственно возвращать свои значения в любую
ячейку буфера.
Возврат значений в стеке
Последним способом возврата значений является помещение их в
стек. Эта операция требует использования регистра BP для адреса-
ции стека (таким же способом, как передача параметров в стек).
При возврате значений, значения загружаются в стек в одну из яче-
ек памяти выше адреса возврата. Если процедура вызывается с пара-
метрами, то для сохранения возвращаемого значения может быть ис-
пользована одна из ячеек параметров. Если процедура вызывается
без параметров, то вызывающая процедура должна поместить в стек
фиктивный аргумент, чтобы отвести место для возвращаемого значе-
ния.
При возврате значений в стек вызываемая программа не должна
очищать стек с помощью инструкции RET N. Вместо этого вызывающая
процедура должна использовать для очистки стека получение возвра-
щаемых значений через простые инструкции POP (восстановление сло-
ва из стека).
Если возвращаемые значения слишком большие для удобного рас-
положения в стеке, то вызываемая программа может возвратить ука-
затель на ячейку памяти, где находится действительное возвращае-
мое значение. В этом случае вызывающая программа должна принять
решение о месте области буфера.
Отчеты об исключительных ситуациях
Здесь рассматривается индикация о состоянии возврата или об
обнаруженных и выдаваемых ошибках.
|
|
|