Основы компьютерной архитектуры

Наиболее популярной архитектурной базой  современных компьютеров является, так называемая, фон Неймановская архитектура, суть которой  сводится к следующим трём основным принципам:

  • Принцип программного управления;
  • Принцип адресности;
  • Принцип однородной памяти.

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

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

Принцип однородной памяти (принцип хранимой в памяти программы) позволяет использовать одну и ту же  память для хранения в числовой форме как данных, так и программы их обработки. Это делает возможным, при необходимости, обращаться, по ходу выполнения программы, и с данными, и с самой этой программой, одинаковым образом.

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

Основу аппаратной архитектуры МиК, как показано на схеме, составляют процессор, оперативная память (ОП), состоящая из некоторого числа прямо адресуемых ячеек и периферийные  устройства – клавиатура (Kbd) и дисплей (Dsp).

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

Рассмотрим теперь более подробно структуру процессора и ОП  машины МиК.

Для реализации встроенного аппаратного алгоритма выполнения команд, процессор МиК содержит два подблока: УУ – устройство управления и АЛУ – арифметико-логическое устройство.

УУ выполняет административные функции и имеет в своём составе два регистра сверхбыстрой памятирегистр адресов (РА) и регистр команд (РК).

В ходе выполнения программы, РА всегда содержит адрес (указание на место размещения в ОП)  текущей   команды,  т.е. той команды программы, которая подлежит исполнению в рассматриваемый момент времени. В частности, предполагается, что перед началом выполнения (запуском) программы, адрес первой её команды, возможно, вручную, размещается в РА.

Сама текущая  команда, для её анализа и организации исполнения, предварительно копируется  из  ОП в  РК.

АЛУ предназначено, собственно, для осуществления операций “заказываемых” УУ и включает в себя три регистра сверхбыстрой памяти: рабочий регистр (R1), особый  регистр, называемый сумматором (S)  и специальный регистр признака результата (Z).

Исходные данные  к очередной операции готовятся в регистрах  S и R1, а результат,   записывается в  S.

Помимо этого, основного результата в регистре S, некоторые команды, в регистре Z, формируют признак результата (ПР) – целое число   –1, 0, или 1, выбираемое в зависимости от того, является ли результат выполненной операции отрицательным, нулевым или положительным, соответственно. Анализируя ПР, так называемые, команды условного перехода могут, в некоторых случаях, нарушать естественный порядок выполнения команд программы (т.е. порядок, соответствующий порядку их последовательного размещения в ОП), реализуя, тем самым, разветвления и циклы.

 Структура памяти МиК

ОП  МиК состоит из 10000 ячеек, пронумерованных  десятичными числами  из диапазона 0000 – 9999.  Ячейки называются байтами, а их номера - адресами. Каждый байт в определённый момент времени может находиться в одном из 100 различных состояний, кодируемых двузначными  числами 00, 01, … 99.

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

Например, два байта с адресами  0186 и 0187 образуют машинное слово, имеющее адрес 0186.

Слова используются для хранения единственного вида данных МиК - целых десятичных чисел. Не интересуясь деталями принятого при этом способа кодирования, будем предполагать, что полное множество  целых чисел, любое из которых может быть записано в машинное слово МиК, составляет отрезок  [-7999; 7999].

Хотя данные, как мы видим, сохраняются в ОП, собственно, их обработка выполняется внутри процессора, куда они должны быть помещены непосредственно перед выполнением соответствующей операции. Именно этим целям, т.е. для запоминания исходных данных очередной операции, служат регистры   R1 и  S.

Форматы команд МиК

Как упоминалось выше, наряду с данными, в ОП размещаются также и команды их обработки. Подобно данным, команды хранятся в ОП в числовой форме и, в зависимости от их формата, могут занимать один или три байта.

Адресом команды в ОП считается адрес первого (или единственного) из составляющих её байтов. При этом, все команды, составляющие единую программу,  размещаются в памяти строго последовательно, занимая в ней непрерывный участок фиксированной длины. Адрес начала этого участка совпадает с адресом начала первой команды и называется адресом загрузки программы.

