МОСКОВСКИЙ ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ
ЭКОНОМИКО-СТАТИСТИЧЕСКИЙ ИНСТИТУТ
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ МАШИН
КУРСОВАЯ РАБОТА
на тему:
Сравнительный анализ различных систем адресации, используемых в мини и микроЭВМ.
Дата готовности работы:
Студент: Козлов А.В.
Руководитель работы: Черняк Н.Г.
Защищена “____” “_________” 1994 г.
Москва 1994 г.
МОСКОВСКИЙ ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ
ЭКОНОМИКО-СТАТИСТИЧЕСКИЙ ИНСТИТУТ
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ МАШИН
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
группа ДП-101 курс 1
Студент: Козлов А.В.
Тема: Сравнительный анализ различных систем адресации, используемых в мини и микроЭВМ.
Основные разделы курсовой работы:
1. Введение. Отличия мини- и микроЭВМ.
2. Системы адресации, используемые в мини-ЭВМ.( На примере СМ ЭВМ ).
3. Системы адресации, используемые в ПЭВМ.( На примере конкретной ПЭВМ ).
4. Заключение. Сравнительный анализ систем адресации используемых в мини- и персональных ЭВМ.
Рекомендуемая литература:
1. Малые ЭВМ высокой производительности. Архитектура и программирование. Москва "Радио и связь" 1990.
2. Д.Брамм, П.Брамм. Процессор 80386 и его программирование. "Мир" 1990.
3. Шагурин, В.Б. Бродин, Г.П. Мозговой. Описание и система команд. МП "Малип" 1992.
Дата выдачи задания “____” “_________” 1994 г.
Срок представления работы на кафедру " " " " 1994 г.
Руководитель курсовой работы : Черняк Н.Г.
1. ОТЛИЧИЯ МИНИ- И МИКРОЭВМ.
В конце 60-х годов начался серийный выпуск сравнительно небольших и дешевых мини-ЭВМ. Их предназначали для предприятий и организаций, где установка высокопроизводительных ЭВМ была экономически невыгодной. В их задачу первоначально входила автоматизация профессиональной работы в различных организациях, работа на предприятиях в качестве проблемноориентированных ЭВМ. В 1977-78 году был начат выпуск семейства малых ЭВМ (СМ ЭВМ). Их часто называли управляющими вычислительными комплексами, так как они чаще всего использовались в системах управления различного рода. Однако, СМ 3-ей очереди, разработанные в последние годы относятся уже к ЭВМ четвертого поколения и имеют большую производительность, поэтому круг их применения резко расширился, и их активно используют в качестве автоматизированных рабочих мест, объединяют в вычислительные системы, и поручают им расчет экономических и статистических задач. С появлением больших интегральных схем связано развитие другого класса машин - микроЭВМ, и, как достижение этого направления - появление мощных профессиональных ПЭВМ, которые используются на рабочих местах для автоматизации труда, несложных расчетов и различного рода проектирования. Основным отличием мини- от микроЭВМ несомненно является ориентация. Машины СМ ЭВМ выпускались как проблемно ориентированные ЭВМ и поддерживались большим количеством различных модулей определяющих их специализацию, в то время как ПЭВМ - это универсальные ЭВМ, рассчитанные помимо применения в профессиональной деятельности еще и на применение в качестве обучающих и бытовых ЭВМ. По функциональным возможностям мини- и микроЭВМ имеющие примерно один и тот же уровень не отличаются друг от друга, как это должно быть для машин разного класса, т.е. учитывая что мини-ЭВМ считается более мощной чем микроЭВМ, а в частности ПЭВМ. Для сравнения возьмем супермини-ЭВМ СМ 1700 и современную персональную ЭВМ на базе 32-разрядного процессора.
СМ 1700 AMD 80386 DX 40Mhz
Производитель-
ность, млн.оп./с 3 9.6
Разрядность 32 32
Емкость ОЗУ
Мбайт 5-15 1-128
Все данные по процессору AMD386 взяты из документации на Ali 386 MINI ISA System Board. Как видно с развитием элементной базы ПЭВМ, задуманные как менее мощные, чем мини-ЭВМ персональные компьютеры обогнали их по производительности.
2. СИСТЕМЫ АДРЕСАЦИИ ИСПОЛЬЗУЕМЫЕ В МИНИ-ЭВМ
В этой главе будут рассмотрены способы адресации данных, используемые в мини-ЭВМ на примере СМ1700. Это первый представитель 32-разрядных ЭВМ семейства СМ. Вычислительный комплекс СМ1700 представляет собой универсальную ЭВМ. Одна из основных целей его создания - это расширение виртуального адресного пространства по сравнению с 16-разрядной СМ4. Хотя некоторые инструкции вычислительного комплекса СМ1700 имеют сходство с инструкциями СМ4, СМ1700 представляет собой полностью новую архитектуру. Аппаратные средства СМ1700 ориентированы на реализацию языков высокого уровня и системных программ, которые используются операционной системой и компилятором. Система команд СМ1700 в настоящее время включает 304 инструкции и более 20 режимов адресации операндов. Все это дает возможность программисту составлять эффективные по объему и времени выполнения программы. Какие же способы адресации предусмотрены в СМ1700? Мы рассмотрим несколько способов адресации, которые в общем можно поделить на регистровые, косвенные, индексные и специальные.
2.1 РЕГИСТРОВЫЙ РЕЖИМ АДРЕСАЦИИ
В этом режиме операндом является содержимое регистра.Рассмотрим инструкцию MOVL R2,R3. Для СМ ЭВМ характерно, что приемником всегда является второй операнд для двух- и третий для трех-операндных инструкций. Поэтому инструкция MOVL R2,R3 пересылает содержимое регистра R2 в регистр R3, а не наоборот, как было бы с аналогичной инструкцией MOV AX,BX из набора команд процессоров cемейства 8086 фирмы Intel. Приведем пример использования этого способа адресации на примере инструкции MOVL R2,R3. Ее машинная запись будет выглядеть, как D0 52 53, где D0 - код инструкции, а 52 и 53 - прямая адресация, 2ой регистр и прямая адресация, 3ий регистр соответственно.
Пусть содержимое регистров до операции было:
R2 = 00000010
R3 = 00001000
Тогда после они будут выглядеть так:
R2 = 00000010
R3 = 00000010
Как видно из примера, содержимое регистра R2 было скопировано в R3.
2.2 КОСВЕННО-РЕГИСТРОВЫЙ РЕЖИМ
В этом режиме содержимое регистра является адресом операнда. Мнемоника на ассемблере (Rn), где (Rn) является регистром содержащим либо адрес операнда источника {MOVL (R2),R3} либо адрес операнда приемника {MOVL R2,(R3)}. В качестве примера опять приведем инструкцию пересылки двойного слова MOVL R2,(R3). Код операции останется тот же, а операнды будут представлены как 52 63, где 63 - это уже косвенная адресация с использованием 3го регистра. При том же содержимом регистров, что и в предыдущем примере, будем иметь:
До операции MOVL R2,(R3):
R2 = 00000010
R3 = 00001000
(00001000) = 00000200 (R3)
После...
R2 = 00000010
R3 = 00001000
(00001000) = 00000010
После операции пересылки значение ячейки памяти, адрес которой содержался в R3 (00001000) изменился с 000000200 на 00000010.
2.3 РЕЖИМ С АВТОУВЕЛИЧЕНИЕМ
Специально для обработки массивов данных в CM1700 предусмотрена адресация с автоувуличением. В этом режиме содержимое выбранного регистра является адресом операнда, как и при косвенно-регистровой адресации, однако после выполнения операции содержимое регистра увеличивается на N, в зависимости от типа операнда:
N = 1, если операндом является байт,
N = 2, если операндом является слово,
N = 4, если операндом является двойное слово,
N = 8, если операндом является учетверенное слово или слово с плавающей запятой,
N =16, если операндом является целое слово длиной 128 разрядов или двойное слово с плавающей запятой.
Рассмотрим этот режим адресации используя команду MOVL (R0),(R2)+. В памяти инструкция будет представлена как D0 60 82, где 60 - как уже говорилось косвенная адресация с регистром R0, а 82 - косвенная адресация с использованием регистра R2 и автоувеличение. Восьмерка в последнем случае как раз и означает данный режим адресации.
До операции MOVL (R0),(R2)+
R0 = 00001000
R2 = 00001050
(00001000) = 000000AC (R3)
(00001050) = 00000000 (R2)
После...
R0 = 00001000
R2 = 00001054 <—— Увеличилось на 4
(00001000) = 000000AC
(00001050) = 000000AC
Как видно произошла пересылка числа из ячейки 00001000 в 00001050 и значение регистра R2 увеличилось на 4. ( Инструкция MOVL пересылает двойные слова. Об этом говорит суффикс 'L' - Long - длинное или двойное слово. Поэтому R2 увеличился на 4. Вообще предусмотрены операции работающие с байтами, словами, двойными словами и иногда с учетверенными словами и имеющие суффиксы B,W,L и Q соответственно.)
2.4 РЕЖИМ С АВТОУМЕНЬШЕНИЕМ
Этот режим идентичен режиму с автоувеличением, однако здесь после выполнения операции следует не увеличение, а уменьшение операнда по тем же правилам. Для примера рассмотрим команду CLRB -(R5), которая в памяти будет выглядеть как 94 75. Здесь 94 - код операции, а 75 - значит: использовать регистр R5 ( ?5 ) и произвести уменьшение после исполнения ( 7? ).
До операции CLRB -(R5)
R5 = 00001000
(00000FFF) = 0000001A
(000001000) = 0000001A (R5)
После...
R5 = 00000FFF <—— уменьшилось на 1
(00000FFF) = 0000001A (R5)
(000001000) = 00000000 <—— 0
Изменения хорошо видны. Ячейка 00001000, на которую первоначально указывал регистр R5 очистилась ( CLRB - CLeaR Byte - очистить байт ),значение регистра R5 уменьшилось на 1 и теперь указывает на ячейку памяти расположенную перед ячейкой 00001000, т.е. 00000FFF.
2.5 КОСВЕННЫЙ РЕЖИМ С АВТОУВЕЛИЧЕНИЕМ
В этом режиме содержимое выбранного регистра является адресом адреса операнда, а после выполнения операции производится увеличение содержимого этого регистра на 4, независимо от размера операнда. Это определяется тем, что регистр содержит адрес адреса ( т.е. адрес ячейки, содержимое которой в свою очередь используется как адрес для получения действительного операнда ), а адрес всегда представляется как двойное слово.
Для примера возьмем операцию очистки байта, мнемоника которой на ассемблере будет выглядеть как CLRB @(R5)+. Символ '@' ( зюха ) означает использование не просто режима с автоувеличением, а именно косвенного. Представление этой операции в памяти будет 94 95, где 94 - код операции, 95 - означает использование регистра R5 и косвенной адресации с автоувеличением (цифра 9).
До операции CLRB @(R5)+
R5 = 00001000
(00001000) = 000000AC (R5)
(000000AC) = 0A (00001000)
После...
R5 = 00001004 <—— увеличилось на 4
(00001000) = 000000AC
(000000AC) = 00 <—— 0
В результате выполнения этой команды содержимое ячейки 000000AC, адрес которой cодержался в ячейке 00001000, на которую указывал регистр R5 обнулилось, а значение регистра R5 увеличилось на 4.
2.6 РЕЖИМ СМЕЩЕНИЯ
В этом режиме содержимое выбранного регистра складывается с содержимым байта, слова или двойного слова, следующего непосредственно за спецификатором операнда. Полученная сумма является адресом операнда. Мнемоники на ассемблере для 3ех случаев имеют вид: B^X(Rn), W^X(Rn), L^X(Rn), где X смещение, относительно (Rn). Возможность задавать размерность смещения предусмотрена для экономии памяти.
Рассмотрим этот способ адресации на примере команды CLRB B^2(R4), которая очистит 3ий байт байтового массива, адрес которого содержится в регистре R5. Ее машинное представление выглядит как 94 A4 02, где 94 - код операции, A4 - регистр R4 и смещение представлено байтом ( для слова и двойного слова было бы C4 и E4 соответственно, а третье поле представляло бы смещение как слово или двойное слово ), а 02 собственно смещение, представленное в виде байта.
До операции CLRB B^2(R4)
R4 = 00001000
(00001000) = 00 (R4)
(00001001) = 01
(00001002) = 02 (R4)+2
После...
R4 = 00001000
(00001000) = 00 (R4)
(00001001) = 01
(00001002) = 00 <—— 0
В результате выполнения команды действительно произошло очищение ячейки 00001002, заданной начальным адресом 00001000 и смещением 2. Этот режим адресации позволяет легко обращаться к отдельным элементам массивов, что очень удобно.
2.7 КОСВЕННЫЙ РЕЖИМ СМЕЩЕНИЯ
В этом режиме содержимое выбранного регистра складывается со смещением ( байт, слово или двойное слово следующее непосредственно за спецификатором операнда ) и полученная сумма рассматривается как адрес двойного слова, которое является адресом операнда. Мнемоническое представление на ассемблере @B^X(Rn), @W^X(Rn) и @L^X(Rn) для смещения X в байт, слово или двойное слово соответственно. Rn - это регистр,используемый в данном способе адресации.
В качестве примера возьмем инструкцию MOVW @B^8(R5),(R2), которая должна занести в память по адресу (R2) число, на которое указывает двойное слово, по адресу получаемому при сложении содержимого регистра R2 со смещением 8. На машинном языке эта инструкция будет иметь вид B0 B5 08 62, где В0 - код инструкции, B5 - регистр R5 и байтовое смещение, 08 - смещение и 62 - косвенная адресация с использованием регистра R2.
До операции MOVW @B^8(R5),(R2)
R5 = 00001000
R2 = 00000400
(00001000) = 00000100 (R5)
(00001004) = 00000200
(00001008) = 00000300 (R5)+8
(00000300) = AAAA @(R5)+8
(00000400) = 0000 (R2)
После...
R5 = 00001000
R2 = 00000400
(00001000) = 00000100 (R5)
(00001004) = 00000200
(00001008) = 00000300 (R5)+8
(00000300) = AAAA
(00000400) = AAAA
Как видно из примера в ячейку 00000400 было занесено содержимое ячейки 00000300. Адрес 0000300 был вычислен как содержимое R5 ( 00001000 ) плюс 8 т.е. 00001008. Эта ячейка, как видно, действительно содержит адрес 00000300.
2.8 РЕЖИМ КОРОТКОГО ЛИТЕРАЛА
Так как многие литералы (числа), используемые в программах, имеют небольшой размер, то в СМ1700 предусмотрен специальный режим адресации, называемый режимом короткого литерала. В этом режиме константа содержится непосредственно в самом спецификаторе операнда. Любой спецификатор операнда, два старших разряда которого равны нулю содержит литеральную константу в младших шести разрядах.
00 ?????? <—— байт спецификатор операнда
литерал
С помощью литерала в инструкции могут быть представлены целые числа в диапазоне от 0 до 63. Мнемоника на ассемблере S^#n, где n - литерал. Рассмотрим инструкцию MOVL S^#18,R3 которая в памяти будет представлена в виде D0 18 53. Здесь D0 - код инструкции, 18 - литерал, 53 - регистр R3 при прямой адресации.
До операции MOVL S^#18,R3
R3 = 00001234
После...
R3 = 00000018
Из примера видно, что литерал был занесен в регистр R3
2.9 ИНДЕКСНЫЙ РЕЖИМ
Одним из наиболее мощных средств адресации в СМ1700 является использование регистров общего назначения для определения индекса элемента в массива данных. Вот формат спецификатора команды:
15 11 7 3 0
КБРА НБР КИР НИР
где КБРА - код базового режима адресации,
НБР - номер базового регистра,
КИР - код индексного режима (0100),
НИР - номер индексного регистра.
Как видно разряды 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