Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

ВВЕДЕНИЕ 4 страница. литералы Глава 2. Машинные языки Машинные языки Форматы команд машинного языка Команды перехода Регистры Адресация оперативной памяти Режимы адресации



литералы Глава 2. Машинные языки

Машинные языки

Центральный процессор современного компьютера — это устройство, исполняющее команды. Полный набор команд конкретного процессора называют машинным языком или системой команд (иногда систему команд называют также архитектурой, но это слово слишком перегружено различными значениями).
Различные процессоры часто имеют одну и ту же" (или слабо варьирующую) систему команд — например, процессоры Intel 80386, 486, Pentium, Pentium II, AMD Кб, Athlon и т. д. — далее в тексте книги мы будем называть все эти процессоры х86.
Процессоры, которые могут исполнять программы на одном и том же машинном языке, называются бинарно-совместимыми. Отношение бинарной совместимости не всегда симметрично: например, более новый процессор может иметь дополнительные команды — тогда он будет бинарно-совместим с более старым процессором того же семе,йства, но не наоборот. Нередко бывает и так, что более новый процессор имеет совсем другую систему команд, но умеет исполнять программы на машинном языке старого процессора в так называемом режиме совместимости — например, все процессоры семейства х86 могут исполнять программы для Intel 8086 и 80286. Некоторые ОС для х8б даже предоставляют возможность собрать единую программу из модулей, использующих разные системы команд.
Еще более обширны семейства процессоров, совместимые между собой по языку ассемблера. Такая совместимость означает всего лишь, что каждая команда одного процессора имеет полный функциональный аналог в системе команд другого, это дает возможность автоматизировать преобразование программ из одного машинного языка в другой. Так, Intel 8086 совместим по языку ассемблера с более ранними процессорами той же фирмы, 8080 и 8085.
Как уже говорилось, асимметрия отношений совместимости обычно направлена от предыдущего поколения процессоров к следующему: более новое (как правило, более мощное) устройство совместимо со своим более старым аналогом, но не наоборот, поэтому часто говорят о совместимости снизу вверх. Это отношение позволяет нам не только классифицировать вычислительные системы по поколениям, но и выделять в разных поколениях предка и совместимых с ним потомков, а в пределах одного поколения находить "братьев" и более дальних родственников.
Прослеживание генеалогий систем команд современных процессоров — увлекательное занятие, которому посвящено немало публикаций, например (jbayko vl2.1.2]. Иногда, кроме бинарной и ассемблерной совместимостсй, при построении таких генеалогий учитывают и столь размытое понятие, как концептуальное родство — и тогда, например, процессоры Motorola 680x0 оказываются родней DEC PDP-11.
Наборы команд различных процессоров отличаются большим разнообразием, однако есть операции, которые в той или иной форме умеют выполнять все современные процессоры.
Во-первых, это арифметические операции над целыми числами в двоичном представлении. Даже в наше время многие микроконтроллеры предоставляют только операции сложения и вычитания, но процессоры современных компьютеров "общего назначения" все без исключения умеют также умножать и делить, при чем не только целые, но и "вещественные" числа (в разд. Представление рациональных чисел мы видели, чем такие числа отличаются от того, что называется вещественным числом в математическом анализе и производных от него дисциплинах). Некоторые специализированные процессоры предоставляют и более экзотические математические функции, например отдельные шаги алгоритма дискретного преобразования Фурье.
Но самая главная команда (или, точнее, самое главное семейство команд), которая и делает процессор полностью программируемым, — это команда перехода, точнее, как минимум две команды: безусловного и условного перехода. На практике большинство современных процессоров имеют по несколько команд безусловного перехода (с разными механизмами вычисления адреса точки перехода), а также до десятка, а иногда и более, команд условного перехода по различным условиям.

