Cтраница 3
Блок-схема подпрограммы ВВ по прерываниям. [31] |
Если подпрограмма обслуживания ассемблируется как отдельный модуль, параметры BUFPR, COUNTR и FLAG необходимо объявить как глобальные символические наименования. Редактор связей заменяет их соответствующими фактическими ячейками и разрешает к ним внешние обращения. [32]
Основное отличие языка ассемблера от машинного языка заключается в использовании вместо двоичных кодов операций и адресов мнемоник и символических наименований. Поэтому основные функции ассемблера заключаются в трансляции мнемоник в коды операций, присвоении символических наименований ячейкам памяти и, при необходимости, подстановке адресов этих ячеек. В большинстве ассемблеров входная программа обрабатывается два раза, причем результаты первого этапа используются на втором. Эти два этапа называются проходами, а сам ассемблер - двухпроходовым. Первый проход в основном связан с отметкой ячеек, которые присвоены каждому символическому наименованию. На втором проходе транслируются коды операций и используется информация первого прохода для образования адресов в тех командах, в которых для представления адресов использованы символические наименования. [33]
Для дополнительной ясности символические наименования, не отмеченные как внешние, иногда называются внутренними ( или локальными) символическими наименованиями. [34]
Прототип представляет обычную программу, но, когда макрокоманда вызывается в программе, фиктивные аргументы в ней заменяются соответствующими символическими наименованиями из вызова макрокоманды. [35]
Для пояснения рассмотренных положений обратимся к примеру на рис. 2.13. Слева приведен входной модуль, в середине показана таблица символических наименований, полученная на первом проходе, а справа приведен объектный модуль. [36]
Здесь имя представляет собой то имя, которое используется в вызове макрокоманды ( т.е. в сигнале на расширение макрокоманды), а фиктивные аргументы представляют собой символические наименования в определении, которые при расширении макрокоманды заменяются символическими наименованиями из программы. Фиктивные аргументы разделяются запятыми. [37]
Символическое наименование, к которому имеется обращение в модуле, но которое либо не определено в этом модуле, либо к нему есть обращение из другого модуля, называется внешним ( или глобальным ] символическим наименованием и должно быть отмечено как таковое с помощью специальной псевдокоманды. Отметка символического наименования как внешнего предотвращает появление ошибки о неопределенном символическом наименовании, но каждое символическое наименование, отмеченное как внешнее, должно быть определено точно в одном из модулей, объединяемых редактором связей. [38]
Здесь имя представляет собой то имя, которое используется в вызове макрокоманды ( т.е. в сигнале на расширение макрокоманды), а фиктивные аргументы представляют собой символические наименования в определении, которые при расширении макрокоманды заменяются символическими наименованиями из программы. Фиктивные аргументы разделяются запятыми. [39]
Символическое кодирование дает возможность использовать при записи программ мнемонические обозначения кодов операций, именовать отдельные объекты программы ( операторы, константы, переменные, массивы данных, устройства вводачвывода) символическими названиями и использовать такие обозначения для адресации этих объектов. Символическое наименование - это последовательность символов ( букв и цифр), начинающаяся с буквы. [40]
Программа, иллюстрирующая арифметику с одинарной точностью. [41] |
Считается, что младшие и старшие биты первого числа находятся в ячейках ОНО и 0111 соответственно. Символические наименования NOS, TOTL и ANS определяются так же, как и раньше. [42]
Оператор используется для присвоения числовых значений символическим наименованиям. Символическому наименованию, записанному в графе этикетка, присваивается числовое значение или номер базиса с относительным адресом. При записи числа или относительного адреса в восьмеричной системе справа указывается буква В. [43]
Такая методика составления программ очень полезна в тех случаях, когда нужно записывать команды программы, использующие адреса чисел или команд, местоположение которых еще не известно. Поскольку символическое наименование адресов обычно соответствует их содержимому, а символические коды операций являются сокращенными наименованиями кодов, символическая программа легко записывается и проверяется. Благодаря методу символического кодирования появляется также возможность программирования задачи по частям ( блочное программирование), что особенно важно при решении сложных и громоздких задач, так как для программирования отдельных участков таких программ может привлекаться несколько программистов. [44]
Такая методика составления программ очень полезна в тех случаях, когда нужно записывать команды программы, использующие адреса чисел или команд, местоположение которых еще не известно. Поскольку символическое наименование адресов обычно соответствует их содержимому, а символические коды операций являются сокращенными наименованиями кодов, то символическая программа легко записывается и проверяется. Благодаря методу символического кодирования появляется также возможность программирования задачи по частям ( блочное программирование), что особенно важно при решении сложных и громоздких задач, так как для программирования отдельных участков таких программ может привлекаться несколько программистов. [45]