Cтраница 2
Ассемблер состоит из двух частей. Первая из них - язык ассемблера ( исходный язык), используемый программистом для записи программы. Второй частью является программа ассемблера, которая переводит сделанную программистом запись на языке ассемблера в машинную программу. [16]
Ассемблер не будет по собственной инициативе искать файл, где находятся системные макро. Такое недоверие со стороны программы ассемблера явно неоправданно; будем надеяться, что дальнейшие версии получат соответствующие исправления. [17]
Более точно под компиляцией понимается процесс получение файла, содержащего двоичный код, из файла, написанного на языке высокого уровня. Однако в некоторых системах возможность использования команды COMPILE распространяется и на программы, написанные на языке ассемблера. Заметим, чго имени файла не даются расширения при вызове программы ассемблера; макроассемблер воспринимает TEST как обозначение исходного файла, если обнаружит TEST. [18]
Блок-схема программы редактора текста.| Фрагмент блок-схемы программы на ассемблере. [19] |
На практике часто бывает нежелательна организация отдельных модулей данных. Вместо этого создается некоторый комплекс процедур, имеющих доступ к определенным данным и осуществляющих их обработку. Рассмотрим, например, таблицу символов, обрабатываемую ассемблером. Программа ассемблера должна выполнять с ней целый ряд операций, таких, как включение в таблицу новых символов, поиск находящихся в ней элементов, сортировка содержимого таблицы. [20]
Машинный язык вычислительной машины представляет собой на-юр последовательностей ( цепочек) битов, которые воспринимаются машиной как команды; действия, выполняемые каждой машинной командой, определяются электронными схемами вычислительной машины. Язык ассемблера - это символический язык, являющийся программным инструментом. Программы, написанные на этом языке, могут непосредственно транслироваться на машинный язык с помощью системной программы, называемой ассемблером. Результатом работы программы ассемблера является объектный модуль, содержащий цепочки битов ( совокупность которых составляет программу на машинном языке), а также информацию, которая указывает программе загрузчика, в какую область памяти вычислительной маши - - ны поместить эти цепочки битов. [21]
Схема SUMMARY. [22] |
Для определения начала каждого из этих сегментов служит директива SEGMENT, перед которой указано имя сегмента. В строке 1 определяется начало сегмента данных с именем DATA, а в строке 4 - начало программного сегмента с именем SUMMARY. Конец каждого сегмента указывается с помощью директивы ENDS ( строки 3 и 18), перед которой записывается имя соответствующего сегмента. Сегмент данных состоит из одной строки ( строка 2), содержащей директиву DB - определение байта памяти. По этой директиве программа ассемблера резервирует под переменную с именем SUM 1 байт памяти. Директива ASSUME ( строка 5) определяет соответствие сегментов и их имен. В строке 6 записана директива EQU, которая порту ввода - вывода PORT1 ставит в соответствие его номер. [23]
Точка с запятой используется в ассемблере для обозначения начала комментария. Он может находиться в любом месте строки. Обычно комментарии располагают справа от кода ассемблера, чтобы указать выполняемую им функцию и объяснить порядок ее выполнения. Для наглядности многострочный комментарий снабжают заголовком. Если вы посмотрите на распечатку, то увидите, что генерируемые программой ассемблера машинные коды расположены с левой стороны страницы и для большей наглядности стоят изолированно от остального текста. [24]
Следующим толчком в использовании вычислительной системы явилось создание компилятора, и это было, вероятно, одним из наиболее важных вкладов в науку о вычислительных машинах. Компиляторы были призваны дать программисту возможность писать программы на исходном языке, близком, насколько это возможно, к естественному языку пользователя. Классическим примером языка высокого уровня является FORTRAN. Конечно, в настоящее время есть много компиляторов, хорошо описанных в литературе. Задача компилятора состоит в преобразовании информации на исходном языке высокого уровня в такую форму, которую ассемблер в дальнейшем подготовил бы к загрузке в основную память для решения задачи. Это означает работу в два этапа, но компилятор может преобразовывать исходную программу и прямо для загрузки в систему без вызова программы ассемблера. [25]