МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Системы адресации в Мини- и МикpоЭВМ

    Как видно разряды 15 - 8 содержат второй спецификатор операнда, который

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

    регистрового, короткого литерала и индексного. Если базовый спецификатор

    требует расширения, то это расширение следует непосредственно за

    спецификатором. Спецификатор обычно определяет адрес начала массива, а в

    индексном регистре Rx содержится номер элемента массива. При определении

    эффективного адреса операнда сначала вычисляется базовый адрес массива или

    таблицы. Затем содержимое индексного регистра умножается на 1, 2, 4 или 8,

    в зависимости от размера операнда и прибавляется к базовому адресу.

    Используя этот режим адресации совместно с уже описанными можно получить

    следующие режимы адресации :

    1. Косвенно-регистровый индексный, (Rn)[Rx].

    2. С автоувеличением индексный, (Rn)+[Rx].

    3. Косвенный с автоувеличкнием индексный, @(Rn)+[Rx].

    4. С автоуменьшением индексный, -(Rn)[Rx].

    5. Смещения индексный, N^X(Rn)[Rx], где N может принимать значения

    B, W, L.

    6. Косвенный смещения индексный, @N^X(Rn)[Rx]

    При работе со структурами данных индексный режим гораздо удобнее, чем

    просто режим смещения. Во-первых, здесь имеется мощный режим задания

    начального адреса массива с помощью одного из основных режимов адресации,

    что позволяет легко модифицировать этот адрес. Во вторых, программист в

    индексном регистре [Rx] указывает только номер элемента, а необходимое

    смещение вычисляется автоматически из контекста операнда. Так, инструкция

    CLRB B^2(R4), реализующая режим смещения ( пункт 2.6 ) может выглядеть как

    CLRB (R0)[R4] и если в R0 находится адрес массива, а в R4 смещение, то она

    аналогично первой инструкции очистит 3ий элемент массива.

    До операции CLRB (R0)[R4]

    R0 = 00001000

    R4 = 00000002

    (00001000) = 00 (R0)

    (00001001) = 01

    (00001002) = 02 (R0)+[R4]*1

    После...

    R0 = 00001000

    R4 = 00000002

    (00001000) = 00 (R0)

    (00001001) = 01

    (00001002) = 00 <—— 0

    Пример доказывает абсолютную идентичность этих инструкций.

    2.10 РЕЖИМЫ АДРЕСАЦИИ С ИСПОЛЬЗОВАНИЕМ СЧЕТЧИКА ИНСТРУКЦИЙ.

    Одним из неудобств описанных выше способов адресации является то, что

    во всех них требуется предварительная загрузка одного из регистров общего

    назначения. Только после того, как регистр загружен, содержимое его может

    быть использовано в качестве указателя начала массива, адреса элемента и

    т.д. При однократном обращении к произвольной ячейке такой способ является

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

    вместо одной - предварительной загрузки адреса в регистр и собственно

    обращение к памяти через этот регистр с помощью одного из режимов

    адресации. Однако эту операцию можно реализовать гораздо проще, если

    использовать счетчик инструкций. Регистр R15 является счетчиком инструкций,

    и одновременно регистром общего назначения, то есть доступен программисту

    для использования в качестве базового регистра и т.д. Это очень упрощает

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

    использование этого регистра например при адресации с автоуменьшением

    приведет к непредсказуемому результату. Фактически со счетчиком инструкций

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

    автоувеличением, смещения и косвенный смещения. Это дает с точки зрения

    программиста ( но не аппаратно ) четыре дополнительных режима адресации:

    непосредственный, абсолютный, относительный и косвенно-относительный.

    Рассмотрим алгоритм выполнения режима с автоувеличением при

    использовании счетчика инструкций в качестве регистра общего назначения. По

    определению режима с автоувеличением операция производится над операндом,

    на который указывает выбранный регистр. Если мы используем счетчик

    инструкций, то он в этот момент будет указывать на ячейку непосредственно

    следующую за спецификатором операнда. Таким образом операнд оказывается

    непосредственно в потоке инструкций. После выборки операнда содержимое

    счетчика увеличится на размер операнда, определяемый кодом операции. Длина

    константы должна соответствовать типу инструкции, даже если ее фактический

    размер меньше, только тогда после автоувеличения содержимого счетчика

    инструкций он будет содержать правильный адрес следующей команды. Для

    примера рассмотрим инструкцию MOVB #10,(R2)

    До операции MOVB #10,(R2)

    00000305 : 90 КОП

    00000306 : 8F <——— представление '(R15)+'

    00000307 : 10 <——— константа

    00000308 : 62 <——— представление '(R2)'

    R2 = 00001000

    R15 = 00000305

    (00001000) = FF (R2)

    После...

    R2 = 00001000

    R15 = 00000309

    (00001000) = 10 (R2)

    При компиляции инструкция MOVB #10,(R2) была заменена на MOVB (R15)+(R2), а

    константа была помещена в поток инструкций, и была успешно адресована и

    скопирована по адресу (00001000).

    Если использовать косвенный режим с автоувеличением, то по

    определению режима содержимое счетчика инструкций является не адресом

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

    счетчика увеличится на 4, так как мы передаем 32-разрядные адреса. Таким

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

    адрес операнда. Если в предыдущем примере использовать этот пример, то по

    адресу (00001000) будет занесено не число 10, а значение ячейки 10. На

    ассемблере такая инструкция будет иметь мнемонику MOVB @#10,(R2):

    До операции MOVB @#10,(R2)

    00000305 : 90 КОП

    00000306 : 9F <——— представление '@(R15)+'

    00000307 : 10

    00000308 : 00

    00000309 : 00

    0000030A : 00

    0000030B : 62 <——— представление '(R2)'

    R2 = 00001000

    R15 = 00000305

    (00000010) = 00

    (00001000) = FF (R2)

    После...

    R2 = 00001000

    R15 = 00000309

    (00000010) = 00

    (00001000) = 00 <——— 0

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

    независимыми. Они могут быть загружены и запущены в любой области памяти

    без перетрансляции, перелинковки или модификации адресов операндов. При

    перемещении в памяти программы, использующей косвенно-регистровый режим

    адресации адрес адресуемой ячейки не изменяется. Если данные в памяти

    перемещаются вместе с программой, как это чаще всего бывает, то

    адресоваться будут совсем не те данные, которые должны бы. Что делать в

    таких случаях ? Рассмотрим как использовать счетчик инструкций в режиме со

    смещением. Содержимое регистра счетчика инструкций складывается со

    смещением, которое расположено непосредственно в потоке инструкций.

    Полученная сумма является адресом операнда. Очевидно, что в этом случае

    данные будут адресоваться правильно, так как если подобрать смещение равное

    разнице между адресом операнда и адресом текущей команды, то эта разность

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

    ассемблере записывается просто как Addr, где Addr - адрес операнда.

    Рассмотрим выполнение инструкции MOVB 10,(R2)

    До операции MOVB 10,(R2)

    00000305 : 90 КОП

    00000306 : CF <——— представление '@(R15)'

    00000307 : 07 отрицательное смещение (309-

    10),

    00000308 : FD представленное в доп. коде

    00000309 : 62 <——— представление '(R2)'

    R2 = 00001000

    R15 = 00000305

    (00000010) = 00

    (00001000) = FF (R2)

    После...

    R2 = 00001000

    R15 = 0000030A <——— + 5

    (00000010) = 00

    (00001000) = 00 <——— 0

    Отметим, что смещение в данном примере отрицательное и представлено в

    дополнительном коде. Длина смещения и соответствующий конкретный код

    режима вычисляется автоматически на этапе компилирования. Если использовать

    счетчик инструкций в косвенном режиме со смещением, то получим еще один

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

    содержимого счетчика инструкций складывается со смещением и рассматривается

    как адрес адреса операнда. Для программиста этот режим является просто

    режимом косвенной адресации с использованием произвольной ячейки для

    хранения адреса. Как и в предыдущем примере смещение должно быть равно

    разнице между адресом данной ячейки и текущим положением инструкции. На

    ассемблере этот режим обозначается @Addr, где Addr - адрес ячейки, в

    которой находится адрес операнда. Рассмотрим инструкцию MOVB @10,(R2):

    До операции MOVB @10,(R2)

    00000305 : 90 КОП

    00000306 : CC <——— представление

    '@W^FD7(R15)'

    00000307 : 07 отрицательное смещение (309-

    10),

    00000308 : FD представленное в доп. коде

    00000309 : 62 <——— представление '(R2)'

    R2 = 00001000

    R15 = 00000305

    (00000000) = EE (00000010)

    (00000010) = 00

    (00001000) = FF (R2)

    После...

    R2 = 00001000

    R15 = 0000030A <—— + 5

    (00000000) = EE

    (00000010) = 00

    (00001000) = EE <—— EE

    2.11 АДРЕСАЦИЯ ПЕРЕХОДОВ.

    Последний способ адресации, который будет рассмотрен - это адресация

    переходов. Вот формат инструкции условного перехода:

    7

    0

    КОД ОПЕРАЦИИ

    СМЕЩЕНИЕ

    Адресация в этих инструкциях отличается от всех рассматриваемых тем, что

    здесь нет спецификатора операнда. Каждая инструкция условного перехода

    состоит из кода операции и следующего за ним байтного смещения со знаком.

    При формировании адреса перехода смещение складывается с содержимым

    счетчика инструкций подобно тому, как это делалось при относительной

    адресации. Почему всего 128 байт ? Это обусловлено тем, что большинство

    переходов адресованы к ячейкам, находящимся на небольшом расстоянии от

    самой инструкции перехода. Лишь в некоторых случаях требуется использование

    более эффективных режимов адресации.

    3. СИСТЕМЫ АДРЕСАЦИИ ИСПОЛЬЗУЕМЫЕ В ПЭВМ

    Системы адресации используемые в персональных ЭВМ будут рассмотрены

    на примере 32-разрядного процессора 80386 фирмы Intel. Все что касается

    этого процессора, системы его команд и способов адресации можно так же

    отнести к 386-ым процессорам фирм Cyrix и AMD (Advanced Micro Devices),

    которые полностью совместимы с I80386. МП 80386 представляет собой

    высокопроизводительный 32-разрядный микропроцессор, выполняющий 3-4 МОПС

    (MIPS). Он отличается полной 32-разрядной архитектурой с физическим

    адресным остранством 4 Гбайт и встроенными средствами страничной

    виртуальной памяти, МП 80386 может адресовать 64 Тбайт виртуальной памяти.

    Система команд МП 80386 содержит 9 категорий команд: пересылки данных,

    арифметических, сдвига, обработки строк, обработки битов, передачи

    управления, поддержки языков высокого уровня, поддержки операционной

    системы и управления процессором. Длина команды в среднем составляет 2-3

    байта. Операнды могут иметь длину 8,16 или 32 разряда.

    МП 80386 реализует сегментную организацию памяти, при которой

    физический адрес ячейки вычисляется путем сложения базового адреса сегмента

    и относительного адреса ячейки внутри сегмента. Базовый адрес определяется

    содержимым 16-разрядного сегментного регистра и зависит от режима работы

    микропроцессора. Если микропроцессор работает в режиме обработки 16-

    разрядных данных ( режим реальных адресов или режим виртуального процессора

    8086), то 20-разрядный базовый адрес формируется путем сдвига содержимого

    сегментного регистра на четыре разряда влево. Т.е. если в сегментном

    регистре содержится число 45F7, то базовый адрес будет 45F70. Если

    микропроцессор работает в режиме обработки 32-разрядных данных ( защищенный

    режим ), то 32-разрядный базовый адрес содержится в дескрипторе, выбор

    которого из таблицы дескрипторов осуществляется с помощью селектора -

    содержимого соответствующего сегментного регистра. В зависимости от типа

    обращения к памяти производится выбор сегментного регистра и способа

    определения относительного адреса. Для некоторых способов обращения к

    памяти возможны варианты выбора сегментных регистров. Эти варианты могут

    быть выбраны с помощью префикса замены сегмента SEG. На мнемонике

    ассемблера это выглядит просто как DS:[?], ES:[?], CS:[?], FS:[?] и т.д. В

    качестве относительного адреса используется содержимое регистров EIP(IP),

    ESP(SP), ESI(SI), EDI(DI) или эффективный адрес EA, который формируется в

    соответствии с заданным способом адресации (косвенный, индексный и т.д.).

    1. Выборка команд.

    Сегментный регистр CS ( Code Segment )

    Относительный адрес EIP(IP) ( Instruction Pointer )

    2. Обращение к стеку.

    Сегментный регистр SS ( Stack Segment )

    Относительный адрес ESP(SP) ( Stack Pointer )

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

    Сегментный регистр DS или (CS,SS,ES,FS,GS)

    Относительный адрес EA

    4. Адресация элемента строки-источника.

    Сегментный регистр DS или (CS,SS,ES,FS,GS)

    Относительный адрес ESI(SI)

    5. Адресация элемента строки-приемника.

    Сегментный регистр ES

    Относительный адрес EDI(DI)

    6. Адресация операнда с использованием в качестве базового регистра

    EBP(BP) или ESP(SP).

    Сегментный регистр SS или (CS,DS,ES,FS,GS)

    Относительный адрес EA

    Эффективный адрес операнда EA является 16- или 32-разрядным и формируется в

    зависимости от значения определенных полей в представлении команды. В общем

    случае EA образуется путем сложения трех компонент:

    . содержимого базового регистра EBP(BP) или EBX(BX);

    . содержимого индексного регистра ESI(SI) или EDI(DI);

    . 8-, 16- или 32-разрядного смещения, заданного непосредственно в

    команде.

    В разных случаях для формирования EA используются либо все либо часть этих

    слагаемых. Теперь рассмотрим конкретные способы адресации.

    3.1 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ.

    В качестве операнда используется один, два или четыре последних

    байта команды. Такой способ адресации реализуется при выполнении ряда

    команд пересылки (MOV, PUSH), арифметических операциях (ADD, ADC, SUB, SBB,

    CMP, IMUL), и логических (AND, OR, XOR, TEST). Рассмотрим простой пример -

    умножение содержимого регистра на константу:

    Регистры до выполнения IMUL AX,5

    AX = 10

    После...

    AX = 50

    3.2 РЕГИСТРОВАЯ АДРЕСАЦИЯ.

    При этом способе адресации операндом берется содержимое регистра.

    Например для операции занесения на стек реализация регистрового способа

    адресации будет выглядеть как PUSH DS.

    Регистры до выполнения PUSH DS

    DS = 5678h

    SP = FFFEh

    SS:FFFE = 0000h

    После...

    DS = 5678

    SP = FFFDh

    SS:FFFD = 5678

    SS:FFFE = 0000

    Как видно из примера значение регистра DS было занесено на стек.

    3.3 КОСВЕННО-РЕГИСТРОВАЯ АДРЕСАЦИЯ.

    При такой адресации относительный адрес содержится в индексном (SI,

    DI, ESI, EDI) или базовом ( BX, BP, EBX, EBP) регистрах или в регистрах

    общего назначения EAX, ECX, EDX. Адрес операнда вычисляется как

    сегмент:смещение. Смещение представлено эффективным адресом.

    Для примера рассмотрим команду MOV EBX,[EDI], которая пересылает

    Страницы: 1, 2, 3


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.