Микропрограммные автоматы
У фон-неймановских процессоров команды исполняются последовательно, в соответствии с порядком размещения в памяти, и только команды условных и безусловных переходов нарушают этот порядок. "Младшие родственники" фон-неймановских процессоров, микропрограммные автоматы, часто имеют более мощное средство управления последовательностью исполнения: каждая команда автомата имеет битовое поле, содержащее номер следующей по порядку исполнения команды и, таким образом, одновременно является и функциональной командой, и командой безусловного перехода. Методы реализации условных переходов в устройствах такого типа отличаются большим разнообразием.
Такая структура команды облегчает размещение программы в памяти (логически последовательные команды могут быть размещены в любых свободных участках), но приводит к значительному увеличению длины команды — и потому применима лишь в устройствах с очень небольшой длиной адреса команды, т. е. с маленькой программной памятью. Микропрограммные автоматы обычно компенсируют это ограничение сложной структурой каждой отдельной команды — длина таких команд достигает нескольких сотен битов и, в действительности, они содержат по отдельной команде для каждой из функциональных подсистем автомата. Но все равно, сложность программ для таких устройств невелика по сравнению с программами для фон-неймановских процессоров общего назначения, и их часто называют не программами, а микрокодом.
Программируемые логические матрицы (ПЛМ), микропрограммные автоматы и фон-неймановские процессоры представляют собой непрерывный спектр устройств возрастающей сложности — причем далеко не всегда можно с уверенностью отнести конкретное устройство к одной из перечисленных категорий. Простая ПЛМ не может сохранять предыдущее состояние и способна только преобразовывать текущие состояния своих входов в состояния своих выходов. Замкнув некоторые из выходов ПЛМ на некоторые из ее входов через простое запоминающее устройство (регистр) мы получаем более сложное устройство, обладающее памятью. Простые микропрограммные автоматы реализуются на основе ПЛМ и нескольких регистров. Более сложные автоматы содержат много регистров и специализированные функциональные устройства, такие, как счетчики и сумматоры.
Типичный современный фон-неймановский процессор общего назначения, такой, как Pentium VI, представляет собой сложный микропрограммный автомат, микрокод которого интерпретирует коды команд х86.

С помощью процессора, не имеющего команд перехода, нельзя реализовать алгоритм, который имел бы циклы или условные операторы. Следовательно, такой "процессор" пригоден лишь для осуществления вычислений по фиксированной формуле или генерации фиксированных последовательностей сигналов. В наше время такие функции обычно реализуются при помощи программируемых логических матриц.

