Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Операнды в памяти

Регистровые операнды

Адресация операндов

Большая часть инструкций имеет один или два явно заданных операнда. Операнды некоторых инструкций являются неявными, т.е. прямо в команде не указываются. Наконец, существуют инструкции, вообще не имеющие операндов.

Явно заданные операнды делятся на следующие группы:

– регистровые операнды;

– операнды в памяти;

– непосредственные операнды;

– адреса переходов.

Инструкции обработки строк, управления и вспомогательные либо имеют неявные операнды, либо вообще не имеют операндов. Большая часть команд других категорий использует явно заданные операнды.

Эффективное использование системы команд микропроцессора 8086 затрудняется “неортогональностью” применяемых способов адресации. Например, некоторые инструкции не допускают использования операндов в памяти или накладывают на их применение те или иные ограничения; в других невозможно использование непосредственных операндов; третьи используют в качестве операнда только один определённый регистр и не допускают применения других и т.д. В этом отношении разработки фирмы Intel существенно проигрывают появившимся за десятилетие до них мини-ЭВМ PDP-11 фирмы DEC, система команд которых намного удобнее и, несмотря на меньший набор команд, позволяет создавать значительно более эффективные программы.

В командах обработки данных регистры общего назначения могут использоваться для хранения значений операндов. В этом случае говорят о регистровой адресации. Например, команда MOV AX,BX пересылает содержимое регистра BX в регистр AX.

Сегментные регистры могут использоваться в качестве операндов только в некоторых командах пересылки, а именно в инструкциях MOV, PUSH и POP. Сегментный регистр CS может служит источником в инструкции MOV, но не может служить приёмником. Он не может также использоваться в команде POP.

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

Как уже отмечалось в подразделе Ошибка! Источник ссылки не найден.Ошибка! Источник ссылки не найден. ”, адрес памяти складывается из селектора сегмента и смещения. Смещение операнда в соответствующем сегменте называется эффективным адресом и вычисляется в процессе выполнения инструкции.

Для определения физического адреса явно заданного операнда, располагающегося в памяти, почти во всех случаях используется селектор сегмента, содержащийся в регистре сегмента данных DS. Исключением является лишь случай обращения к операнду, при вычислении эффективного адреса (смещения) которого используется содержимое регистра BP. В этом случае предполагается, что операнд располагается в сегменте стека, и используется селектор сегмента, хранящийся в регистре SS. В любом случае возможно использование префикса замены сегмента, явным образом определяющего, какой сегментный регистр содержит селектор, который должен использоваться при формировании физического адреса. На языке ассемблера префикс замены сегмента указывается с помощью мнемоники соответствующего сегментного регистра, предшествующей эффективному адресу операнда и отделяемой от него двоеточием. Например, в первой из следующих инструкций обращение осуществляется к сегменту данных, поскольку префикс замены сегмента не используется, а регистр BP в формировании эффективного адреса не участвует; во второй инструкции операнд находится в сегменте кода, поскольку сегмент задан явно. Эффективный адрес в обоих случаях является суммой содержимого регистра BX и константы 10h (называемой отклонением):

MOV 10h [BX], AX

MOV CS:10h [BX], AX

Эффективный адрес формируется суммированием содержимого одного или двух регистров общего назначения и 8- или 16-разрядного отклонения (константы, задаваемой кодом команды). Эффективный адрес всегда имеет размер 16 бит; перенос из старшего разряда, если он возникает, игнорируется.

Первым из регистров, участвующих в формировании эффективного адреса, может быть регистр BX или BP, вторым – SI или DI. Другие регистры общего назначения в формировании эффективного адреса применяться не могут.

С любым из регистров или их комбинаций может использоваться 8- или 16-разрядное отклонение; отклонение может также отсутствовать. Исключением является случай использования регистра BP без регистра SI или DI: в такой ситуации всегда должно применяться 8- или 16-разрядное отклонение. Кроме того, эффективный адрес может быть задан 16-разрядным отклонением без использования каких-либо регистров.

На языке ассемблера регистр, участвующий в формировании эффективного адреса, заключается в квадратные скобки. Если применяются два регистра, то либо каждый из них заключается в свои собственные скобки, либо они находятся внутри одних скобок и соединяются там знаком “+”. Например, запись [BX] [SI] эквивалентна записи [BX+SI] и означает, что эффективный адрес является суммой содержимого регистров BX и SI.

Если эффективный адрес состоит из одного отклонения и это отклонение задаётся в числовом виде, а не как метка, перед ним обязательно должно стоять указание WORD PTR или BYTE PTR в зависимости от того, имеет ли этот операнд размер слово или байт. Это требование связано с тем, что числовая величина будет воспринята транслятором языка ассемблера не как отклонение, а как непосредственный операнд (см. следующий подраздел). Таким образом, для занесения содержимого регистра BH в ячейку памяти со смещением 100h в сегменте данных необходимо использовать следующую инструкцию:

MOV BYTE PTR 100h, BH

Если адресуемая ячейка памяти находится не в сегменте данных, указание BYTE PTR или WORD PTR не требуется, поскольку перед отклонением будет указан префикс замены сегмента, например:

MOV ES:100h, BH

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

Способ формирования эффективного адреса определяется байтом ModRegR/M кода команды. Формат этого байта и назначение его полей будет описано ниже, в подразделе 0 “Формат кода команды”. Здесь отметим, что двухразрядное поле MOD определяет наличие и размер отклонения, а трёхразрядное поле R/M – используемую комбинацию регистров. Поле Reg в формировании эффективного адреса не участвует.

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


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


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



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




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