Главная » Просмотр файлов » Э. Таненбаум - Архитектура компьютера

Э. Таненбаум - Архитектура компьютера (1127755), страница 145

Файл №1127755 Э. Таненбаум - Архитектура компьютера (Э. Таненбаум - Архитектура компьютера) 145 страницаЭ. Таненбаум - Архитектура компьютера (1127755) страница 1452019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 145)

Если макрос вызывается два и более раза, метка будет дублироваться, что вызовет ошибку. Поэтому программист должен приписывать каждому вызову в качестве параметра свою метку. Другое решение (оно применяется в МАЯМ) — объявлять метку локальной (ЕОСАЕ), при этом ассемблер автоматически будет порождать другую метку при каждом расширении макроса. В некоторых ассемблерах числовые метки по умолчанию считаются локальными. МАЯМ и большинство других ассемблеров позволяют определять макросы внутри других макросов. Эта особенность очень полезна в сочетании с условным ассемблированием программы.

Обычно один и тот же макрос определятся в обеих ветвях оператора 1Е: М! МАСИО 1Е ИОИО5!ЕЕ ОТ 1б М2 МАСИО ЕИОМ ЕСЕЕ М2 МАСИО ЕИОМ ЕИО1Е ЕИОМ В любом случае макрос М2 будет определен, но определение зависит от того, на какой машине ассемблируется программа: на 16-разрядной или на 32-разрядной. Если М1 не вызывается, макрос М2 вообще не будет определен. Одни макросы могут вызывать другие макросы, в том числе самих себя.

Если макрос рекурсивный, то есть вызывает самого себя, он должен передавать самому себе параметр (который изменяется при каждом расширении), а затем проверять этот параметр и завершать рекурсию, когда параметр достигает определенного значения. В противном случае получится бесконечный цикл, и тогда пользователю придется завершить ассемблирование вручную. Реализация макросов в ассемблере Для реализации макросов ассемблер должен уметь выполнять две функции: сохранять макроопределения и расширять макровызовы.

Мы рассмотрим эти функции по очереди. Ассемблер должен сохранять таблицу всех имен макросов, в которой каждое имя сопровождается указателем на определение этого макроса, чтобы его можно было получить в случае необходимости. В одних ассемблерах предусмотрена отдельная таблица для имен макросов, а другие содержат общую таблицу, в ко- Процесс ассемблирования 571 торой находятся не только имена макросов, но и все машинные команды и директивы.

Когда встречается макроопределение, создается новый элемент таблицы с именем макроса, числом параметров и указателем на другую таблицу, в которой будет храниться тело макроса. В этот момент также создается список формальных параметров. Затем считывается тело макроса и сохраняется в таблице макроопределений. Формальные параметры, которые встречаются в теле цикла, указываются специальным символом.

Ниже приведен пример внутреннего представления макроса СНАМОЕ. В качестве символа возврата каретки используется точка с запятой, а в качестве символа формального параметра — амперсант. МОХ ЕЯХ,ЪР1:МОХ ЕВХ.ЗР2:МОХ $Р2ЕЯХ:МОХ ЬР1.ЕВХ: В таблице макроопределений тело макроса представляет собой просто символьную строку. При ассемблировании во время первого прохода отыскиваются коды операций, а макросы расширяются.

Всякий раз, когда встречается макроопределение, оно сохраняется в таблице макросов. При вызове макроса ассемблер временно приостанавливает чтение входных данных из входного устройства и начинает считывать сохраненное тело макроса. Формальные параметры, извлеченные из тела макроса, заменяются фактическими параметрами, которые предоставляются при вызове. Амперсант перед параметрами позволяет ассемблеру узнавать их.

Процесс ассемблирования В следующих подразделах показано, как работает ассемблер. И хотя ассемблеры разных машин разные, процесс ассемблирования, по сути, один и тот же. Ассемблирование за два прохода Поскольку ассемблерная программа состоит из ряда операторов, на первый взгляд может показаться, что ассемблер сначала должен считать оператор, затем перевести его на машинный язык и, наконец, передать полученный машинный язык в файл, а соответствующий фрагмент листинга — в другой файл. Этот процесс должен повторяться до тех пор, пока вся программа не будет оттранслирована. Однако, к сожалению, такая стратегия не работает.

Рассмотрим ситуацию, где первый оператор — переход к адресу Е. Ассемблер не может ассемблировать оператор, пока не знает адрес Е. Но адрес Е может находиться где-нибудь в конце программы, и тогда ассемблер не сможет найти этот адрес, не прочитав всю программу. Эта проблема называется проблемой ссылки вперед (гогхчагг1 гегегепсе ргоЫет) и заключается она в том, что символ Е используется еще до своего определения (то есть выполняется обращение к символу, определение которого появится позднее).

Ссылки вперед можно обрабатывать двумя способами. Во-первых, ассемблер может прочитать программу дважды. Каждое прочтение исходной программы называется проходом, а транслятор, который читает исходную программу дважды, 572 Глава 7. Уровень ассемблера Первый проход Главная цель первого прохода — построить таблицу символов, содержащую зна- чения всех символов.