Нейросети
Впрочем, существуют весьма сложные системы, представляющие собой набор примитивных "процессоров", не имеющих команд перехода, — речь идет о так называемых нейросетях. Идея нейросетей была позаимствована у нервных систем высших животных, которые представляют собой сложносоединенную сеть специализированных клеток, нейронов. Каждый нейрон представляет собой довольно примитивное аналоговое устройство, пороговый сумматор: он имеет много (иногда много тысяч) входов и один выход. Каждый вход нейрона имеет свой вес, возможно отрицательный. Нейрон суммирует сигналы со всех
своих входов с учетом их весов, и, если результат превосходит некоторый порог, начинает генерировать сигнал на выходе. Суммирование бывает как линейное, так и нелинейное, когда вместо самого сигнала используется некоторая монотонная его функция. Например, если в качестве функции использовать логарифм, нейрон из сумматора превратится в умножитель.
Кажущаяся примитивность одиночного нейрона компенсируется их большим количеством, сложной системой связей между нейронами и их способностью "обучаться", изменяя коэффициенты входов (веса) и пороговое значение. Биологические нейросети могут расти, создавая дополнительные соединения. Некоторые комплексы биологических нейронов имеют фиксированную структуру связей и записанные на генетическом уровне веса. Простые поведенческие реакции, обусловленные такими нейронами, называют безусловно-рефлекторными, а сложные комплексы таких реакций — инстинктом.
Нейрофизиологические исследования показывают, что, во всяком случае, первичный анализ видимого изображения (выделение контуров, объединение их в фигуры) мозг млекопитающих осуществляет как нейросеть. Есть весьма убедительные доводы в пользу того, что остальные функции мозг выполняет по тому же принципу — хотя точная анатомическая локализация многих функций восприятия, распознавания образов, мышления, памяти и координации движений до сих пор неизвестна, в мозге пока не обнаружены структуры, которые могли бы работать иначе, чем нейросеть.
Успехи биологических нейросетей поражают воображение разработчиков электронных вычислительных и управляющих систем. Даже если отвлечься от часто упоминаемых в литературе задач распознавания образов, задача координации движений в том виде, в каком ее решает мозг млекопитающих, выходит далеко за пределы возможностей самых современных вычислительных систем.
Действительно, тело млекопитающего (например, человека) с точки зрения теоретической механики представляет собой систему многих тел (туловища, головы, сочленений конечностей), связанных вязко-упругими соединениями (мышцами и сухожилиями). При этом далеко не все эти тела можно адекватно описать как твердые: тот факт, что туловище способно изгибаться и скручиваться, используется человеком почти во всех движениях и для сохранения равновесия, и для придания движению дополнительного усилия, и для других целей. Даже самая примитивная модель "палочного человечка" с жестким туловищем состоит из четырнадцати элементов: головы, туловища и четырех конечностей, каждая из которых имеет по три сочленения. Казалось бы, немного, но движение каждого из этих элементов описывается шестью переменными: перемещение центра масс по трем координатам и вращение в трех плоскостях.
Таким образом, полное движение "палочного человечка" описывается восемьюдесятью четырьмя переменными. Для адекватного описания нам надо использовать не только сами переменные, но и их первые производные по времени, линейные и угловые скорости и соответствующие им импульсы и моменты импульса, так что переменных получается 168.
Для примера, большинство задач, решаемых в ВУЗовских курсах физики и теоретической механики, описывает одно- или двухмерное движения материальных точек или одиночных твердых тел, т. е. имеет дело с двумя или четырьмя "координатами" и, соответственно, четырьмя или восемью переменными. При решении уравнений, описывающих даже такие системы, есть место подвигу. Алгоритмы же решения систем дифференциальных уравнений большой размерности содержат шаги, вычислительная стоимость которых быстро — быстрее, чем экспоненциально— растет с увеличением размерности системы. Пользуясь методами теоретической механики, можно относительно легко записать систему дифференциальных уравнений, описывающую движения "палочного человечка". Решить же эту систему ни аналитически, ни численно за приемлемое время невозможно. Причем мы еще не учли в нашей модели нелинейных вязко-упругих связей между отдельными частями тела! А человеческий мозг решает эту задачу в полном виде и в режиме реального времени, причем не только для сложных движений, таких, как танец или боевые искусства, но и для таких повседневных действий, как вставание со стула, выполнение одного шага или поднесение ложки ко рту. Следует отметить, что решение этой задачи обычно не отвлекает сколько-нибудь значительной доли вычислительных ресурсов мозга, так что мы можем без труда одновременно идти, созерцать окружающий пейзаж (распознавание зрительных образов тоже не самая вычислительно дешевая задача) и размышлять о чем-нибудь.
Относительная легкость, с которой человек осваивает новые типы движений, даже такие, которые меняют механику его тела (т. е. изменяют систему дифференциальных уравнений, которая описывает поведение тела как механической системы), — езда на велосипеде, лыжах, роликовых коньках, работа простыми инструментами — или те, которые позволяют использовать механику чего-то совсем другого (управление автомобилем или летательным аппаратом), показывает, что врожденной является способность предсказывать движение и управлять поведением сложных механических систем вообще, а не только собственного тела. Эта же легкость, возможно, свидетельствует также и о том, что при решении этих задач в мозгу не происходит ничего даже отдаленно похожего на запись и решение системы многомерных дифференциальных уравнений.
Технические нейросистемы (или, если угодно, имитации нейросистем) достигли гораздо меньших успехов. Основная сфера применения компьютерных нейро-симуляторов — поиск корреляций в статистических и экспериментальных данных. Наибольший коммерческий успех имели аппаратно реализованные папиллярные детекторы и системы автофокусировки видео- и фотокамер, задача которых — крутить объектив, пока количество четких контуров в изображении не станет максимальным. На любительских видеосъемках, а иногда и в прямом эфире коммерческого телевещания, встречаются забавные моменты, когда такой автофокус настраивает резкость совсем не на тот элемент сцены, который хочет запечатлеть оператор, а на посторонний предмет, в изображении которого много мелких элементов, — крону дерева или что-нибудь в этом роде.
В нервных системах высших животных можно выделить функциональные подсистемы, которые с определенной натяжкой сопоставляются с теми или иными модулями компьютерных ОС. Так, например, есть нейрофизиологические свидетельства, что лобные доли коры больших полушарий головного мозга млекопитающих отвечают за его способность отложить деятельность, направленную на достижение какой-то одной цели, и переключиться на что-то другое, не забывая, однако, ни о предыдущей деятельности, ни о предыдущей цели. Это неплохо коррелирует с тем фактом, что человек, у которого лобные доли развиты до беспрецедентного в животном мире размера, способен также и к построению беспрецедентных по сложности цепочек, направленных на достижение целей окольными путями. Например, какому из животных придет в голову,
что гарантированного ежедневного питания и многих других материальных вознаграждений можно достичь посредством изучения современных операционных систем? У людей, впрочем, способность строить сложные цепочки промежуточных действий и промежуточных целей иногда доходит и до патологических явлений, когда забывается начальная (или, наоборот, конечная) цель, ради которой все затевалось. В связи с этим нельзя не вспомнить знаменитую реплику Льва Троцкого: "цель — ничто, движение — все".
Лобные доли можно — как признавалось выше, с определенной натяжкой — сопоставить с планировщиком многозадачной ОС. Понятно, что натяжка здесь столь велика, что вряд ли такое сопоставление сильно поможет нам в понимании того, что же такое планировщик, и как он устроен.
Несмотря на определенное родство решаемых задач, нейросети радикально отличаются от фон-неймановских компьютеров. Главное отличие состоит в том, что нейросеть не имеет ничего даже отдаленно похожего на программу в фон-неймановском смысле. Обсуждение, а также изучение реализаций биологических нейросетей и разработка нейросетей технических — занятие очень интересное и ему посвящено несколько научных и инженерных дисциплин, но это занятие увело бы нас далеко в сторону от темы нашей книги.

