Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Способы адресации команд процессора Intel 8086
Способы адресации команд определяют правила вычисления адреса команды в сегменте кода, которая должна быть выполнена следующей, при наличии в программе команд передачи управления (условных и безусловных переходов). В зависимости от того, в каком сегменте кода находится требуемая команда и явно или нет указывается её адрес, выделяют следующие режимы адресации команд: 1. Внутрисегментный прямой. Команда, к которой осуществляется переход, находится в том же сегменте кода, что и текущая команда перехода, т.е. при выполнении перехода содержимое регистра CS не изменяется. Эффективный адрес перехода (смещение команды в сегменте кода) вычисляется как сумма текущего содержимого указателя команд IP и 8- или 16- битного относительного смещения (длины пропускаемых команд). Данный режим допустим в условных и безусловных переходах. Например: … cmp ah, al; Сравнивается содержимое регистров ah и al jne met; Если содержимое регистров не равно, ; выполняется переход на команду с адресом met inc al; Увеличение содержимого регистра al на 1 met: inc ah; Увеличение содержимого регистра ah на 1 … Если содержимое регистров ah и al не равно (команда jne), то осуществляется переход к команде с меткой met путём добавления к текущему содержимому регистра IP длины пропускаемой команды (inc al). 2. Межсегментный прямой. Команда, к которой осуществляется переход, находится в другом сегменте кода по отношению к текущей команде перехода, т.е. при выполнении перехода изменяется содержимое регистра CS и регистра IP. В команде указывается пара: сегмент и смещение. Начальный адрес нового сегмента кода загружается в сегментный регистр CS, а смещение – в регистр IP. Данный режим допустим только в командах безусловного перехода. В качестве примера рассмотрим программу, состоящую из двух сегментов кода. c_s1 segment assume cs:c_s1 m1: mov ah,4 add ah,7 jmp c _ s: m 2; Прямой межсегментный переход в сегмент c _ s c_s1 ends c_s segment assume cs:c_s begin: jmp c _ s 1: m 1; Прямой межсегментный переход в сегмент c _ s 1 m2: mov ah,4ch int 21h c_s ends end begin Сегмент кода c _ s является главным (в нём содержится начало и конец программы) и с него начинается выполнение программы. Выделенные жирным шрифтом команды осуществляют прямой межсегментный переход. При этом адрес перехода, указанный в этих командах, является четырёхбайтовым (два старшие байта указывают начальный адрес сегмента, два младшие байта – смещение команды в этом сегменте). При выполнении первого перехода в регистр CS записывается начальный адрес сегмента c _ s 1, а в регистр IP – адрес команды в этом сегменте кода (m 1). Второй межсегментный переход выполняется аналогично.
Таким образом, при прямой адресации в адресном поле команды содержится адрес перехода – адрес, по которому размещается следующая выполняемая команда. 3. Внутрисегментный косвенный. В этом случае двухбайтовый адрес перехода размещается в ячейках памяти по некоторому адресу (смещению) в сегменте данных. В команде перехода это смещение указывается в регистре процессора или ячейке памяти с помощью любого режима адресации данных, кроме непосредственного. Содержимое указателя команд IP заменяется соответствующим содержимым регистра или ячейки памяти. Данный способ допустим только в командах безусловного перехода. Например: d_s segment adr dw met; По адресу adr указан адрес команды, ; на которую должен быть выполнен переход d_s ends c_s segment assume ds:d_s, cs:c_s begin: mov ax, d_s mov ds, ax add ah, al; Складывается содержимое регистров ah и al jmp adr; Выполняется переход на команду, адрес которой ; указан по смещению adr в сегменте данных inc al; Увеличение содержимого регистра al на 1 met: inc ah; Увеличение содержимого регистра ah на 1 mov ah, 4ch int 21h c_s ens end begin В приведённом выше примере адрес перехода указан в ячейке памяти по смещению adr относительно начала сегмента данных. В команде безусловного перехода используется прямой режим адресации данных для указания местоположения адреса перехода, т.е. адрес адреса. 4. Межсегментный косвенный. В этом режиме четырёхбайтовый адрес перехода размещается в смежных ячейках памяти по некоторому адресу (смещению) в сегменте данных. В команде перехода это смещение указывается в регистре процессора или ячейке памяти с помощью любого режима адресации данных, кроме непосредственного и регистрового. Содержимое регистров CS и IP заменяется содержимым двух смежных слов памяти, хранящихся по этому смещению в сегменте данных. Младшее слово загружается в регистр IP, старшее – в регистр CS. Данный режим допустим только в командах безусловного перехода.
В качестве примера рассмотрим программу, состоящую из двух сегментов кода и одного сегмента данных. В сегменте данных по адресу a указан адрес перехода в виде двойного машинного слова. d_s segment a dd c _ s 1: m 1; По адресу a указан адрес перехода в сегмент c _ s 1 ; по смещению m 1 d_s ends c_s1 segment assume cs:c_s1 m1: mov ah,4 add ah,7 jmp c_s:m2 c_s1 ends c_s segment assume ds:d_s, cs:c_s begin: lea bp, a; В регистр bp загружается адрес ячейки a jmp dword ptr [bp]; Выполняется безусловный межсегментный ; переход по адресу, указанному в регистре bp m2: mov ah,4ch int 21h c_s ends end begin Перед выполнением команды перехода в регистр BP загружается адрес ячейки a, по которому хранится адрес перехода в сегмент c _ s 1 на команду с адресом m 1. В команде перехода с помощью регистра BP указывается местонахождение адреса перехода в виде двойного машинного слова с использованием косвенной регистровой адресации данных. Рассмотренные способы адресации команд используются практически во всех системах команд, расширяя или сокращая список команд конкретного процессора.
|
||||||
Последнее изменение этой страницы: 2020-12-09; просмотров: 138; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.150.80 (0.007 с.) |