русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

OUT port ;portA


Дата добавления: 2015-08-14; просмотров: 1216; Нарушение авторских прав


Иногда для этой цели применяют резервные имена портов:

ANL Рn ;PnA AND Pn, n = 0—7

Очень часто прямая адресация портов является единственным способом доступа к пространству ВВ. Встречается также вариант прямой короткой адресации портов, например, в системе команд К1810ВМ86.

В некоторых случаях источником данных служит сама команда (рис. 1.19, г). Тогда говорят о непосредственной адресации (prt = #data), которая позволяет задавать константы как часть команды:

MOV reg, #data ;regdata

ADD reg, #data ;regreg + data

Для более эффективного кодирования операций с часто используемым непосредственным операндом—литералом—обычно вводят специальные коды с неявным определением данных:

CLR reg ;reg0

INC reg ;regreg + 1

или варианты короткой непосредственной адресации:

INC reg, #sdata ;regreg + sdata

Здесь sdata может восприниматься как целое без знака или как целое со знаком. В любом случае перед выполнением операции sdata расширяется с учетом знака до полноразмерного операнда. Основной недостаток непосредственной адресацией состоит в отсутствии возможности манипуляции данными без модификации объектного кода, что привело к созданию ряда способов с вычисляемым адресом. Простейшим среди них является косвенная адресация (ptr = @addr или (addr)), схема выполнения которой показана на рис. 1.20, а. В командах с данным типом адресации используется не прямой адрес, а косвенный, указывающий на ячейку памяти с адресом операнда. Манипуляция исполнительным адресом сводится к изменению содержимого этой ячейки памяти и, следовательно, никак не связана с объектным кодом. К недостаткам косвенной адресации следует отнести двойное обращение к основной памяти и большую разрядность поля, отводимого под косвенный адрес.

Рис. 1.20. Способы адресации данных: a—косвенная; б—косвенная регистровая; в— косвенная регистровая адресация портов Рис. 1.21. Способы адресации с автомодификацией: а—автоинкрементная; б—автодекрементная; в—преавтоинкрементная; г—поставтодекрементная

От вышеуказанных недостатков косвенной адресации свободен ее вариант (рис. 1.20, б), в котором в качестве области, содержащей прямой адрес, используется не основная память данных, а регистровая. При этом все другие свойства, характерные для косвенной адресации, сохраняются, что объясняет широкое применение регистровой косвенной адресации (ptr = @reg или (reg)) практически во всех МС.



Для хранения прямого адреса требуется регистр достаточной длины. В ряде МС аккумуляторного типа для этой цели предусматриваются специальные адресные регистры. В МС с РОН регистры данных при необходимости объединяются в пары для образования адресных регистров. Примерами команд с косвенной регистровой адресацией являются

CLR @reg ;(reg)0

INC @reg ;(reg)(reg) + 1

Пример неявного кодирования данного способа адресации можно привести из системы команд МП КР580ВМ80:

LDAX В ;А(ВС)

STAX D ;(DE)A

Косвенная регистровая адресация портов (рtr = @reg или (reg)) через регистр может быть полезна при доступе к пространству IOSEG (рис. 1.20, в). Благодаря этому удается использовать одну и ту же программу для ВВ через порт, адрес которого заранее неизвестен и может меняться в процессе работы МС. Примеры команд ВВ:

IN @reg ;AI0SEG(reg)

OUT @reg ;IOSEG(reg)A

Для пошагового просмотра таблиц и списков удобно применять косвенную регистровую адресацию. Настройка на следующий адрес элемента выполняется программным способом с помощью операций, манипулирующих с адресным регистром:

LOOP: MOVB ptr, @reg ;Поиск байта

INC reg ;data в строке

СМРВ ptr, #data ;сравнение байтов, начиная с

JNZ LOOP ;адреса (reg)

Очень часто данные располагаются в памяти последовательно (очереди, последовательности, файлы и т. д.). Для повышения эффективности работы со структурами такого типа используются автоинкрементный и автодекрементный способы адресации (ptr = (reg)+, ptr = –(reg)).

При автоинкрементном способе (рис. 1.21, а) обеспечивается вычисление исполнительного адреса, как и при косвенном, но с последующим автоматическим увеличением содержимого адресного регистра на длину операнда, что позволяет подготовиться к выборке следующего элемента данных:

MOVB dst, (reg)+ ;dst(reg), regreg + 1

При автодекрементной адресации (рис. 1.21, б) содержимое адресного регистра сначала уменьшается на длину операнда, а затем используется как исполнительный адрес:

MOVB dst, –(reg) ;regreg – 1, dst(reg)

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

Комбинирование автоинкрементных способов адресации позволяет организовать стеки с адресным регистром в качестве SP. Для загрузки данных в стек применяется автодекрементная адресация:

MOV –(reg), src

для выталкивания—автоинкрементная:

MOV dst, (reg)+

Доступ к вершине стека TOS осуществляется с помощью косвенной регистровой адресации:

MOV dst, @reg

Указатель стека reg всегда указывает на вершину стека, который заполняется в сторону уменьшения адресов. Это соответствует принятой ранее стандартной организации стека.

Неявно заданный способ адресации с модификацией реализуется в операциях со стеком:

PUSH src ;–(SP)src

POP dst ;dst(SP)+

CALL src ;–(SP)PCsrc

RET ;PC(SP)+

CALL reg, src ;–(SP)regPCsrc

RET reg ;PCreg(SP)+

B этом случае его называют стековым.

Процедура выборки программной последовательности также использует неявно заданную автоинкрементную адресацию по PC. Действительно, после считывания очередного элемента объектного кода указатель PC автоматически увеличивает свое содержимое на 1 или 2, в зависимости от длины программного элемента.

Непосредственную адресацию данных можно интерпретировать как автоинкрементную по PC. Например, программная последовательность

MOVB reg, (PC)+

DB data

эквивалентна команде с литералом

MOVB reg, #data

Здесь DB (Define Byte) не имя какой-либо машинной команды, а символическое обозначение директивы размещения последовательности байтов данных. Эти данные должны быть указаны следом за директивой и при необходимости отделяются друг от друга запятыми. В нашем случае последовательность содержит один байт данных. После приема команды

MOVB reg, (PC)+

указатель PC адресует байт data. После выполнения операции и следующей за ней автоматической модификации он будет указывать на начало новой команды.

Возможны два варианта определения автоинкрементной адресации (ptr = +(reg) и ptr = (reg)–), которые называют преавтоинкрементной и поставтодекрементной соответственно (рис. 1.21, в, г). Их совместное использование также обеспечивает организацию стека с указателем, адресующим TOS. Однако растет такой стек в сторону увеличения адресов.

В общем случае каждой паре автомодификации соответствуют по два типа стека. Эти стеки характеризуются следующими операциями доступа:

Операция PUSH src POP src

Стандартный стек MOV –(reg), src MOV dst, (reg)+

Стек типа 1 MOV (reg)+, src MOV dst, –(reg)

Стек типа 2 MOV +(reg), src MOV dst, (reg)–

Стек типа 3 MOV (reg)–, src MOV dst, +(reg)

В отличие от стандартного стека и стека типа 2 указатель reg в двух новых стеках адресует первую свободную ячейку над TOS. При этом стек типа 1 растет в сторону уменьшения адреса, а стек типа 3 в сторону увеличения. Согласованность операций доступа стандартного стека с операцией выборки объектного кода, а также прямая адресуемость TOS по содержимому SP определили его широкое использование в качестве типового стека МС.

Комбинирование адресации с автомодификацией и косвенной позволяет построить более универсальные способы доступа по сравнению с рассмотренными выше—косвенную автоинкрементную и автодекрементную адресацию (ptr = @(reg)+, ptr = @–(reg)). Четыре способа представлены на рис. 1.22. В их основу положен стандартный вариант автомодификации. Достаточно широкое распространение находит лишь первая пара (рис. 1.22, а, б), которая характеризуется однократным обращением к памяти данных. Вторая пара способов (рис. 1.22, в, г) требует до трех обращений к памяти, что существенно снижает их практическую ценность.

Рис. 1.22. Способы комбинированной адресации: а—косвенная автоинкрементная; б—косвенная автодекрементная; в—прекосвенная автоинкрементная; г—прекосвенная автодекрементная Рис. 1.23. Двухкомпонентные способы адресации: а—по базе ; б—индексная; в—относительная; г—двухкомпонентная косвенная регистровая

Многокомпонентные способы адресации. При многокомпонентных способах адресации для построения исполнительного адреса используется несколько источников адресной информации, содержимое которых суммируется. Каждое слагаемое—это прямо или косвенно заданный компонент (возможен вариант компонента с автомодификацией). В двухкомпонентном случае практический интерес представляют следующие комбинации способов адресации: прямая + косвенная регистровая, косвенная регистровая + косвенная регистровая, прямая + автоинкрементная. Наибольшее распространение нашла первая комбинация.

В случае адресации по базе (ptr = (breg).index) исполнительный адрес формируется по схеме, приведенной на рис. 1.23, а, когда

ea = (breg) + index, MOD 2|ea|

Адресация по базе необходима для организации доступа к конкретным полям блока данных, адрес которого может быть неизвестен во время создания программы. Например, блок данных динамически создается в разных областях памяти или его размещение определяется в момент загрузки. В такой ситуации переменный адрес начала блока (базу) удобно располагать в регистре breg (базовом), а известный относительный адрес элемента (индекс) хранить непосредственно в команде. Допустим и вариант короткого индекса, уменьшающий длину объектного кода: |index| ≤ |ea|. При этом индекс может восприниматься как целое либо без знака (offset), либо со знаком (disp). Во втором случае появляется возможность адресоваться относительно базы в обе стороны. При необходимости для выполнения операции суммирования (breg) + index производится расширение знака короткоразмерного индекса до полного размера.

Адресация по базе используется: для передачи данных в блоке параметров (базовый регистр служит указателем блока); для передачи данных через стек (базовый регистр выполняет роль указателя кадра FP); для передачи данных и организации переходов в программах, не зависящих от места их размещения в памяти (базовый регистр указывает на начало программы); для доступа к конкретному полю блока в связном списке (базовый регистр применяется для адресации элементов списка) или к одному и тому же полю динамически созданной записи (базовый регистр указывает на начало записи).

Схема вычисления исполнительного адреса при индексной адресации (ptr = base(ireg)) показана на рис. 1.23, б и похожа на схему вычисления по базе:

ea = base + (ireg), MOD 2|ea|

Однако методика ее использования иная.

Индексная адресация применяется при последовательном доступе к элементам блока (массив, таблица, очередь), адрес размещения которого (база) известен. При этом номер элемента блока (индекс) является переменной, вычисляемой во время исполнения программы. Поэтому индекс удобно хранить в регистре ireg (индексном), а базу—в объектном коде команды. Отличие индексной адресации от адресации по базе состоит в том, что в объектном коде должен храниться полный адрес памяти |base| = |еа|, тогда как в качестве индексного регистра может использоваться регистр меньшей длины. При |ireg| = |ea| индексная адресация включает адресацию по базе. По этой причине последнюю часто называют индексной. В случае нулевой базы индексная адресация с полноразмерным индексом совпадает с косвенной, тогда регистр косвенной адресации называется индексным.

Разновидностью адресации по базе является относительная (PC).disp, при которой в качестве базового регистра breg используется PC (рис. 1.23, в), как правило, указываемый неявно (ptr = .disp).

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

Относительная адресация применяется для создания позиционно-независимых программ, т. е. программ, исполнение которых не зависит от их размещения в памяти. Примерами команд с относительной адресацией являются

MOV reg, .disp ;reg(PC + disp)

JMP .disp ;PCPC + disp

Каждому из вышеприведенных двухкомпонентных способов адресации соответствует вариант косвенной адресации:

@(breg).index Косвенный по базе

@base(ireg) Косвенный индексный

@.disp Косвенный относительный

Здесь исполнительный адрес формируется по схеме

еа = (base + index)

Косвенные варианты требуют двойного обращения к памяти МС, поэтому они не получили широкого распространения.

Двухкомпонентная косвенная регистровая адресация (ptr = (breg) (ireg)) может быть получена, когда обе компоненты—и база, и индекс—заданы косвенно (рис. 1.23, г). Способ симметричен по отношению к своим компонентам только при полноразмерном индексном регистре.

Трехкомпонентные способы адресации. Дальнейшего увеличения числа способов адресации можно достичь при переходе к трехкомпонентным схемам типа прямая + косвенная регистровая. Среди них

(breg).index (ireg) Базированная с индексированием

basе(ireg1) (ireg2) С двойным индексированием

Адресация такого типа используется в МП К1810ВМ86, в котором

index = disp8/disp16

base = offset16

ГЛАВА 2.



<== предыдущая лекция | следующая лекция ==>
JMP .disp | МИКРОПРОЦЕССОРЫ КР580ВМ80/К1821ВМ85А


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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