Cтраница 4
Псевдокоманды языка ассемблера. [46] |
Ассемблер, который обрабатывает программу, представленную на рис. 6.2, формирует листинг, который приведен на рис. 6.3. Производится автоматическая нумерация строк текстового файла для облегчения организации ссылок и их корректировки. Вторая колонка на рис. 6.3 содержит значения счетчика ячеек программы перед ассемблированием каждой строки. [47]
Ассемблер следит за обозначениями, которые определяет пользователь, с помощью таблицы символов. Обычно когда идентификатор появляется в поле LABEL, он сразу же вводится в таблицу символов вместе с текущим значением счетчика ячеек программы. Обратите внимание на то, что многие метки используются до того, как они определяются; подобный способ носит название обработки метки со ссылкой вперед. Ассемблер допускает ссылки вперед благодаря тому, что трансляция программы выполняется в два прохода. Во время первого прохода формируется таблица символов, тогда как во время второго прохода выполняется трансляция команд. Этот процесс будет подробно описан в следующем разделе. [48]
Ассемблер устанавливает подразумеваемое направление передачи, исходя из порядка следования операндов. В процессорах MCS-48 и 8086 мнемоника MOV также используется для обоих направлений передачи. В этих машинах пересылки типа память-память запрещены. [49]
Ассемблер транслирует исходный модуль в два приема. Сначала он присваивает символическим именам адресов некоторые целые значения. Эти значения используются только в период трансляции исходного модуля. Значения символических имен вычисляются транслятором следующим образом. При трансляции программы Ассемблер заводит специальную переменную СА ( Счетчик Адреса), принимающую целые неотрицательные значения. В начале первого просмотра исходного модуля переменной СА присваивается некоторое целое значение, кратное 8; это значение указывает автор исходного модуля командой START. Большею частью начальное значение СА полагают равным нулю. [50]
Ассемблер просматривает одно за другим предложения исходного модуля. Если предложение порождает какой-либо элемент в объектном модуле, то Ассемблер, построив этот элемент, увеличивает значение СА на fe, где k - число байтов, занимаемых в объектном модуле построенным элементом. [51]
Ассемблер отмечает в специальной таблице базовых регистров номер общего регистра R и заносит в нее значение выражения V. С этого момента Ассемблер считает, что OP ( R) можно использовать в качестве базового регистра и что при выполнении программы в младших 24-двоичных разрядах OP ( R) будет содержаться двоичное представление значения V. [52]
Простейшие случаи употребления предложения DC 88. [53] |
Ассемблер, встретив в исходном модуле предложение DC, анализирует тип константы. Если текущее значение счетчика адреса имеет кратность, требуемую типом константы, то Ассемблер переводит константу в определяемый типом формат и помещает полученную последовательность шестнадцатиричных цифр в объектный модуль непосредственно вслед за последним уже построенным элементом объектного модуля. Если же значение счетчика адреса нужной кратности не имеет, то Ассемблер продвигает значение С А на k байтов так, чтобы значение С А k удовлетворяло нужному условию кратности, и строит описанным выше образом значение константы, отступив от последнего построенного элемента объектного модуля на k байтов. Пропущенные k байтов заполняются нулями. [54]
Разбиение на перемежающи - [ IMAGE ] Пример структуры исход-еся секции ного модуля. [55] |
Ассемблер заводит для каждой программной секции свой счетчик адреса. [56]
Ассемблер может иметь дело с четырьмя типами предложений. [57]