Главная » Просмотр файлов » Максимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005)

Максимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005) (1186253), страница 78

Файл №1186253 Максимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005) (Максимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005)) 78 страницаМаксимов Н.В., Партыка Т.Л., Попов И.И. Архитектура ЭВМ и вычислительных систем (2005) (1186253) страница 782020-08-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В нашем примере эта директива определяет, чтовсе ссылки на сегмент CODE должны (если явно не указан сегментный регистр) сегментироваться по регистру CS, все ссылки на DT1 —по регистру DS, а все ссылки на DT2 — по регистру ES.Встретив в тексте программы ссылку на какое-либо имя (например, на имя с в команде MOV AX, с), ассемблер определяет, в какомпрограммном сегменте оно описано (у нас —- в DT2), затем по информации из директивы ASSUME узнает, какой сегментный регистрпоставлен в соответствие этому сегменту (у нас — это ES), и далееобразует адресную пару из данного регистра и смещения имени(у нас — ES:0), которую и записывает в формируемую машиннуюкоманду.

При этом ассемблер учитывает используемое в 180X86 соглашение о сегментных регистрах по умолчанию: если в адреснойпаре, построенной им самим или явно заданной в программе, сегментный регистр совпадает с регистром по умолчанию, то в машинную команду заносится лишь смещение. Если, скажем, в нашемпримере встретится командаMOV С Х , В ,тогда по имени В ассемблер построит пару DS : 1, но поскольку операнд-адрес команды MOV по умолчанию сегментируется по региструDS, то записывать этот регистр в машинную команду излишне и ассемблер записывает в нее только смещение 1.Таким образом, директива ASSUME избавляет программистов отнеобходимости выписывать полные адресные пары не только тогда,когда используются сегментные регистры по умолчанию (как в случае с именем в), но тогда, когда в машинной команде нужно былобы явно указать сегментный регистр (как в случае с именем с).В MASM сегментный регистр в ссылке на имя требуется указыватьлишь тогда, когда имя должно по каким-либо причинам сегментироваться по регистру, отличному от того, что поставлен в соответствие всему сегменту, в котором это имя описано.400Глава 4.

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

Правда, в обоих случаях можно избежать ошибки, но для этого в ссылках необходимоявно указывать сегментный регистр.Н а ч а л ь н а я з а г р у з к а с е г м е н т н ы х р е г и с т р о в . Директива ASSUME сообщает ассемблеру о том, по каким регистрам ондолжен сегментировать имена, из каких сегментов, и гарантирует,что в этих регистрах будут находиться начальные адреса этих сегментов.

Однако загрузку этих адресов в регистры сама директива неосуществляет.Сделать такую загрузку — обязанность самой программы, с загрузки сегментных регистров должно начинаться выполнение программы. Делается это так.Поскольку в 180X86 нет команды пересылки непосредственногооперанда в сегментный регистр (а имя, т. е. начало, сегмента — этонепосредственный операнд), то такую загрузку приходится делатьчерез какой-то другой, несегментный, регистр (например, АХ):MOV AX,DT1 ;AX := начало сегмента DT1MOV DS,AX ;DS := AXАналогично загружается и регистр ES.Загружать регистр cs в начале программы не надо: он, как исчетчик команд IP, загружается операционной системой перед тем,как начинается выполнение программы (иначе нельзя было бы начать ее выполнение).

Что же касается регистра SS, используемогодля работы со стеком, то он может быть загружен так же, как и регистры DS и ES, однако в MASM предусмотрена возможность загрузки этого регистра еще до выполнения программы.С с ы л к и в п е р е д . Встречая в символьной команде ссылку назад — имя, которое описано в тексте программы до этой команды,ассемблер уже имеет необходимую информацию об имени и потомуможет правильно оттранслировать эту команду.

Но если в командевстретится ссылка вперед, т. е. имя, которое не было описано до4.3. Режимы процессора. Система команд процессоров 180x86...401этой команды и которое, наверное, будет описано позже, то ассемблер в большинстве случаев не сможет правильно оттранслироватьэту команду. Например, не зная, в каком программном сегменте будет описано это имя, ассемблер не может определить, по какомусегментному регистру надо сегментировать имя, и потому не можетопределить, надо или нет размещать перед соответствующей машинной командой префикс замены сегмента и, если надо, то какойименно.В подобной ситуации ассемблер действует следующим образом:• если в команде встретилась ссылка вперед, то он делает некоторое предположение относительно этого имени и уже на основе этого предположения формирует машинную команду;• если затем (когда встретится описание имени) окажется, чтоданное предположение было неверным, тогда ассемблер пытается исправить сформированную ранее машинную команду.Однако это не всегда удается: если правильная машинная команда должна занимать больше места, чем машинная команда, построенная на основе предположения (например, передкомандой надо на самом деле вставить префикс замены сегмента), тогда ассемблер фиксирует ошибку (как правило, этоошибка номер 6: Phase error between passes).Какие же предположения делает ассемблер, встречая ссылкувперед?Во всех командах, кроме команд перехода, ассемблер предполагает, что имя будет описано в сегменте данных и потому сегментируется по регистру DS.

