Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Особенность формирования физического адреса операндов адрес_источника и адрес_приемника.
Цепочка-источник, адресуемая операндом адрес_источника, может находиться в текущем сегменте данных, определяемом регистром ds. Цепочка-приемник, адресуемая операндом адрес_приемника, должна быть в дополнительном сегменте данных, адресуемом сегментным регистром еs. Допускается замена (с помощью префикса замены сегмента) только регистра ds, регистр es подменять нельзя. Вторые части адресов – смещения цепочек должны находится: - для цепочки-источника это регистр esi/si (Source Index register — индексный регистр источника); - для цепочки-получателя это регистр edi/di (Destination Index register – индексный регистр приемника). Таким образом, полные физические адреса для операндов цепочечных команд следующие: адрес__источника – пара ds: esi/si; адрес_приемника – пара es: edi/di.
Команды lds и les позволяют получить полный указатель (сегмент: смещение) на ячейку памяти. Применение их очень удобно в силу жесткой регламентации использования регистров для адресации операндов источника и приемника в цепочечных командах. Семь групп команд, реализующих цепочечные операции-примитивы, имеют похожий но структуре набор команд. В каждом из этих наборов присутствуют одна команда с явным указанием операндов и три команды, не имеющие операндов. На самом деле набор команд микропроцессора имеет соответствующие машинные команды только для цепочечных команд ассемблера без операндов. Команды с операндами транслятор ассемблера использует только для определения типов операндов. После того как выяснен тип элементов цепочек по их описанию в памяти, генерируется одна из трех машинных команд для каждой из цепочечных операций. По этой причине все регистры, содержащие адреса цепочек, должны быть инициализированы заранее, в том числе и для команд, допускающих явное указание операндов. В силу того, что цепочки адресуются однозначно, нет особого смысла применять команды с операндами. Главное — правильная загрузка регистров указателями.
Есть две возможности задания направление обработки цепочки: - от начала цепочки к её концу, то сеть в направлении возрастания адресов; - от конца цепочки к началу, то есть в направлении убывания адресов. Направление определяется значением флага направления df (Direction Flag) в регистре eflags/flags: - если df=0, то значения индексных регистров esi/si и edi/di будут автоматически увеличиваться (операция инкремента) цепочечными командами, то есть обработка будет осуществляться в направлении возрастания адресов; - если df=1, то значения индексных регистров esi/si и edi/di будут автоматически уменьшаться (операция декремента) цепочечными командами, то есть обработка будет идти в направлении убывания адресов. Состоянием флага df можно управлять с помощью двух команд, не имеющих операндов: сld (Clear Direction Flag) – очистить флаг направления. Команда сбрасывает флаг направления df в 0. std (Set Direction Flag) – установить флаг направления. Команда устанавливает флаг направления df в 1.
|