В МиК используются два формата машинных команд –  одноадресный и нольадресный, обозначаемых, соответственно, как F1 и F0.

 Команды 1-адресного формата (формата F1) занимают три байта и имеют следующую структуру:

В этой структуре,  “КОП” –  Код ОПерации (двузначное неотрицательное целое число, занимающее первый байт );

А” -  адрес слова ОП (четырёхзначное неотрицательное целое число, которое занимает следующие два байта).

Большая часть команд  данного формата выполняется по схеме  S:=S @ А,  где ":=" имеет смысл присваивания, а  "@" - соответствующая заданному значению “КОП”  произвольная, двуместная операция  МиК (такая, например, как сложение или вычитание).  Т.е., используя в качестве операндов (участников операции) два числа, выбранных, соответственно, из сумматора и из слова ОП с адресом A,  любая команда, отвечающая этой схеме, выполнит операцию @ и запишет полученный результат в  сумматор, замещая его прежнее содержимое.

При этом, значение слова по адресу А непосредственно перед операцией автоматически будет скопировано в R1. Ни содержимое регистра R1, ни содержимое слова с адресом А в результате операции не изменятся.

Например, команда формата F1  “10 0572”  означает: сложить (код операции сложения - 10) содержимое сумматора с числом, выбираемым по  адресу  0572; полученную сумму записать в сумматор на место первого из использованных слагаемых, т.е. в сумматор.

 Команды 0-адресного формата (формата F0)  состоят только  из кода операции и,  занимая в памяти по одному байту,  имеют тривиальную структуру:

Отсутствие адресной части в любой такой  команде означает, что соответствующая операция либо вообще не требует операндов, либо её  операнды представлены регистрами, однозначно фиксированными для этой операции.

Например, команда "02"  означает:  вывести (код операции вывода - 02) число из сумматора на дисплей или, в обозначениях Паскаля, выполнить присваивание RDsp := S (здесь, RDsp понимается как фиксированное имя специальной регистровой переменной, связанной с дисплеем так, что любое присваивание значения этой переменной приводит к отображению присвоенного значения на экране дисплея).

Система команд МиК   

            Рассмотрим теперь полную систему команд  машины МиК. При этом, описывая команды, наряду с числовыми их кодами операций, будем приводить также  мнемонические (cмысловые) обозначения этих кодов.

Начнём с команд формата F0. Их всего три.

 1. Команда ввода (коп - 01, мнемоника – ‘in’)  работает так. В начале её выполнения, выдаётся запрос  на ввод данных с клавиатуры, а именно, в качестве приглашения на выполнение ручных операций, на дисплей, автоматически выводится строка, содержащая в первой своей позиции  мигающий курсор. Далее, выполнение команды приостанавливается в ожидании действий оператора (человека, работающего с программой).

После набора на клавиатуре вводимого числа (по мере набора, оно отображается на экране дисплея ) и нажатия клавиши Enter, набранное число копируется (загружается) в сумматор, и выполнение команды на этом завершается . На основе введённого значения,  в зависимости от его знака  (см. выше)  формируется ПР.

Подобно тому, как информационный обмен между сумматором и дисплеем осуществляется через специальный регистр RDsp   (см. выше), обмен между сумматором и клавиатурой предполагает использование другого специального регистра – RKbd : информация о набираемом на клавиатуре числе попадает в RKbd , а затем, после нажатия “Enter”, - копируется в сумматор.

 2. Команда вывода (коп - 02,  мнемоника – ‘out’). Она двойственна команде ввода и в результате своего выполнения  показывает содержимое сумматора, отображая   его на экран дисплея. На основе выводимого значения здесь также формируется ПР.

 3. Команда останова (коп - 99,  мнемоника -  ‘halt’) просто останавливает процесс выполнения той программы, в которой она была выполнена.