Форматы команд машинного языка

Команда центрального процессора состоит из кода операции и одного или нескольких операндов (объектов, над которыми совершается операция). В зависимости от числа операндов, команды делятся на безадресные (не имеющие операндов или имеющие неявно указанные), одноадресные (производящие операцию над одним объектом или одним явно и одним или несколькими неявно указанными), двух- и трехадресные. Встречаются архитектуры, в которых есть команды и с большим числом операндов, но это экзотика.
Примеры безадресных команд без операнда.

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

Примеры одноадресных команд с одним операндом

Примеры одноадресных команд с неявным операндом.

Примеры двух- и трехадресных команд.

Присвоить значение объекта х объекту у.

Сложить х и у, поместить результат в у.

Сложить х и у и поместить результат в z.
Четырехадресная команда:

DIV х, у, z, w

выполняет деление х на у, помещает частное в z, а остаток — в w. Шестиадресная команда:

INDEX b, I, h, s, i, a

вычисляет адрес элемента массива, расположенного по адресу b, с нижней и верхней границами индекса I и b соответственно и размером элемента s.
Операнд i — индекс элемента, а — место, куда следует поместить вычисленный адрес.
Количество адресов иногда используют и для общей характеристики системы команд. Двухадресной называют систему команд, в которой команды имеют максимум два операнда, трехадресной -- максимум три. Нередко, впрочем, вместо максимального количества операндов, адресность системы команд определяют по количеству операндов у наиболее "ходовых" команд — сложения и вычитания. Таким образом, VAX, из системы команд которого взяты примеры четырех- и шестиадресных команд, часто относят к трехадресным архитектурам.
Одноадресные системы команд обычно используют в качестве неявно заданного операнда выделенный регистр, так называемый аккумулятор, или стек. Такие архитектуры называют, соответственно, аккумуляторными и стековыми.
Одноадресную аккумуляторную архитектуру имеют микроконтроллеры семейства PIC фирмы Microchip. Большинство современных процессоров имеют двух- и трехадресные системы команд.
На примере стековой команды ADD мы видели, что многие из команд стековой архитектуры могут обойтись вообще без явно указанных операндов, однако команды проталкивания значений переменных в стек и выталкивания их оттуда все-таки необходимы, поэтому все стековые архитектуры одно-, а не безадресные.
Стеки привлекательны, во-первых, тем, что не нуждающиеся в операндах команды могут иметь очень короткий код операции (как правило, достаточно одного байта) и, во-вторых, тем, что работающая с ними программа представляет собой арифметическое выражение, записанное в обратной польской нотации — когда мы сначала пишем операнды, а потом знак операции. Например, операция а+ь в этой записи выглядит как ab+ (в программе — push a; push b; add;).
Задача преобразования привычных нам арифметических выражений в обратную польскую запись легко формализуется, поэтому стековые процессоры долгое время позиционировались как "ориентированные на языки высокого уровня". Позже, впрочем, выяснилось, что более сложная логика разбора арифметических выражений позволяет проводить разного рода оптимизации (сокращать введенные лишь для удобства записи переменные, заменять выражения, которые всегда дают одно и то же значение, на константы, выносить повторяющиеся вычисления из тела цикла и т. д.).
Аппаратно реализованные стековые архитектуры — в наше время редкость. Из относительно современных процессоров, имевших коммерческий успех, можно назвать Transputer фирмы Inmos (в настоящее время эти микропроцессоры выпускаются фирмой SGC-Thomson).
Шире всего стековая архитектура распространена в байт-кодах или, как это еще называют, системах команд виртуальных машин. Байт-код - это промежуточное представление программы, используемое интерпретатором, чтобы избежать лексического и синтаксического анализа программы на этапе исполнения. Исполнение байт-кода осуществляется не процессором, а программой-интерпретатором. Таким образом, реализуются многие современные языки программирования — многочисленные диалекты языка BASIC, Lisp, SmallTalk, Fort (этот язык любопытен тем, что сам имеет стековый синтаксис), наконец Java. Некоторые реализации интерпретаторов этих языков используют так называемую JIT-комтшяцию (Just In Time, точно в момент [исполнения]), когда перед исполнением байт-код компилируется в систему команд физического процессора. Такая технология позволяет достичь для "интерпретируемых" программ производительности, не уступающей производительности компилированного кода.
Первым промышленным применением JIT-компиляции была система AS/400 фирмы IBM. В настоящее время JIT широко используется в реати-зациях Java. JIT-компиляция привлекательна тем, что позволяет исполнять один и тот же код на разнообразных процессорах без потерь (или почти без потерь) скорости.

