<<
>>

Возврат результата из процедуры

В отличие от языков высокого уровня, в языке ассемблера нет отдельных понятий для процедуры и функции. Организация возврата результата из процедуры пол- ностью ложится на программиста.
Если исходить из того, что получение результа- та — частный случай передачи аргументов, то программисту доступны три вариан- та возврата значений из процедуры. is С использованием регистров. Ограничения здесь те же, что и при передаче дан- ных, — это небольшое количество доступных регистров и их фиксированный размер. Функции DOS используют именно этот способ. Из рассматриваемых здесь трех вариантов данный способ является наиболее быстрым, поэтому его есть смысл задействовать для организации критичных по времени вызова про- цедур с малым количеством аргументов. Ш С использованием общей области памяти. Этот способ удобен при возврате большого количества данных, но требует внимательности в определении обла- стей данных и подробного документирования, чтобы устранить неоднозначность при трактовке содержимого общих участков памяти.
* С использованием стека. Здесь, подобно передаче аргументов через стек, также требуется регистр В Р. При этом возможны следующие варианты: ? использование для возвращаемых аргументов тех же ячеек в стеке, которые применялись для передачи аргументов в процедуру, то есть предполагается замещение ставших ненужными входных аргументов выходными данными; D предварительное помещение в стек наряду с передаваемыми аргументами фиктивных аргументов с целью резервирования места для возвращаемого значения (в этом варианте процедура, конечно же, не должна пытаться очи- стить стек командой RET, эту операцию придется делать в вызывающей про- грамме, например, командой POP). В ходе приведенного обсуждения мы выяснили, что ассемблер не накладывает никаких ограничений на организацию процесса передачи данных и возврата зна- чений между двумя процедурами, а в более общем случае — и между модулями, представляющими отдельные файлы. Наиболее быстрый способ такого обмена — использование регистров. Но часто требуется связывать между собой не только программы, написанные на ассемблере, но и программы на разных языках. В этом случае универсальным является обмен данными через стек. Далее мы рассмотрим, как решается проблема связи программных модулей, написанных на языке ассем- блера и языках высокого уровня.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Возврат результата из процедуры:

  1. 6. Обеспечение возврата вкладов
  2. Усиленный возврат.
  3. 4. Неосновательное обогащение, не подлежащее возврату.
  4. Правило критического возврата к исходной точке.
  5. Возвратимся к корням.
  6. Глава 15. ВОЗВРАТ ТОТАЛИТАРИЗМА
  7. 1.3. Кинофильм "нет возврата"
  8. Статья 949. Обязанность хранителя возвратить вещь
  9. Схема «Процедуры комфортизации».
  10. Схема «Процедуры комфортизации».
  11. Статья 1049. Обязанность заемщика возвратить заем
  12. 2. Имущество, не подлежащее возврату в качестве неосновательного обогащения
  13. 3. Процедуры банкротства гражданина