Команд формата F1 - девять. Вот они.

 1. Команда сложения (коп - 10, мнемоника – ‘add’). Добавляет к содержимому сумматора число, выбираемое из слова с указанным в команде адресом А. Сумма записывается в сумматор и на её основе в регистре Z  формируется  ПР.

 2. Команда вычитания (коп - 11, мнемоника – ‘sub’). Вычитает из содержимого сумматора число, выбираемое из слова с указанным в команде адресом А. Разность записывается в сумматор и на её основе в регистре Z  формируется  ПР.

 3. Команда сравнения (коп - 12, мнемоника – ‘сmp’). Выполняется также, как и вычитание, но при этом разность нигде не сохраняется. Команда применяется только для формирования ПР, в зависимости от значения которого, одна из последующих команд условного перехода (см. ниже) может изменить естественный порядок выполнения команд.

 4.  Команда загрузки  (коп - 21, мнемоника – ‘ld’). В сумматор из ОП копируется (загружается)  содержимое слова, имеющего указанный в команде адрес А. На основе загруженного  значения, в регистре Z  формируется  ПР.  Например, если по адресу  0456 хранится число  -55, то в результате выполнения команды “21 0456”, в регистр S будет записано число  -55, а в регистр Z – число  -1.

 5. Команда выгрузки  (коп - 22, мнемоника – ‘st’). Выполняет действие, противоположное загрузке, т.е. записывает (выгружает) в ОП по адресу А содержимое сумматора. На основе выгруженного  значения в регистре Z  формируется  ПР.

 6. Загрузка адреса  (коп - 23, мнемоника – ‘lа’). В сумматор  копируется число, указанное в качестве адресной части А данной команды. Текущее содержимое Z  при этом не меняется. Команда, в частности, полезна для создания неотрицательных числовых констант. Например, после выполнения команды  “23 0001” в сумматор попадёт число 0001, т.е. единица.

7. Безусловный переход   (коп - 30, мнемоника – ‘jmp’). Подобна предыдущей команде, но адрес А копируется не в сумматор, а в регистр РА, явным образом определяя, тем самым,  адрес следующей для выполнения команды. Другими словами, осуществляется безусловная передача управления команде, записанной в ОП по адресу А. Текущее содержимое Z  при этом не меняется.

 8. Условный переход  по нулю  (коп - 33, мнемоника – ‘jz’).  Передаётся управление команде с адресом А, если текущий ПР=0. В противном случае, сохраняется естественный порядок выполнения команд, т.е. выполняется команда, записанная в ОП непосредственно за текущей. Содержимое Z  не меняется.

 9. Безусловный переход  по минусу  (коп - 34, мнемоника – ‘jm’).  Передаётся управление команде с адресом А, если текущий ПР < 0. В противном случае, сохраняется естественный порядок выполнения команд, т.е. выполняется команда, записанная в ОП непосредственно за текущей. Содержимое Z  не меняется.

Алгоритм выполнения команд процессором МиК   

Процессор, выполняя программу на машинном языке (МЯ), следует своему собственному, аппаратно реализованному  алгоритму поведения, который, для команд типа сложения в общих чертах выглядит так:

Шаг_1. УУ считывает из ОП в РК команду, адрес которой содержится в РА;

Шаг_2. К содержимому РА добавляется длина считанной команды (таким образом, в  РА оказывается подготовленным адрес следующей команды);

Шаг_3. Из команды в РК вычленяется КОП (первый байт); если КОП соответствует команде останова (т.е. равен 99), процесс выполнения программы завершается, иначе выполняется следующий шаг;

Шаг_4. КОП посылается в АЛУ, которое настраивается на выполнение соответствующей операции;

Шаг_5. Из команды в РК вычленяется адресная часть (последующие два байта) и происходит обращение по указанному в ней адресу ОП;

Шаг_6. Содержимое  слова по месту обращения к ОП передаётся в регистр R1 АЛУ (теперь уже в АЛУ всё готово для выполнения операции, первый операнд которой должен содержаться к этому моменту в сумматоре S, а второй  - в рабочем регистре R1);

Шаг_7. АЛУ выполняет подготовленную предыдущими шагами операцию и записывает её результат в S;   признак результата при этом записывается  в Z;

Шаг_8. УУ переходит к выполнению шага 1.

 

Конкретные примеры разработки простейших программ на МиК, Мик-эмулятор, на котором Вы сможете реально запускать и выполнять МиК-программы, а так же краткий справочник по МиК находятся здесь.

4.8125
Your rating: Нет Average: 4.8 (16 votes)