Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.407Первый проход Главная цель первого прохода — построить таблицу символов, содержащую значения всех символов. Символом может быть либо метка, либо значение, которому с помощью директивы приписывается определенное символическое имя: BUFSIZE EQU 8192 Приписывая значение символическому имени в поле метки команды, ассемблер должен знать, какой адрес будет иметь эта команда во время выполнения программы. Для этого ассемблер во время ассемблирования сохраняет специальную переменную, называемую счетчиком адресов команд (Instruction Location Counter, ILC). В начале первого прохода эта переменная устанавливается в О и увеличивается после каждой обработанной команды на длину этой команды. В листинге 7.8 дан соответствующий пример для Pentium 4 (в предпоследней колонке поля комментариев показана длина каждой команды, а в последней — накопленное значение счетчика). В данном примере операторы, расположенные до метки MARIA, занимают 100 байт. Мы не будем давать примеры для SPARC и Motorola, поскольку различия между языками ассемблера не очень важны, и одного примера вполне достаточно. Кроме того, как вы уже успели убедиться, ассемблер SPARC совершенно неудобочитаем. Листинг 7,8. Счетчик адресов команд позволяет отслеживать адреса команд MARIA: MOV ЕАХ, I ; ЕАХ = I 5 100 MOV ЕВХ. J ; ЕВХ = J б 105 ROBERTA: M0V ЕСХ, К ; ЕСХ = К б 111 IMUL ЕАХ. ЕАХ ; ЕАХ =1*1 2 117 IMUL ЕВХ. ЕВХ ; ЕВХ = J * J 3 119 IMUL ЕСХ, ЕСХ ; ЕСХ = К * К 3 122 MARILYN: ADD ЕАХ, ЕВХ ; ЕАХ = I * I + J * J 2 125 ADD ЕАХ, ЕСХ : ЕАХ =I*I+J*J+K*K 2 127 STEPHANY: JMP DONE ; переход к DONE 5 129 При первом проходе в большинстве ассемблеров используются, по крайней мере, 3 таблицы: таблица символических имен, таблица директив и таблица кодов операций. В случае необходимости используется еще литеральная таблица. Таблица символических имен содержит по одной записи для каждого имени, как показано в табл. 7.4. Символические имена либо являются метками, либо явным образом определяются (например, с помощью директивы ЕСШ). В каждом элементе таблицы символических имен содержится само имя (или указатель на него), его численное значение и иногда некоторая дополнительная информация. Она может включать: ♦ длину поля данных, связанного с символом; ♦ биты перераспределения памяти (которые показывают, изменится ли значение символа, если программа будет загружена не по тому адресу, по которому ее предполагал загрузить ассемблер); ♦ сведения о том, можно ли получить доступ к символу извне процедуры.
В таблице кодов операций предусмотрена, по крайней мере, одна запись для каждого символьного кода операции ассемблера (табл. 7.5). В каждой записи содержится символьный код операции, два операнда, числовое значение кода операции, длина команды и номер типа, по которому можно определить, к какой группе относится код операции (коды операций делятся на группы в зависимости от числа и типа операндов). |