Статус
нашего
сайта:
ICQ Secrets Center is Online  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


Таненбаум Э.- Архитектура компьютера. стр.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.4, Таблица символических имен для программы из листинга 7.8

Символическое имя

Значение

Прочая информация

MARIA

 

ROBERTA

 

MARILYN

 

STEPHANY

 

В таблице кодов операций предусмотрена, по крайней мере, одна запись для каждого символьного кода операции ассемблера (табл. 7.5). В каждой записи содержится символьный код операции, два операнда, числовое значение кода операции, длина команды и номер типа, по которому можно определить, к какой группе относится код операции (коды операций делятся на группы в зависимости от числа и типа операндов).


⇐ Предыдущая страница| |Следующая страница ⇒

.