На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 2 / Передача по значению Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Передача по значению

Чаще всего передача параметров в языке Ассемблер выполняется путем передачи значения. При этом способе передачи в вызывающую программу передаются действительные данные (их значения). Целевая программа получает число, хранящееся в регистре, либо помещенное в стек.


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


Если параметры, содержащие непосредственные данные, передаются в стек, то пользователи микропроцессоров 8086 и 8088 не должны испытывать страх перед некоторыми дополнительными усилиями, связанными с передачей значений в стек. Пользователи усовершенствованного микропроцессора 80x86 могут использовать инструкцию



                     PUSH <immediate>

(переслать в стек непосредственные данные), однако пользователи других микропроцессоров должны передавать данные в стек через непосредственный регистр. Для этого может быть использован макрос @PushIm, рассмотренный в главе 1, однако, для этого приложения его сложность не указывается. Если используется вызывающая программа, приведенная в листинге 2-1, то для передачи непосредственных данных в стек доступен регистр BP (указатель базы). Почти во всех соглашениях по архитектуре микропроцессоров 8086 для этих целей предназначен регистр AX. Любые непосредственные данные, которые необходимо переслать в стек, передаются с помощью следующих двух строк программы:


               mov   ax,<immediate_data>
               push ax

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz