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










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

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

Опции передачи параметров. Передача через регистры

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


Наиболее общим способом передачи данных при программировании на языке Ассемблер является способ передачи данных через регистры. Немедленная доступность и высокая скорость делают их основными средствами для решения поставленной задачи. Регистры всегда отделены от кода операции, независимо от используемой программной среды. Почти все вызываемые функции MS-DOS передают свои данные таким способом. Короткие программы языка Ассемблер, являющиеся интерфейсными программами с MS-DOS, для манипулирования данными часто используют те же самые регистры, которые требуют функции, вызывающие эти данные MS-DOS.Это приводит к ощущению создания параметра в том же регистре, что и MS-DOS.


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


Другой трудностью является то, что необходимо непрерывно сохранять используемую дорожку, на которую выводится каждый регистр. Эта игра "кто первый" может наскучить даже наиболее опытному игроку. Особое расстройство вызывает случай, когда принято решение, что регистр X освободился и, следовательно, освободилась программа модуля. Позднее, когда принимается решение об использовании того же самого модуля в другом месте, может оказаться, что не освободился как раз только регистр X. Так команда PUSH (запомнить содержимое регистра в стеке) записывает в стек значение, содержащееся в регистре X, затем выполняется вызов и команда POP (выбрать значение регистра из стека) выбирает из стека значение регистра и заносит его в регистр X. Таким образом, в результате такого оборота X содержит возвращаемое значение. Видите, что теперь освободилось? И так случается очень часто.


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


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

Hosted by uCoz