Системы адресации в мини- и микро-ЭВМРефераты >> Программирование и компьютеры >> Системы адресации в мини- и микро-ЭВМ
До операции 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.