Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Адреса переходов

Непосредственные операнды

Непосредственный операнд – это константа, задаваемая кодом команды. Он может иметь длину 1 или 2 байта в зависимости от разрядности выполняемой операции. Естественно, непосредственный операнд может быть только источником, но не приёмником результата.

Если приёмником в инструкции, использующей непосредственный операнд, является ячейка памяти, а не регистр общего назначения, может потребоваться использование указания BYTE PTR или WORD PTR. Оно применяется в том случае, когда транслятор с языка ассемблера не может самостоятельно правильно определить разрядность операции. Например, в следующем примере первая команда обнулит байт памяти по смещению 1000h, а вторая – слово по тому же адресу (т.е. байты со смещениями 1000h и 1001h):

MOV BYTE PTR 1000h, 0

MOV WORD PTR 1000h, 0

Различают переходы ближние (near, внутрисегментные) и дальние (far, межсегментные). Ближний переход осуществляется всегда в пределах текущего сегмента кода, т.е. содержимое регистра CS не изменяется. Дальний переход осуществляется в другой сегмент, т.е. при его выполняется изменяется содержимое не только указателя инструкции IP, но и регистра сегмента кода CS.

Инструкции безусловного перехода JMP и перехода к подпрограмме CALL позволяют выполнять как ближние, так и дальние переходы. При ближних переходах используется относительная или косвенная адресация, при дальних – прямая или косвенная. Инструкции условных переходов и циклов осуществляют только ближние переходы, используя относительную адресацию.

При относительной адресации код команды содержит в своём составе 8- или 16-разрядное отклонение.

Если переход происходит (т.е. если использована инструкция CALL или JMP либо если в инструкции условного перехода или цикла условие перехода соблюдается), отклонение складывается с адресом команды, расположенной сразу за данной инструкцией перехода, и полученная сумма заносится в регистр указателя инструкции IP. Значение селектора сегмента кода, находящееся в регистре CS, не изменяется. Таким образом, происходит переход относительно адреса команды, расположенной за инструкцией перехода, откуда данный вид адресации и получил своё название.

Команда JMP позволяет использовать 8- и 16-разрядные отклонения, что позволяет осуществлять переход либо в пределах от –128 до +127, либо от –65536 до –65535 байтов относительно следующей инструкции в пределах одного и того же сегмента. Первые переходы носят название коротких, вторые – длинных. Команда CALL использует только 16-разрядные отклонения. Инструкции условных переходов и циклов используют 8-разрядные отклонения. Таким образом, расстояние условного перехода оказывается весьма ограниченным, что иногда приводит к повышенному расходу памяти из-за необходимости использования пары команд – условного и безусловного перехода.

Часто отклонение, используемое при относительной адресации, называют смещением. Однако это может привести к путанице, поскольку термин “смещение” при программировании для микропроцессора 8086 используется в первую очередь для обозначения одной из двух частей логического адреса (см. подраздел Ошибка! Источник ссылки не найден.Ошибка! Источник ссылки не найден. ”). Термин “отклонение”, правда, тоже используется – для обозначения одного из компонентов эффективного адреса операнда, расположенного в памяти (см. параграф “Операнды в памяти” этого подраздела), однако значение этого термина оказывается в данном случае ближе к относительной адресации, поскольку и в том, и в другом случае отклонение фактически показывает, на сколько байтов в ту или иную сторону отстоит адресуемая ячейка от базового адреса, т.е. адреса следующей инструкции в команде относительного перехода или суммы содержимого регистров, используемых при формировании эффективного адреса операнда.

При прямой адресации код команды содержит полный адрес следующей выполняемой команды в формате “сегмент: смещение”, причём сначала располагается смещение, а потом – селектор сегмента. Прямая адресация используется инструкциями JMP и CALL, позволяя передать им управление любой команде в памяти вычислительной машины.

Прямая адресация получила своё название в связи с тем, что в коде инструкции находится сам адрес перехода.

При косвенной адресации, доступной только инструкциям CALL и JMP, возможно выполнение как ближних, так и дальних переходов. В коде команды задаётся либо регистровый операнд (только для ближнего перехода), либо операнд в памяти (для ближнего или дальнего перехода), причём способ определения этого операнда не отличается от принятого для команд обработки данных (см. параграфы “Регистровые операнды” и “Операнды в памяти” этого подраздела).

Если выполняется ближний переход, то операнд является новым значением указателя инструкции IP, т.е. определяет смещение следующей выполняемой команды в текущем сегменте кода. Это смещение находится либо в регистре общего назначения (регистровый операнд), либо в слове памяти по заданному адресу (операнд в памяти).

Если выполняется дальний переход, адрес следующей инструкции занимает два слова памяти: в первом хранится смещение, а во втором – селектор сегмента, которые загружаются соответственно в регистры IP и CS. Сама команда перехода задаёт адрес первого их этих слов (операнд в памяти).

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

<== предыдущая лекция | следующая лекция ==>
Операнды в памяти | Формат кода команды
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 962; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.