Это следует учитывать при составлении программы: если в команде встречается ссылка вперед на имя, котороеописано в сегменте, на начало которого указывает сегментный регистр, отличный от DS, то перед таким именем автор программыдолжен написать соответствующий префикс. Пример:CODE SEGMENTASSUME CS:CODEX DW ?BEG: MOV AX,X /здесь вместо CS:X можно записать простоXMOV CS:Y,AX /здесь обязательно надо записать CS:YY DW ?CODE ENDSПереходы. В систему команд 180X86 входит обычный для ЭВМнабор команд перехода: безусловные и условные переходы, перехо-402Глава 4. Персональные компьютерыды с возвратами и др.

Однако в 180X86 эти команды имеют некоторые особенности, которые здесь и рассматриваются.Абсолютный адрес команды, которая должна быть выполненаследующей,-определяется парой CS:IP, поэтому выполнение перехода означает изменение этих регистров, обоих или только одного (IP):• если изменяется только счетчик команд IP, то такой переходназывается внутрисегментным или близким (управление остается в том же сегменте команд);• если меняются оба регистра CS и IP, то это межсегментный,или дальний, переход (начинают выполняться команды из другого сегмента команд).По способу изменения счетчика команд переходы делятся наабсолютные и относительные:• если в команде перехода указан адрес (смещение) той команды, которой надо передать управление, то это абсолютный переход;• если в команде указана величина (сдвиг), которую надо добавить к текущему значению регистра IP, чтобы получился адрес перехода, и тогда это будет относительный переход, приэтом сдвиг может быть положительным и отрицательным, такчто возможен переход вперед и назад.По величине сдвига относительные переходы делятся на короткие (сдвиг задается байтом) и длинные (сдвиг-слово).Абсолютные переходы делятся на прямые и косвенные:• при прямом переходе адрес перехода задается в самой команде;• при косвенном — в команде указывается регистр или ячейкапамяти, в котором (которой) находится адрес перехода.Б е з у с л о в н ы е п е р е х о д ы .

В MASM все команды безусловного перехода обозначаются одинаково:JMP opно в зависимости от типа операнда ассемблер формирует разныемашинные команды.1. Внутрисегментный относительный короткий переход.JMP i8 ( I P : = I P + i 8 )Здесь 18 обозначает непосредственный операнд размером в1 байт, который интерпретируется как знаковое целое от -128 до127. Команда прибавляет это число к текущему значению регистра4.3. Режимы процессора. Система команд процессоров 180x86...403IP, получая в нем адрес (смещение) той команды, которая должнабыть выполнена следующей.

Регистр CS при этом не меняется.Необходимо учитывать следующую особенность регистра IP.Выполнение любой команды начинается с того, что в IP заноситсяадрес следующей за ней команды, и только затем выполняется собственно команда. Для команды относительного перехода это означает, что операнд 18 прибавляется не к адресу этой команды, а кадресу команды, следующей за ней, поэтому, к примеру, командаJMP 0 — это переход на следующую команду программы.При написании машинной программы сдвиги для относительных переходов приходится вычислять вручную, однако MASM избавляет от этого неприятного занятия: в MASM в командах относительного перехода всегда указывается метка той команды, на которую надо передать управление, и ассемблер сам вычисляет сдвиг,который он и записывает в машинную команду.

Отсюда следует,что в MASM команда перехода по метке воспринимается не как абсолютный переход, а как относительный.По короткому переходу можно передать управление только наближайшие команды программы, отстоящие от команды, следующей за командой перехода, до 128 байтов назад или до 127 байтоввперед.2. Внутрисегментный относительный длинный переход используется для перехода на более дальние команды.JMP 116 (1Р:=1Р+116)Здесь 116 обозначает непосредственный операнд размером вслово, который рассматривается как знаковое целое от -32 768 до32 767. Этот переход аналогичен короткому переходу.Отметим, что, встретив команду перехода с меткой, которойбыла помечена одна из предыдущих (по тексту) команд программы,ассемблер вычисляет разность между адресом этой метки и адресомкоманды перехода и по этому сдвигу определяет, какую машиннуюкоманду относительного перехода (короткую или длинную) надосформировать.

Но если метка еще не встречалась в тексте программы, т. е. происходит переход вперед, тогда ассемблер, не зная ещеадреса метки, не может определить, какую именно машинную команду относительного перехода формировать, поэтому он на всякийслучай выбирает команду длинного перехода. Однако эта машиннаякоманда занимает 3 байта, тогда как команда короткого перехода —2 байта, и если автор программы на MASM стремится к экономиипамяти и знает заранее, что переход вперед будет на близкую метку,404Глава 4. Персональные компьютерыто он должен сообщить об этом ассемблеру, чтобы тот сформировалкоманду короткого перехода.

Такое указание делается с помощьюоператора SHORT:JMP SHORT LДля переходов назад оператор SHORT не нужен: уже зная адресметки, ассемблер сам определит вид команды относительного перехода.3. Внутрисегментный абсолютный косвенный переход.JMP r l 6 ( I P : = [ r ] ) илиJMP m!6 ( I P : = [ m l 6 ] )Здесь г!6 обозначает любой 16-битовый регистр общего назначения, a ml 6 — адрес слова памяти.

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

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

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