Символом может быть либо метка, либо значение, которо- му с помощью директивы приписывается определенное символическое имя: ВОР517Е ЕОО 0192 Приписывая значение символическому имени в поле метки команды, ассемблер должен знать, какой адрес будет иметь эта команда во время выполнения программы. Для этого ассемблер во время ассемблирования сохраняет специальную переменную, называемую счетчиком адресов команд (1пзггпсйоп 1.осавоп Соппгег, 1ЬС).

В начале первого прохода эта переменная устанавливается в 0 и увеличивается после каждой обработанной команды на длину этой команды. В листинге 7.8 дан соответствующий пример для Репг(пщ 4 (в предпоследней колонке поля комментариев показана длина каждой команды, а в последней— накопленное значение счетчика). В данном примере операторы, расположенные до метки МЯМ1Я, занимают 100 байт. Мы не будем давать примеры для БРАКС и МОЕого1а, поскольку различия между языками ассемблера не очень важны, и одного примера вполне достаточно.

Кроме того, как вы уже успели убедиться, ассемблер БРАКС совершенно неудобочитаем. Листинг 7.8. Счетчик МЯР1Я: МОХ ЕЯХ. 1 МОХ ЕВХ. 3 КОВЕЛЯ: МОХ ЕСХ. К 1МОЕ ЕЯХ, ЕЯХ !МОЕ ЕВХ, ЕВХ 1МОЕ ЕСХ. ЕСХ МЯД!!ХИ. ЯОО ЕЯХ, ЕВХ ЯОО ЕЯХ, ЕСХ 5!ЕРНЯНХ 3МР ОВНЕ адресов команд позволяет отслеживать . ЕЯХ = 1 5 . ЕВХ=3 б ; ЕСХ=К б : ЕЯХ = 1 * ! 2 : ЕВХ =3*3 3 ; ЕСХ = К * К 3 : ЕЯХ 1 * ! е 3 * 3 2 : ЕЯХ = 1 * 1 е 3 * 3 е К * К 2 . переход к ОВНЕ 5 адреса команд 100 105 111 117 119 122 125 127 129 называется двухпроходным. На первом проходе собираются и сохраняются в таблице все определения символов, в том числе метки. К тому времени как начнется второй проход, значения символов уже известны, поэтому никакой ссылки вперед не происходит,и каждый оператор можно читать и ассемблировать.

Хотя при этом требуется дополнительный проход по исходной программе, зато такая стратегия относительно проста. При втором подходе ассемблерная программа читается один раз и преобразуется в промежуточную форму, и эта промежуточная форма сохраняется в таблице. Затем совершает второй проход, но уже не по исходной программе, а по таблице. Если физической (или виртуальной) памяти для этого подхода достаточно, экономится время, затрачиваемое на процесс ввода-вывода.

Если при ассемблировании требуется вывести листинг, тогда полностью сохраняются исходные операторы, включая комментарии. Если листинг не нужен, то промежуточную форму можно сократить, оставив только самое существенное. Еще одна цель первого прохода — сохранять все макроопределения и расширять вызовы по мере их появления. Следовательно, в одном проходе происходит и определение символов, и расширение макросов. Процесс ассемблирования 573 При первом проходе в большинстве ассемблеров используются, по крайней мере, 3 таблицы: таблица символических имен, таблица директив и таблица кодов операций.

В случае необходимости используется еще литеральная таблица. Таблица символических имен содержит по одной записи для каждого имени, как показано в табл. 7.4. Символические имена либо являются метками, либо явным образом определяются (например, с помощью директивы Е00). В каждом элементе таблицы символических имен содержится само имя (или указатель на него), его численное значение и иногда некоторая дополнительная информация. Она может включать: + длину поля данных, связанного с символом; + биты перераспределения памяти (которые показывают, изменится ли значение символа, если программа будет загружена не по тому адресу, по которому ее предполагал загрузить ассемблер); + сведения о том, можно ли получить доступ к символу извне процедуры.

Таблица 7.4. Таблица символических имен для программы из листинга 7.8 Символическое имя Значение Прочая информация 100 МАВ1А НОВЕНТА МАНИЛМ ВТЕРНАИУ 125 129 Таблица 7.5. Несколько элементов таблицы кодов операций ассемблера Реп1гогп 4 Шеотнадца- Длина теричный код команды Второй операнд Код Первый операции операнд Кяаоо команды 37 05 1гпгпеп32 А00 А00 О! 19 ге9 гея 'ппгпеп32 АМ0 25 21 АМ0 19 гев ге9 В качестве примера рассмотрим код операции А00. Если первым операндом команды А00 является регистр ЕАХ, вторым — 32-разрядная константа (1мте032), то используется код операции Ох05, а длина команды составляет 5 байт.

Характеристики

Тип файла
DJVU-файл
Размер
13,7 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6476
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее