МЕНЮ


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

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


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

    содержимое ячейки DS:[EDI] в регистр EBX. ( В качестве размера операнда

    берется двойное слово - 4 байта.

    Регистры до выполнения MOV EBX,[EDI]

    EBX = 5678h

    EDI = 0100h

    DS:0100h = 1221h (edi)

    После...

    EBX = 1221h <——— 1221h

    EDI = 0100h

    DS:0100h = 1221h

    Пример в комментариях не нуждается. Число, адрес которого DS:EDI было

    успешно занесено в регистр EBX. Регистр DS использовался по умолчанию.

    3.4 ПРЯМАЯ АДРЕСАЦИЯ.

    При этом способе адресации смещение в сегменте до операнда задано в

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

    операцию MOV EAX,[1994h], пересылающую двойное слово по адресу DS:1994 в

    регистр EAX.

    Регистры до выполнения MOV EAX,[1994h]

    EAX = 0000h

    DS:1994h = 5000h

    После...

    EAX = 5000h <—— 5000h

    DS:1994h = 5000h

    Из примера видно, что число, прямо адресованное как ds:[1994h] было

    скопировано в заданный регистр.

    3.5 БАЗОВАЯ АДРЕСАЦИЯ.

    Относительный адрес операнда формируется при сложении содержимого

    базового регистра с непосредственным смещением. Смещение может быть

    представлено словом или двойным словом. Рассмотрим инструкцию ADD

    AX,[BP+10h], которая к содержимому регистра AX прибавляет число, адрес

    которого DS:[BP+10h]...

    Регистры до выполнения ADD AX,[BP+10h]

    AX = 0067h

    BP = 0100h

    DS:0100h = 0000h (bp)

    DS:0101h = 0001h

    · · · · · ·

    DS:0109h = 0009h

    DS:0110h = 0010h (bp+10h)

    После...

    AX = 0077h <—— (67h+10h = 77h)

    BP = 0100h

    DS:0100h = 0000h

    DS:0101h = 0001h

    · · · · · ·

    DS:0109h = 0009h

    DS:0110h = 0010h

    Как видно из примера, к содержимому BP было добавлено 10h и получилось

    смещение 110h, по которому и было взято число, прибавленное к AX.

    3.6 ИНДЕКСНАЯ АДРЕСАЦИЯ.

    Примерно тоже самое, что и базовая адресация, однако здесь и

    используются индексные регистры ( SI,DI ) и смещение заданное байтом или

    словом. При формировании 32-разрядных адресов, в качестве базового или

    индексного может использоваться любой из регистров EAX, ECX, EDX, EBX, EBP,

    ESI, EDI.. Для примера возьмем инструкцию MOV WORD PTR ES:[DI+2],AX,

    которая по адресу ES:[DI+2] зашлет слово из AX.

    Регистры до выполнения MOV WORD PTR ES:[DI+2],AX

    AX = 0099h

    DI = 000Dh

    ES:000Dh = 0000h (di)

    ES:000Fh = 0000h (di+2)

    После...

    AX = 0099h

    DI = 000Dh

    ES:000Dh = 0000h

    ES:000Fh = 0099h <—— 99h

    Адрес ячейки ES:000Fh был посчитан как содержимое DI плюс 2 = F. Число 99h

    из регистра AX успешно скопировано в эту ячейку памяти.

    3.7 БАЗОВО-ИНДЕКСНАЯ АДРЕСАЦИЯ.

    При использовании этого способа относительный адрес образуется путем

    сложения содержимых базового ( BX,BP ) и индексного ( SI,DI ) регистров.

    Например для операции MOV AX,[BP+SI] мы получим:

    Регистры до выполнения MOV AX,[BP+SI]

    AX = 00AAh

    BP = 0100h

    SI = 0050h

    DS:0100h = 0001h (bp)

    DS:0150h = 0002h (bp+si)

    После...

    AX = 0002h <—— 02h

    BP = 0100h

    SI = 0050h

    DS:0100h = 0001h

    DS:0150h = 0002h

    Адрес ячейки DS:0150h получен путем сложения значений регистров BP и SI,

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

    3.8 БАЗОВО-ИНДЕКСНАЯ АДРЕСАЦИЯ СО СМЕЩЕНИЕМ.

    Это вариант базово индексной адресации, при котором к относительному

    адресу прибавляется 8- или 16-разрядное смещение. Дополнительные способы

    адресации реализуются при использовании 32-разрядных адресов, когда задано

    специальное поле (SIB) в коде команды. Тогда возможны конструкции типа

    [EAX+EBX], [EAX+EAX], [ECX+EDX], В качестве индексного регистра можно

    использовать любой регистр кроме ESP. Содержимое этого регистра умножается

    на масштабный коэффициент F т.е. сдвигается влево на число разрядов 0,1,3

    или 4. Значение F зависит от размера данных. Для примера рассмотрим

    инструкцию MOV EAX,[EAX+EAX].

    Регистры до выполнения MOV EAX,[EAX+EAX]

    EAX = 0010h

    DS:0010h = 000Ah (eax)

    DS:0020h = 000Bh (eax+eax)

    После...

    EAX = 000Bh <—— 0Bh

    DS:0010h = 000Ah

    DS:0020h = 000Bh

    Базовый адрес берется из EAX, складывается со смещением из EAX и двойное

    слово по адресу DS:0020h заносится в EAX.

    3.9 ИНДЕКСНАЯ АДРЕСАЦИЯ С МАСШТАБИРОВАНИЕМ

    При использовании этого способа адресации относительный адрес

    формируется при сложении масштабированного индекса ( содержимого индексного

    регистра ) и 32-разрядного смещения. Поясним идею масштабирования индекса:

    содержимое индексного регистра умножается на масштабный коэффициент, чтобы

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

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

    слов.

    Start: jmp Begin

    Var dd 5 dup (0)

    Begin:

    mov edi,2 ; 1

    mov [Var+edi*4],12345678h ; 2

    Переменная Var представляет собой массив из 5 32-разрядных слов. В строке 1

    мы заносим в индексный регистр 2, имея ввиду обработку второго элемента

    массива, а далее в строке 2 мы заносим во второй элемент число 1234567h.

    На паскале это выглядело-бы как Y[2]:=$1234567 Если бы мы не произвели

    масштабирование, то число 1234567h было-бы занесено по адресу [Y+2], а при

    масштабировании реальный адрес был вычислен как [Y+2*4] т.е. [Y+8] и число

    попало "по адресу". Использование масштабирования имеет огромную роль при

    работе с массивами слов и двойных слов, избавляя программиста от

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

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

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

    3.10 БАЗОВО-ИНДЕКСНАЯ АДРЕСАЦИЯ С МАСШТАБИРОВАНИЕМ

    Относительный адрес формируется сложением масштабированного индекса и

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

    EAX,EBX,ECX,EDX,ESI или EDI. Приведем пример такой адресации данных:

    Инструкция MOV [EAX+EDI*4],666h поместит число 666h по адресу EAX плюс

    учетверенное содержимое EDI.

    Регистры до выполнения MOV [EAX+EDI*4],666h

    EAX = 0100h

    EDI = 0002h

    DS:0100h = 000Ah (eax)

    DS:0104h = 000Bh

    DS:0108h = 000Ch (eax+edi*4)

    После...

    EAX = 0100h

    EDI = 0002h

    DS:0100h = 000Ah (eax)

    DS:0104h = 000Bh

    DS:0108h = 0666h <—— 666h

    Масштабирование позволило адресовать именно 2-е 32-разрядное слово, а не

    записать число 666h по адресу EAX+2 т.е. 102h, который попадает по середине

    двух элементов массива.

    3.11 БАЗОВО-ИНДЕКСНАЯ АДРЕСАЦИЯ СО СМЕЩЕНИЕМ И МАСШТАБИРОВАНИЕМ

    Этот способ адресации рассмотрен в пункте 3.6 при использовании 32-

    разрядной адресации. Поэтому приведем лишь пример инструкции и опишем ее

    действия. Инструкция INC [EAX+EDI*4+12345678h] увеличит на единицу число,

    адрес которого вычисляется, как базовый плюс 32-разрядное смещение

    12345678h и плюс масштабированный по основанию 4 индекс, содержащийся в

    регистре EDI.

    3.12 ОТНОСИТЕЛЬНАЯ АДРЕСАЦИЯ

    Относительная адресация используется в микропроцессоре 80386 при

    выполнении ряда команд управления ( условные и безусловные переходы, вызовы

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

    содержащую следующую команду. При этом способе адрес формируется как сумма

    содержимого регистра EIP(IP) ( instruction pointer - указатель инструкции

    ), соответствующего текущей команде, и 8-, 16- или 32-разрядного

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

    Например рассмотрим операцию безусловного перехода в приведенном фрагменте:

    .

    .

    mov ax,5

    jmp @1

    sub ax,ax

    @1: mov bx,ax

    .

    .

    Безусловный переход будет представлен как JMP 02, т.е. на 2 байта вперед,

    после инструкции. SUB AX,AX занимает в памяти слово, значит переход будет

    передан на команду MOV BX,AX т.е. по адресу CS:IP+2. (Это немного

    упрощенный пример внутрисегментного перехода. На самом деле при переходах

    менее чем на 128 байт используется короткий переход EB??90, где ?? - это

    размер кода который надо пропустить + 1 байт. Дополнительный байт

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

    представляет собой код инструкции NOP ( no operation ), присутствие его

    абсолютно бесполезно, но сложилось исторически, и больше не исправлялось.

    Байт ?? - это байт со знаком, так что переход возможен как вперед, так и

    назад. А вот при переходах более чем на 127 байт используется команда

    E9???? , описанная выше ).

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

    CM1700 И В ПЭВМ НА БАЗЕ ПРОЦЕССОРА 80386.

    В двух предыдущих разделах мы привели примеры и описали основные

    способы адресации, используемые в машинах двух разных семейств - мини- и

    микроЭВМ. Конечно это не все, что можно сказать о системах адресации для

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

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

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

    были описаны.

    Для начала, рассмотрим самые простые способы адресации, такие как

    регистровая, прямая, непосредственная и короткого литерала. Про регистровую

    адресацию трудно написать больше, чем уже было написано. Естественно, что

    этот способ адресации поддерживается и на СМ1700 и 80386 процессором, как

    впрочем вообще всеми процессорами семейства 80х86 и многими другими

    процессорами, которые имеют регистровую память. Несмотря на простоту этого

    способа адресации, он достаточно часто используется для манипуляции

    регистрами, их очистки, модификации их содержимого. Регистровая память

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

    особенно несложных программисты пытаются делать в этих регистрах. В них

    помещают начальные значения, производят вычисления, модификацию и как-то

    используют полученные результаты. Для всех этих действий естественным

    является применение именно регистрового способа адресации. Большим

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

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

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

    далее. Но если копнуть чуть глубже, то этот способ адресации дает еще

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

    представленному в виде сегмента со смещением можно использовать такой код:

    push 0f000h

    push 0ffffh

    ret

    Команда RET берет из стека значения сегмента и смещения, а потом делает

    межсегментный переход. Представим себе, выполнение подобного кода без

    возможности помещать на вершину стека непосредственное значение:

    mov ax,0f000h

    push ax

    mov ax,0ffffh

    push ax

    ret

    Как видим, выглядит это не слишком компактно, в сравнении с предыдущим

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

    дольше. Это самый простой пример применения непосредственной адресации, на

    самом деле ее применение гораздо шире, особенно если интенсивно

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

    параметры стандартизированы и в основном заранее известны. На СМ 1700 режим

    непосредственной адресации реализуется программно, с использованием

    счетчика инструкций, а в машинах на базе i386 он реализуется аппаратно.

    Трудно сказать что лучше, однако в СМ 1700 предусмотрен еще и режим

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

    адресацией данных меньших чем 64 беспорны. В 80386 процессоре ничего

    подобного не предусмотрено, хотя может быть это лучше - не увеличивает

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

    Прямая адресация это тоже достаточно простой, но очень часто

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

    переменным, областям данных операционных систем и т.д. Реализован и в i386

    процессоре и на СМ 1700, опять же через счетчик инструкций.

    Более сложными, однако и более продуктивными являются косвенные

    способы адресации. Косвенно регистровый, косвенный со смещением, индексные

    режимы адресации реализованы в полной мере и на СМ 1700 и в ПЭВМ. Они дают

    наибольший эффект при обработке массивов, таблиц, различного рода списков.

    Для сравнения приведем таблицу аналогичных по смыслу инструкций СМ 1700 и

    процессора 80386.

    1. Косвенно регистровый.

    СМ 1700 MOVB R1,(R2)

    i386 MOV [EBX],EAX

    2. Смещения.

    СМ 1700 MOVB W^32769(R4),R1

    i386 MOV EAX,[EDX+32769]

    3. Косвенный смещения.

    СМ 1700 MOVW @B^8(R5),(R2)

    i386 MOV ESI,[EDI+8]

    MOV AX, word ptr [ESI]

    MOV word ptr [EDX],AX

    4. Косвенно регистровый индексный.

    СМ 1700 MOVB (R1)[R2],R3

    i386 MOV CX,[BP+DI]

    5. Смещения индексный.

    СМ 1700 MOVB B^5(R1)[R2],R3

    i386 MOV EAX,[EBX+ECX+5]

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

    почему. Если обратить внимание на пункт 3, то видно, что команда,

    аналогичная косвенному режиму смещения заменена на 3 инструкции из набора

    команд процессора 80386. Действительно 386-ой процессор не понимает

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

    делать с помощью дополнительного регистра. Более того система адресации

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

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

    системе команд i386 предусмотрены команды обработки строк. Эти команды во

    многих случаях позволяют обойтись без подобных проблем. Вот эти команды:

    MOVS{B,W,D} - переслать строку

    STOS{B,W,D} - занести в память из {AL,AX,EAX}

    LODS{B,W,D} - занести из памяти в {AL,AX,EAX}

    CMPS{B,W,D} - сравнить строки

    SCAS{B,W,D} - сканировать строку

    Все эти команды можно использовать с префиксом повторения REP. У этого

    префикса есть и условные модификации REPE, REPZ, REPNE REPNZ и другие,

    прекращающие повторение по какому-то признаку до исчерпания счетчика. С

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

    инструкции можно охарактеризовать, как использующие автоувеличение или

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

    которое хранится в регистрах ESI(SI),EDI(DI). В тоже время MOVS реализует

    адресацию "память-память". С первого взгляда этого недостаточно для того,

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

    индексного режима. Однако эти сложные инструкции легко заменяются набором

    инструкций процессора 80386. Например перепишем команду MOVL

    @(R1)+[R3],(R2)+ для машин на базе i80386.

    CLD

    MOV ESI,[EAX+EBX]

    MOVSD

    Если положить, что EDI = R2, то результат будет тем же. Далее ESI и EDI

    будут увеличены на 4 и для дальнейшей пересылки можно было бы написать

    MOV CX,1000

    REP MOVSB

    Что привело бы к пересылке 4000 байт из DS:[ESI] в ES:[EDI]. Конечно нужна

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

    установка счетчика в ECX, задание направления (CLD/STD - прибавлять или

    отнимать в ESI и(или) EDI), однако примерно такие же приготовления

    необходимы и в первом случае.

    Таким образом, рассматривая и сравнивая возможные способы адресации на СМ

    ЭВМ и персональных ЭВМ на базе процессора i386 можно сформировать вполне

    определенное представление о возможностях этих машин. Несомненно СМ 1700

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

    экономических и других задач. Имея более совершенный набор возможных

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

    ориентированные на работу с большим количеством различной нформации, по

    сравнению с возможной реализацией подобных задач на ПЭВМ.Прямая или

    косвенная адресация "память-память" несомненно имеет огромные преимущества,

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

    регистры, лишние такты и т.д.), используемых при подобных пересылках.

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

    80386 вполне реально и даже имеет смысл. Благодаря развитию элементной

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

    и внешних запоминающих устройств общая производительность современных ПЭВМ

    достигает, и часто обходит производительность таких классических

    вычислительных систем, как ВС на основе СМ и ЕС ЭВМ. Поэтому, несмотря на

    некоторую неприспособленнось машин этого класса для решения сложных задач,

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

    ПЭВМ. И конечно не последнюю роль здесь играет их относительно небольшая

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

    программ, а следовательно и программистов, способных писать грамотное ПО

    для решения экономических задач.

    Козлов А.В.

    СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ.

    1. Малые ЭВМ высокой производительности. Архитектура и программирование.

    Москва "Радио и связь" 1990.

    2. Д.Брамм, П.Брамм. Процессор 80386 и его программирование. "Мир" 1990.

    3. Шагурин, В.Б. Бродин, Г.П. Мозговой. Описание и система команд. МП

    "Малип" 1992.

    4. Вычислительные машины, системы и сети. Москва "Финансы и статистика"

    1991.

    5. ALI 386DX MINI ISA Systеm Board user's manual. Printed in the Taiwan.

    Edition - August 1993.

    ОГЛАВЛЕНИЕ

    1. Введение.

    Сравнение мини- и микроЭВМ.

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

    1. Регистровый режим адресации.

    2. Косвенно регистровый режим адресации.

    3. Режим с автоувеличением.

    4. Режим с автоуменьшением.

    5. Косвенный с автоувеличением.

    6. Режим смещения.

    7. Косвенный смещения.

    8. Режим короткого литерала.

    9. Индексный режим.

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

    11. Адресация переходов.

    3. Системы адресации используемые в ПЭВМ.

    1. Непосредственная адресация.

    2. Регистровая адресация.

    3. Косвенно-регистровая адресация.

    4. Прямая адресация.

    5. Базовая адресация.

    6. Индексная адресация.

    7. Базово-индексная адресация.

    8. Базово-индексная адресация со смещением.

    9. Индексная адресация с масштабированием.

    10. Базово-индексная адресация со смещением.

    11. Базово-индексная адресация со смещением и с масштабированием.

    12. Относительная адресация.

    4. Заключение. Сравнительный анализ систем адресации используемых в

    CM1700 и в ПЭВМ на базе процессора 80386.

    5. Литература.

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


    Приглашения

    09.12.2013 - 16.12.2013

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

    09.12.2013 - 16.12.2013

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




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