Что такое ассемблер?
Языки ассемблеров Команды языка ассемблера Код операции Псевдооперации Литералы Свободный формат команд Некоторые типичные команды ассемблера для машин с побайтовой организацией Ассемблеры типа «трансляция — выполнение» Однопроходный ассемблер Двухпроходный ассемблер Символы Подробная блок-схема прохода Подробная блок-схема прохода 2 Пример трансляции Таблицы символов общие замечания Обработка таблицы Линейный поиск Двоичный поиск Сравнение двоичного и линейного способов поиска Метод хеширования Пример хеширования Скученность Назначение макрокоманды Различие между макрокомандами и подпрограммами Форматы макрокоманды Ключевой макрос Макропроцессор |
ЛитералыДля программиста часто оказывается удобной возможность записи фактического операнда в адресном поле команды. Если элемент данных в заданной ячейке должен быть, умножен на 5, лучше записать числовое значение.5 в качестве одного из операндов команды языка ассемблера, чем определить символ со значением 5 и поместить этот символ в поле адреса. Для некоторых команд, таких, как Проверить по маске (Test under Mask — ТМ), Сравнение кодов (Сотраге Logical to — CLI) или Пересылка (Move one character) — MVI), из-за свойств команды необходимо иметь явно заданный операнд в поле адреса. В других командах это тоже допускается, если адрес не предназначается для занесения результата операции. Для того чтобы отличать такой явный операнд, который называется литералом, от обычного адреса, перед ним записывается предупреждающий маркер, такой, как =, и символ, определяющий тип (например, В, X, G и Р показывают, что значение литерала задано в двоичном, шестнадцатиричном, символьном или в упакованном десятичном формате соответственно), а сам операнд заключается в кавычки. Без этих мер предосторожности ассемблер не смог бы определить, например, для команды RR, означает ли 5 в поле адреса число пять или же содержимое пятого регистра, а для команды работы с символом — является ли А символическим адресом, символом А или же шестнадцатеричным числом, равным Ю(10). Ассемблер не может вставить литерал непосредственно в команду, так как команды имеют фиксированный формат, а литералы — переменную длину. Он транслирует команду, содержащую литерал, присваивая адрес литералу, занося до этому адресу соответствующее значение литерала и помещая этот адрес в соответствующее адресное подполе команды. Литералы хранятся в отдельной части программы — литеральном пуле, который обычно располагается в конце программы. Большинство ассемблеров распознает повторение литералов и хранит только один из них. Развитые ассемблеры допускают в адресных полях не только символические имена и литералы, но также и их арифметические комбинации. Однако в большинстве случаев эта возможность ограничивается формой символическое имя ± числовая константа. Поле адреса в команде языка ассемблера имеет переменную длину. Поэтому ассемблер распознает его конец с помощью ограничителя, а именно первого пробела. Весь текст карты или образа карты, следующий за этим пробелом, рассматривается как комментарий и игнорируется при генерации машинного кода. Колонки 73—80 отведены для специальных комментариев. Их содержимое может быть использовано для идентификации программы и для нумерации команд. Комментарии могут также занимать и целые карты. В этом случае символом, расположенным в колонке 1, должен быть специальный маркер. В последующих примерах в качестве такого символа используется звездочка. |