Но в этом случае, разумеется, необходимо следить за совпадением имен локальных переменных с именами глобальных переменных из этого списка.
В заключение обсуждения вариантов написания подпрограмм необходимо упомянуть еще одну возможность, доступную для самостоятельного использования только более искушенным программистам, владеющим хотя бы основами программирования на языке Assembler IBM PC и понимающим механизмы работы интерпретатора QBasic. Для этой цели имеется процедура вызова подпрограммы, размещаемой в сегменте данных и оформленной в кодах компьютера:
CALL ABSOLUTE ([argumentlist,] offset%) (3.24)
Где: arguinentlist — список передаваемых аргументов, задающий их смещения в сегменте данных подпрограммы, а offset% — смещение адреса первой команды подпрограммы относительно сегмента команд, установленного Процедурой DEF SEG.
Подпрограмма должна быть оформлена с учетом дальнего вызова процедуры, поскольку она располагается в сегменте данных, а вызов осуществляется из сегмента кодов интерпретирующей программы. Передача параметров осуществляется через стек по указателю, при этом следует принять во внимание, что программа находится в том же сегменте, что и данные (ближняя передача данных). Порядок размещения указателей в стеке соответствует порядку их размещения в списке параметров. Восстановление значения стека должно осуществляться соответствующим значением аргумента команды возврата из подпрограммы. Запись кодов программы в область данных может осуществляться двумя способами. В первом случае можно создать на диске специальным образом оформленный файл с расширением сом и загружать его процедурой BLOAD (загрузка двоичного файла). Второй способ предусматривает запись кодов, полученных из листинга трансляции, при помощи оператора DATA. Для подпрограмм небольших размеров лучше использовать второй способ.
3.4. ВЗАИМОДЕЙСТВИЕ ПРОГРАММЫ СО СРЕДОЙ
Все те команды, о которых было уже рассказано в части взаимодействия ОЗУ и ЦП, и те, о которых будет далее рассказано в части взаимодействия с другими устройствами и со средой, и составляет программу. Так что казалось бы о чем здесь нужно писать и вообще нужно ли? Тем не менее порядок написания команд существен не только с точки зрения корректной реализации алгоритма, но и затрат ресурсов компьютера и собственных усилий программиста. К великому сожалению в языке QBasic отсутствуют синтаксические правила, описывающие структуру программы в целом. Поэтому при написании программы на этом языке нужно руководствоваться здравым смыслом и удобством чтения программы. В этом плане весьма желательно все команды декларативного назначения (декларации функций и процедур, резервирования общей области, задания типов, констант и исходных данных) поместить в самом начале текста с соответст-