|
Передача через регистры - допускается несколько парамет-
ров; это наилучший способ для простого интерфейса и для обработки
исключительных ситуаций, а также для возврата значений.
2. Передача через общую область памяти - ограничивает гиб-
кость и общность модулей, но имеет преимущества обеспечения дос-
тупности данных для всех модулей.
3. |
резервное копирование баз данных |
|
|
Передача данных в стек - предпочтительный способ обработки
данных; превосходит в общности (многократно-используемые модули)
и вырабатывает модульные программы; необходим для интерфейса с
большинством языков высокого уровня.
Кроме того, при передаче данных способом, отличным от выше-
приведенных, каждый модуль должен принимать в качестве параметров
необходимые ему данные не только для себя самого, но и для других
модулей, которые он вызывает в процессе своей работы. Иногда это
может привести к большому списку параметров для модулей верхнего
уровня.
В действительности, по всей вероятности, для организации пе-
редачи данных модулю может потребоваться использование комбинации
этих способов (за исключением передачи данных в память програм-
мы).
- 2-16 -
Передача параметров по значению или адресу
После принятия решения о том, как передавать параметры, необ-
ходимо ответить на вопрос: в какой форме использовать аргументы?
Вспомните, что аргумент представляет собой вызываемое значение,
которое присваивается параметру. |
avast home |
|
|
Это значение может быть либо не-
посредственными данными, либо адресом данных.
Передача по значению
Чаще всего передача параметров в языке Ассемблер выполняется
путем передачи значения. При этом способе передачи в вызывающую
программу передаются действительные данные (их значения). |
резервное копирование |
|
|
panda antivirus, англо русский словарь, английский словарь, asplinux confpoint, asplinux 11, .
системы резервного копирования
|
Для
структуры StackFrame при работе с листингом 2-1 порядок парамет-
ров должен быть изменен на противоположный (т.е. реверсирован).
(Назначение порядка "от первого к последнему" может привести к
путанице в этой точке. На самом деле назначается порядок следова-
ния параметров "слева - направо", т.е. как они появлялись бы на
языке высокого уровня).
Второе отличие между примерами заключается в способе очистки
переданных параметров из стека. В примере, приведенном в листинге
2-1, вызывающая программа очищает параметры в стеке посредством
инструкции add SP,<2N>. В листинге 2-4 вызываемая программа очи-
щает стек, используя инструкцию ret (2N).
Последнее отличие заключается в том, что в листинге 2-1 пока-
зана программа near (близкий), в то время как в листинге 2-4 по-
казана программа far (далекий). Если структура StackFram будет
использоваться с процедурой near, то необходимо заменить директи-
ву dd директивой dw. Это вызывает резервирование в шаблоне для
адреса возврата вызывающей программы только двух байтов, в то
время как для вызываемой процедуры far требуется четыре байта. С
другой стороны, если структура будет использована в программе
прерывания, то после директивы dd необходимо будет добавить до-
полнительную директиву dw для резервирования памяти для флажков
процессора, помещаемых в стек при прерывании.
Директива STRUC не выполняет добавление никакого кода в ко-
нечную программу. Эта директива только описывает смещения, ис-
пользуемые с указателем базы BP, для облегчения задачи обращения
к параметрам.
Стек также обеспечивает удобное место для хранения возвращае-
мых значений, но мы отложим обсуждение этой темы до тех пор, пока
не обсудим различия между функциями и подпрограммами в последую-
щих разделах этой главы.
Краткое изложение опций передачи параметров
Существует три возможных способа передачи данных модулям:
1.
|
|
|