Команды перехода

Как говорилось в начале главы, команды условного перехода — это то, что отличает фон-неймановский процессор от непроцессора или, в крайнем случае, от не фон-неймановского процессора. Большинство современных процессоров имеет обширный набор команд условного перехода по различным арифметическим условиям и их комбинациям.
Арифметические флаги выставляются в соответствии с результатами последней арифметической и логической операции. Типичный набор арифметических флагов — это бит переноса, бит нуля (выставляется, если все биты результата равны нулю), знаковый бит (если равен нулю старший бит результата) и бит переполнения. В процессорах первых поколений нередко использовался обратный подход: процессор имел всего один флаг условия перехода (так называемый ы-признак) и одну команду условного перехода, зато несколько команд сравнения, придававших этому флагу различную семантику.
Набор команд перехода, приведенный в табл. 2.1, несколько шире обычного — команды SBRC/SBRS для процессоров общего назначения нетипичны.
Микроконтроллеры PIC (по-видимому, самая экстравагантная система команд среди современных промышленно выпускаемых процессоров) имеют всего две команды, выполняющие функции команд условного перехода: BTFCS (Bit Test, Skip if Set — проверить бит и, если он установлен, пропустить следующую команду) и BTFCC (Bit Test, Skip if Clear, пропустить следую-шую команду, если бит сброшен). Объектом проверки может служить любой бит любого регистра процессора, в том числе и биты арифметических условий статусного слова. Для реализации условного перехода следом за такой командой нужно разместить команду безусловного перехода. Именно таким образом ассемблеры для этого микроконтроллера реализуют псевдокоманды условных переходов.

Таблица 2.1. Команды условного перехода микроконтроллеров семейства AVR, цит. по [www.atmel.com]

Команда Описание Условие перехода
SBRC Rr, b Пропустить, если бит в регистре сброшен if (Rr(b)=0) PC = PC + 2 or 3
SBRS Rr, b Пропустить, если бит в регистре установлен if (Rr(b)=1) PC = PC + 2 or 3
SBIC P, b Пропустить, если бит в регистре В/В сброшен if (I/0(P,b)=0) PC = PC + 2 or 3
SBIS P, b Пропустить, если бит в регистре В/В установлен if (I/0(P,b)=l) PC = PC + 2 or 3
BRBS s, k Перейти, если статусный флаг установлен if (SREG(s) =1) PC = PC+k + 1
BRBC s, k Перейти, если статусный флаг сброшен if (SREG(s) =0) PC = PC+k + 1
BREQ k Перейти, если равно if (Z = 1} PC = PC + k + 1
BRNE k Перейти, если не равно if (Z=0) PC = PC + k + 1
BRCS k Перейти, если перенос установлен if (C = 1) PC = PC + k + 1
BRCC k Перейти, если перенос сброшен if (C = 0) PC = PC + k + 1
BRSH k Перейти, если равно или выше if (C = 0) PC = PC + k + 1
BRLO k Перейти, если ниже if (C = 1) PC = PC.+ k + 1
BRMI k Перейти, если минус if (N = 1) PC = PC + k + 1
BRPL k Перейти, если плюс if (N = 0) PC = PC + k + 1
BRGE k Перейти, если больше или равно, знаковое if (N XOR V= 0) PC = PC+ k + 1
BRLT k Перейти, если меньше, знаковое if (N XOR V= 1) PC = PC + k + 1
BRHS k Перейти, если полубайтовый перенос установлен if (H = 1) PC = PC + k + 1
BRHC k Перейти, если полубайтовый перенос сброшен if (H = 0) PC = PC + k + 1
BRTS k Перейти, если Т-флаг установлен if (T = 1) PC = PC + k + 1
BRTC k Перейти, если Т-флаг сброшен if (T = 0) PC = PC + k + 1
BRVS k Перейти, если флаг переполнения установлен if (V = 1) PC = PC + k + 1
BRVC k Перейти, если флаг переполнения сброшен if (V = 0) PC = PC + k + 1
BRIE k Перейти, если прерывания разрешены if (1 = 1) PC = PC + k + 1
BRID k Перейти, если прерывания запрещены if (1 = 0) PC = PC + k + 1

Регистры

Процессор соединен с банками памяти шиной, по которой за один раз передается только одно целое число. Иногда разрядность этой шины тоже называют разрядностью процессора. Тогда 16-разрядный i8088 оказывается 8-разрядным, 32-разрядные MC68000 и 180386SX -- 16-разрядными, а младшие модели современных 64-разрядных RISC-процессоров — 32-разрядными. Для разработчиков аппаратуры такая классификация имеет смысл, а разработчиков программного обеспечения она может ввести в заблуждение.
Арифметико-логическое устройство процессора обычно не может оперировать данными, непосредственно размешенными в оперативной памяти: для выполнения арифметической операции нужен доступ одновременно к трем ячейкам памяти, хранящим операнды и результат.
Для решения этой проблемы любой процессор имеет один или несколько регистров — специализированных запоминающих устройств, обычно вмещающих целое число или адрес. Все процессоры имеют как минимум шесть регистров — регистр для адреса текущей команды (счетчик команд), регистр флагов, где хранятся коды арифметических условий и, кроме того, много другой служебной информации (часто этот регистр называют словом состояния процессора), три буферных регистра АЛУ и буферный регистр, в котором хранится текущая команда (рис. 2.1).

Рис. 2.1. Типичная структура микропроцессора

Из этих регистров программисту доступны только счетчик команд и слово состояния процессора, да и то не всегда. (Под доступностью программисту в данном случае мы подразумеваем возможность указывать регистры в качестве явных и неявных операндов команд).
Регистры, доступные программисту для хранения данных, называются регистрами общего назначения (рис. 2.2). Кроме них, процессор обычно имеет множество других регистров. Некоторые из них интересны только проектировщикам аппаратуры, с другими — например, регистрами диспетчера памяти — мы еще встретимся в следующих главах.
Для доступа к регистрам процессору не нужно занимать внешнюю шину Данных, да и цикл доступа к регистру обычно очень короток и совпадает с циклом работы АЛУ. Следовательно, чем больше у процессора регистров, тем быстрее он может работать с оперативными данными. В те времена, когда компьютеры были большими, стремление к увеличению количества регистров упиралось в стоимостные и электротехнические ограничения. У компьютеров первых поколений для реализации регистров использовались отдельные транзисторы или микросхемы малой степени интеграции, Поэтому они стоили гораздо дороже (в расчете на один бит памяти), потребляли гораздо больше энергии и рассеивали гораздо больше тепла, чем ферритовая память. Переход на современные кристаллы высокой интеграции изменил положение, но не принципиально: триггеры, которые используются для реализации регистров, по перечисленным параметрам всегда хуже, чем исполненное по той же технологии динамическое ОЗУ. Поэтому компьютеры первых поколений обычно имели лишь несколько регистров, а мини- и микрокомпьютеры 70-х и начала 80-х прошлого века — не более нескольких десятков.





Дата публикования: 2014-11-18; Прочитано: 300 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...