Курсовая: Анализ систем адресации - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Анализ систем адресации

Банк рефератов / Технологии

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 37 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

18 17 Сравнительный анализ различных систем адресации , используемых в мин и и микроЭВМ. 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) из менился с 0000 00200 на 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, на которую первоначально у казывал регистр R 5 очистилась ( 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 = 000 01000 (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 ( 0000100 0 ) плюс 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. На ассемб лере такая инструкция будет иметь мнемонику M OVB @#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(D I ) или эффективный адрес 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, PU SH), арифметических операциях (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 = 0000 h После... 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], кот орая пересылает содержим ое ячейки 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:0101 h = 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] зашлет слово из A X. Регистры до выполнения 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+ E AX], [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Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Скидываемся по 100 рублей.
- На что?
- На день рождения Димы.
- Какого Димы?
- Не прокатило.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru