Читайте также:
|
|
Прежде чем исходную программу, написанную на языке ассемблера, можно будет выполнить, ее необходимо ассемблировать в объектную программу на машинном языке. Задача осуществляется программой-ассемблером, заменяющей все символические обозначения операций и адресных режимов двоичными кодами, а все имена и метки — их настоящими значениями.
Ассемблер присваивает командам и блокам данных адреса, начиная с адреса, заданного в директиве ORIGIN. Эта директива отвечает за размещение по нужным адресам констант, которые могут быть заданы в директивах DATAWORD, и резервирует память в соответствии с указаниями, содержащимися в директивах RESERVE.
Важнейшим моментом процесса ассемблирования является определение значений, заменяющих имена. В тех случаях, когда значение имени определяется директивой EQU, это очень простая задача. Но если имя задается в поле «Метка» команды, представляемое им значение определяется положением этой команды в ассемблированной объектной программе. Поэтому в ходе формирования машинного кода ассемблер должен отслеживать адреса, по которым будут загружаться последовательные команды программы. В некоторых случаях ассемблер не заменяет представляющее адрес имя реальным значением этого адреса. Сканируя исходную программу, ассемблер записывает все имена и соответствующие им числовые значения в специальную таблицу, называемую таблицей символов. Когда имя встречается в программе повторно, оно заменяется соответствующим значением из таблицы. На первом проходе ассемблер создает полную таблицу символов. В конце этого прохода всем встречающимся в программе именам должны быть поставлены в соответствие числовые значения.
После этого ассемблер снова проходит по исходной программе и заменяет все имена значениями из таблицы символов. Такой ассемблер называется двухпро-ходным.
Ассемблер сохраняет объектную программу на магнитном диске. Перед выполнением эта программа загружается в память компьютера. Для этого там должна присутствовать еще одна служебная программа, называемая загрузчиком. Загрузчик выполняет последовательность операций ввода, необходимых для пересылки программы на машинном языке с диска в заданное место памяти. При этом загрузчик должен знать длину программы и адрес, по которому ее необходимо загрузить. Обычно ассемблер помещает такого рода информацию в заголовок программы, предшествующий объектному коду. Загрузив код, загрузчик начинает выполнение объектной программы с перехода к той ее команде, которая должна быть реализована первой. Адрес этой команды включается в программу на языке ассемблера в качестве операнда директивы ассемблера END. Ассемблер помещает этот адрес в заголовок, предшествующий объектному коду на диске.
Программа начинает выполняться и выполняется до своего завершения, если только в ней нет логических ошибок. Пользователь должен уметь находить такие ошибки. Что касается синтаксических ошибок, то ассемблер выявляет их сам и сообщает об этом пользователю. В состав системного программного обеспечения обычно включают программу, называемую отладчиком. Эта программа предоставляет пользователю возможность остановить выполнение объектной программы в указанной им точке и проанализировать содержимое памяти и регистров процессора.
17. Директивы определения данных
Ассемблер обеспечивает два способа определения данных: во-первых, через указание длины данных и, во-вторых, по их cодержимому. Рассмотрим основной формат определения данных:
[имя] Dn выражение
1.Имя элемента данных не обязательно, но если в программе имеются ссылки на некоторый элемент, то это делается посредством имени.
2.Для определения элементов данных имеются следующиедирективы: DB (байт), DW (слово), DD (двойное слово),DQ (учетверенное слово) и DT (десять байт).
3.Выражение может содержать константу, или знак вопроса для неопределенного значения.
Выражение может содержать символьную строку или числовую константу.
Символьные строки
Используются для описания данных, таких как, например, имена людей или заголовки страниц. Содержимое строки oтмечается одиночными кавычками, например, 'PC' или двойными кавычками - "PC". Ассемблер переводит символьные строки в объектный код в обычном формате ASCII.
Символьная строка определяется только директивой DB, в котоpой указывается более двух символов в нормальной последо вательности слева направо.
Числовые константы
Используются для арифметических величин и для aдресов памяти. Ассемблер преобразует все числовые константы в шестнадцитеричные и записывает байты в объектном коде в обратной последовательности - справа налево.
Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой D, которую можно не указывать, например, 125 или 125D.
Шестнад-ный формат допускает шест. цифры от 0 до F и обозначается последней буквой H.
Двоичный формат допускает двоичные цифры 0 и 1 и обозначается последней буквой B. Двоичный формат обычно используется для более четкого представления битовых значений в логических командах AND, OR, XOR и TEST.
Восмеричный формат допускает восмеричные цифры от 0 до 7 и обозначается последней буквой Q или O,
Дата добавления: 2015-04-22; просмотров: 102 | Поможем написать вашу работу | Нарушение авторских прав |