8.3.1. Форматы команд

            Большинство команд учебной ЭВМ являются одноадресными или безадресными, длиной в одно машинное слово (6 разрядов). Исключение составляют двухсловные команды с непосредственной адресацией и команда Mov, являющаяся двухадресной.

            В форматах команд выделяется три поля:

            ∙ два старших разряда [0:1] определяют код операции СОР;

            ∙ разряд 2 может определять тип адресации (в одном случае (формат 5а) он

определяет номер регистра);

            ∙ разряды [3:5] могут определять прямой или косвенный адрес памяти, номер регистра (в команде номера двух регистров), адрес перехода или короткий непосредственный операнд. В двухсловных командах непосредственный операнд занимает поле [6:11].

            Полный список форматов команд показан на рис. 8.3, где приняты следующие обозначения:

            ∙ СOР — код операции;

            ∙ ADR — адрес операнда в памяти;

            ∙ ADC — адрес перехода;

            ∙ I — непосредственный операнд;

            ∙ R, Rl, R2 — номер регистра;

            ∙ ТА — тип адресации;

            ∙ Х разряд не используется.

 

 

 

            8.3.2. Способы адресации

            В ЭВМ принято различать пять основных способов адресации: прямая, косвенная, непосредственная, относительная, безадресная.

            Каждый способ имеет разновидности. В модели учебной ЭВМ реализованы семь способов адресации, приведенные в табл. 8.1.

 

 

            8.3.3. Система операций

            Система команд учебной ЭВМ включает команды следующих классов:

            • арифметико-логические и специальные: сложение, вычитание, умножение, деление;

            • пересылки и загрузки: чтение, запись, пересылка (из регистра в регистр), помещение в стек, извлечение из стека, загрузка указателя стека, загрузка базового регистра;

            • ввода/вывода: ввод, вывод;

            • передачи управления: безусловный и шесть условных переходов, вызов подпрограммы, возврат из подпрограммы, цикл, программное прерывание, возврат из прерывания;

            • системные: пустая операция, разрешить прерывание, запретить прерывание, стон.

Список команд учебной ЭВМ приведен в табл. 8.4 и 8.6.

 

            8.4. Состояния и режимы работы ЭВМ

            Ядром УУ ЭВМ является управляющий автомат (УА), вырабатывающий сигналы управления, которые инициируют работу АЛУ, РОН, ОЗУ и УВВ, передачу информации между регистрами устройств ЭВМ и действия над содержимым регистров УУ.

            ЭВМ может находиться в одном из двух состояний: Останов и Работа. В состояние Работа ЭВМ переходит по действию команд Пуск или Шаг. Команда Пуск запускает выполнение программы, представляющую собой последовательность команд, записанных в ОЗУ, в автоматическом режиме до команды от или точки останова. Программа выполняется по командам, начиная с ячейки ОЗУ, на которую указывает РС, причем изменение состояний объектов модели отображается в окнах обозревателей.

            В состояние Останов ЭВМ переходит по действию команды Стоп или автоматически в зависимости от установленного режима работы.

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

            В состоянии Останов допускается просмотр и модификация объектов модели: регистров процессора и РОН, ячеек ОЗУ, устройств ввода/вывода. В процессе модификации ячеек ОЗУ и РОН можно вводить данные для программы, в ячейки ОЗУ — программу в кодах. Кроме того, в режиме Останов можно менять параметры модели и режимы ее работы, вводить и/или редактировать программу в мнемокодах, ассемблировать мнемокоды, выполнять стандартные операции с файлами.

 

            8.5. Интерфейс пользователя

            В программной модели учебной ЭВМ использован стандартный интерфейс Windows, реализованный в нескольких окнах.

            Основное окно модели Модель учебной ЭВМ содержит основное меню и кнопки на панели управления. В рабочее поле окна выводятся сообщения о функционировании системы в целом. Эти сообщения группируются в файле logfile.txt (по умолчанию), сохраняются на диске и могут быть про анализированы после завершения сеанса работы с моделью. Меню содержит следующие пункты и команды:

Файл:

    • неактивные команды;

    • Выход.

Вид:

    • Показать все;

    • Скрыть все;

    • Процессор;

      • Микрокомандный уровень;

      • Память;

      • Кэш-память;

      • Программа;

      • Текст программы.

Внешние устройства:

      • Менеджер ВУ;

      • окна подключенных ВУ;

Работа:

      • Пуск;

      • Стоп;

      • Шаг;

      • Режим микрокоманд;

      • Кэш-память;

      • Настройки.

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

            Команды меню Работа позволяют запустить программу в автоматическом (команда Пуск) или шаговом (команда Шаг) режиме, остановить выполнение программы в модели процессора (команда Стоп). Эти команды могут выполняться при нажатии соответствующих одноименных кнопок на панели инструментов основного окна.

            Команда Режим микрокоманд включает/выключает микрокомандный режим работы процессора, а команда Кэш-память подключает/отключает в системе модель этого устройства.

            Команда Настройки открывает диалоговое окно Параметры системы, позволяющее установить задержку реализации командного цикла (при выполнении программы в автоматическом режиме), а так же установить параметры файла logfile.txt, формируемого системой и записываемого на диск.

 

            8.5.1. Окна основных обозревателей системы

     Окно Процессор

            Окно Процессор (рис. 8.4) обеспечивает доступ ко всем регистрам и флагам процессора.

 

 

Программно-доступные регистры и флаги:

            Асс — аккумулятор;

            PC — счетчик адреса команды, содержащий адрес текущей команды;

            SP — указатель стека, содержащий адрес верхушки стека;

            RB — регистр базового адреса, содержащий базовый адрес;

            RA — регистр адреса, содержащий исполнительный адрес при косвенной адресации;

            • IR — входной регистр;

            • OR — выходной регистр;

            • I — флаг разрешения прерываний.

            Системные регистры и флаги:

            DR — регистр данных АЛУ, содержащий второй операнд;

            MDR — регистр данных ОЗУ;

            MAR — регистр адреса ОЗУ;

            RDR — регистр данных блока РОН;

            RАRрегистр адреса блока РОН;

            CR — регистр команд, содержащий поля:

                          COP — код операции;

                          ТА — тип адресации;

                          ADR — адрес или непосредственный операнд;

                          Z — флаг нулевого значения Асс

                          S — флаг отрицательного значения Асс;

                         ОV флаг переполнения.

            Регистры Асс, DR, IR, OR, CR и все ячейки ОЗУ и РОН имеют длину 6 десятичных разрядов, регистры РС, SP, RA и RB — 3 разряда. В окне Процессор отражаются текущие значения регистров и флагов, причем в состоянии Останов все регистры, включая регистры блока РОН, и флаги (кроме флага 1) доступны для непосредственного редактирования.

           Элементы управления окна Процессор включают меню и кнопки, вызывающие команды:

            Сохранить;

            Загрузить;

            Reset;

            Reset RO-R9 (только команда меню Работа).

            Команды Сохранить, Загрузить позволяют сохранить текущее значение регистров и флагов процессора в файле и восстановить состояние процессора из файла. Команда Reset и кнопка R устанавливают все регистры (в т. ч. блок РОН) в начальное (нулевое) значение. Содержимое ячеек памяти при этом не меняется. Выполняемая лишь из меню Работа команда Reset RO-К9. очищает только регистры блока РОН.

 

            Окно Память

            Окно Память (рис. 8.5) отражает текущее состояние ячеек ОЗУ. В этом окне допускается редактирование содержимого ячеек, кроме того, предусмотрена возможность выполнения (через меню или с помощью кнопок панели инструментов) пяти команд: Сохранить, Загрузить, Перейти к, Вставить, Убрать.

            Команды Сохранить, Загрузить во всех окнах, где они предусмотрены, работают одинаково — сохраняют в файле текущее состояние объекта (в данном случае памяти) и восстанавливают это состояние из выбранного файла, причем файл в каждом окне записывается по умолчанию с характерным для этого окна расширением.

            Команда Перейти к открывает диалоговое окно, позволяющее перейти на заданную ячейку ОЗУ.

            Команда Убрать открывает диалог, в котором указывается диапазон ячеек с т по n. Содержимое ячеек в этом диапазоне теряется, а содержимое ячеек [(n+1): 999] перемещается в соседние ячейки с меньшими адресами. Освободившиеся ячейки с адресами 999, 998, ... заполняются нулями.

 

 

 

            Команда Вставить, позволяющая задать номера ячеек, перемещает содержимое всех ячеек, начиная от m-й на nт позиций в направлении больших адресов, ячейки заданного диапазона [т:n] заполняются нулями, а содержимое последних ячеек памяти теряется.

 

            Окно Текст программы

            Окно Текст программы (рис. 8.6) содержит стандартное поле текстового редактора, в котором можно редактировать тексты, загружать в него текстовые файлы и сохранять подготовленный текст в виде файла.

 Команды меню Файл:

             Новая — открывает новый сеанс редактирования;

             Загрузить — открывает стандартный диалог загрузки файла в окно редактора;

             Сохранить — сохраняет файл под текущим именем;

             Сохранить как — открывает стандартный диалог сохранения файла;

             Вставить — позволяет вставить выбранный файл в позицию курсора.

            Все перечисленные команды, кроме последней, дублированы кнопками на панели инструментов окна. На той же панели присутствует еще одна кнопка — Компилировать, которая запускает процедуру ассемблирования текста в поле редактора.

            Ту же процедуру можно запустить из меню Работа. Команда Адрес вставки позволяет задать адрес ячейки ОЗУ, начиная с которой программа будет размещаться в памяти. По умолчанию этот адрес принят равным 0.

            Ниже области редактирования в строку состояния выводится позиция текущей строки редактора — номер строки, в которой находится курсор.

 

 

 

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

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

            Набор текста программы производится по стандартным правилам языка ассемблера. В каждой строке может содержаться метка, одна команда и комментарий. Метка отделяется от команды двоеточием, символы после знака "точка с запятой" до конца строки игнорируются компилятором и могут рассматриваться как комментарии. Строка может начинаться с; и, следовательно, содержать только комментарии.

 

            Окно Программа

            Окно Программа (рис. 8.7) отображает таблицу, имеющую 300 строк и 4 столбца. Каждая строка таблицы соответствует дизассемблированной ячейке ОЗУ. Второй столбец содержит адрес ячейки ОЗУ, третий — дизассемблированный мнемокод, четвертый — машинный код команды. В первом столбце может помещаться указатель -> на текущую команду (текущее значение РС) и точка останова — красная заливка ячейки.

 

 

 

 

            Окно Программа позволяет наблюдать процесс прохождения программы. В этом окне ничего нельзя редактировать. Органы управления окна позволяют сохранить содержимое окна в виде текстового файла, выбрать начальный адрес области ОЗУ, которая будет дизассемблироваться (размер области постоянный — 300 ячеек), а также установить/снять точку останова. Последнее можно проделать тремя способами: командой Точка останова из меню Работа, кнопкой на панели инструментов или двойным щелчком мыши в первой ячейке соответствующей строки. Характерно, что прочитать в это окно ничего нельзя. Сохраненный текстовый asm-файл можно загрузить в окно Текст программы, ассемблировать его и тогда дизассемблированное значение заданной области памяти автоматически появится в окне Программа. Такую процедуру удобно использовать, если программа изначально пишется или редактируется непосредственно в памяти в машинных кодах.

            Начальный адрес области дизассемблирования задается в диалоге командой Начальный адрес меню Работа.

 

            Окно Микрокомандный уровень

            Окно Микрокомандный уровень (рис. 8.8) используется только в режиме микрокоманд, который устанавливается командой Режим микрокоманд меню Работа. В это окно выводится мнемокод выполняемой команды, список микрокоманд, ее реализующих, и указатель на текущую выполняемую микрокоманду.

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

            Если открыть окно Микрокомандный уровень, не установив режим микрокоманд в меню Работа, то после начала выполнения программы в режиме Шаг (или в автоматическом режиме) в строке сообщений окна будет выдано сообщение "Режим микрокоманд неактивен".

 

 

 

            Окно Кэш-память

            Окно Кэш-память используется в режиме с подключенной кэш-памятью. Подробнее смотрите об этом режиме в разд. 8.8.

           

            8.6. Внешние устройства

            Модели внешних устройств (ВУ), используемые в описываемой системе, реализованы по единому принципу. С точки зрения процессора они представляют собой ряд программно-доступных регистров, лежащих в адресном пространстве ввода/вывода. Размер регистров ВУ совпадает с размером ячеек памяти и регистров данных процессора — шесть десятичных разрядов.

            Доступ к регистрам ВУ осуществляется по командам IN аа, OUT аа, где аа-

двухразрядный десятичный адрес регистра ВУ. Таким образом, общий объем адресного пространства ввода/вывода составляет 100 адресов. Следует помнить, что адресные пространства памяти и ввода/вывода в этой модели разделены.

            Разные ВУ содержат различное число программно-доступных, регистров, каждому из которых соответствует свой адрес, причем нумерация адресов всех ВУ начинается с 0. При создании ВУ ему ставится в соответствие базовый адрес в пространстве ввода/вывода, и все адреса его регистров становятся смещениями относительно этого базового адреса.

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

            Если ВУ способно формировать запрос на прерывание, то при создании ему ставится в соответствие вектор прерывания — десятичное число. Разным ВУ должны назначаться различные векторы прерываний.

            Программная модель учебной ЭВМ комплектуется набором внешних устройств, включающим:

            • контроллер клавиатуры;

            • дисплей;

            • блок таймеров;

            • тоногенератор,

которым по умолчанию присвоены параметры, перечисленные в табл. 8.2.

 

 

 

 

 

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

            В описываемой версии системы не предусмотрена возможность подключения в систему нескольких одинаковых устройств.

            Большинство внешних устройств содержит регистры управления CR и состояния SR, причем обычно регистры CR доступны только по записи, а SR — по чтению.

            Регистр CR содержит флаги и поля, определяющие режимы работы ВУ, а SR — флаги, отражающие текущее состояние BУ. Флаги SR устанавливаются аппаратно, но сбрасываются программно (или по внешнему сигналу). Поля и флаги CR устанавливаются и сбрасываются программно при записи кода данных в регистр CR или специальными командами.

            Контроллер ВУ интерпретирует код, записываемый по адресу CR как команду, если третий разряд этого кода равен 1, или как записываемые в CR данные, если третий разряд равен 0. В случае получения командного слова запись в регистр CR не производится, а пятый разряд слова рассматривается как код операции.

 

            8.6.1. Контроллер клавиатуры

            Контроллер клавиатуры (рис. 8.9) представляет собой модель внешнего устройства, принимающего ASCII-коды от клавиатуры ПЭВМ.

            Символы помещаются последовательно в буфер символов, размер которого установлен равным 50 символам, и отображаются в окне обозревателя (рис. 8.10).

            В состав контроллера клавиатуры входят три программно-доступных регистра:

             DR (адрес 0) — регистр данных;

             CR (адрес 1) — регистр управления, определяет режимы работы контроллера и содержит следующие флаги:

            • Е — флаг разрешения приема кодов в буфер;

            • 1 — флаг разрешения прерывания;

            • S — флаг режима посимвольного ввода.

 SR (адрес 2) — регистр состояния, содержит два флага:

            Err — флаг ошибки;

            • Rd — флаг готовности.

 

 

 

            Регистр данных DR доступен только для чтения, через него считываются ASCII-коды из буфера, причем порядок чтения кодов из буфера соответствует порядку их записи в буфер — каждое чтение по адресу 0 автоматически перемещает указатель чтения буфера. В каждый момент времени DR содержит код символа по адресу указателя чтения буфера.

            Флаги регистра управления CR устанавливаются и сбрасываются программно.

            Флаг Е, будучи установленным, разрешает прием кодов в буфер. При Е =0 контроллер игнорирует нажатие на клавиатуре, прием кодов в буфер не производится. На считывание кодов из буфера флаг Е влияния не оказывает.

            Флаг I, будучи установленным, разрешает при определенных условиях формирование контроллером запроса на прерывание. При 1 = 0 запрос на прерывание не формируется.

            Флаг S = 1 устанавливает т. н. режим посимвольного ввода, иначе контроллер работает в обычном режиме. Флаг S устанавливается и сбрасывается программно, кроме того, S сбрасывается при нажатии кнопки Очистить буфер в окне Контроллер клавиатуры.

            Условия формирования запроса на прерывание определяются, с одной стороны, значением флага разрешения прерывания 1, с другой — режимом работы контроллера. В режиме посимвольного ввода запрос на прерывание формируется после ввода каждого символа (разумеется, при I= 1), в обычном режиме запрос будет сформирован по окончании набора строки.

            Завершить набор строки можно, щелкнув по кнопке Завершить ввод в окне Контроллер клавиатуры (см. рис. 8.10). При этом устанавливается флаг готовности Rd (от англ. ready) в регистре состояния SR. Флаг ошибки Err (от англ. error) в том же регистре устанавливается при попытке ввода в буфер 51-го символа. Ввод 51-го и всех последующих символов блокируется.

            Сброс флага Rd осуществляется автоматически при чтении из регистра DR, флаг Err сбрасывается программно. Кроме того, оба эти флага сбрасываются при нажатии кнопки  Очистить буфер в окне Контроллер клавиатуры; одновременно со сбросом флагов производится очистка буфера — весь буфер заполняется кодами 00h, и указатели записи и чтения устанавливаются на начало буфера.

            Для программного управления контроллером предусмотрен ряд командных слов. Все команды выполняются при записи по адресу регистра управления CR кодов с 1 в третьем разряде.

            Контроллер клавиатуры интерпретирует следующие командные слова:

             ххх101 — очистить буфер (действие команды эквивалентно нажатию кнопки Очистить буфер);

             xxxl02 — сбросить флаг Err в регистре SR;

             ххх103 — установить флаг S в регистре CR;

             ххх104 — сбросить флаг S в регистре CR.

Если по адресу 1 произвести запись числа ххх0nn, то произойдет изменение

4-го и 5-ro разрядов регистра CR по следующему правилу:

 

 

            8.6.2. Дисплей

            Дисплей (рис. 8.11) представляет собой модель внешнего устройства, реализующую функции символьного дисплея. Дисплей может отображать символы, задаваемые ASCII-кодами, поступающими на его регистр данных. Дисплей включает:

            видеопамять объемом 128 слов (ОЗУ дисплея);

            • символьный экран размером 8 строк по 16 символов в строке;

            • четыре программно-доступных регистра:

            DR (адрес 0) — регистр данных;

            • CR (адрес 1) — регистр управления;

            • SR (адрес 2) — регистр состояния;

            AR (адрес 3) — регистр адреса.

 

 

 

            Через регистры адреса AR и данных DR по записи и чтению осуществляется доступ к ячейкам видеопамяти. При обращении к регистру DR по записи содержимое аккумулятора записывается в DR и в ячейку видеопамяти, адрес которой установлен в регистре AR.

            Регистр управления CR доступен только по записи и содержит в 4-м и 5-м разрядах соответственно два флага:

             Е — флаг разрешения работы дисплея; при Е = 0 запись в регистры AR и DR блокируется;

             А — флаг авто инкремента адреса; при А = 1 содержимое AR автоматически увеличивается на 1 после любого обращения к регистру DR — по записи или чтению.

Изменить значения этих флагов можно, если записать по адресу CR (по умолчанию — 11) код xxx0nn, при этом изменение 4-гo и 5-го разрядов регистра CR произойдет согласно выражению (8.1).

            Для программного управления дисплеем предусмотрены две команды, коды которых должны записываться по адресу регистра CR, причем в третьем разряде командных слов обязательно должна быть 1:

            • ххх101 — очистить дисплей (действие команды эквивалентно нажатию кнопки Очистить в окне Дисплей), при этом очищается видеопамять (в каждую ячейку записывается код пробела — 032),

            • устанавливается в 000 регистр адреса AR и сбрасываются флаги ошибки Err и авто инкремента А;

            xxx102 сбросить флаг ошибки Err

 

 

 

            Регистр состояния SR доступен только по чтению и содержит единственный флаг (в пятом разряде) ошибки Err. Этот флаг устанавливается аппаратно при попытке записать в регистр адреса число, большее 127, причем как в режиме прямой записи в AR, так и в режиме авто инкремента после обращения по адресу 127. Сбрасывается флаг Err программно или при нажатии кнопки Очистить в окне Дисплей (рис. 8.12).

 

            8.6.3. Блок таймеров

            Блок таймеров (рис. 8.13) включает в себя три однотипных канала, каждый из которых содержит:

            • пятиразрядный десятичный реверсивный счетчик Т, на вход которого поступают метки времени (таймер);

            • программируемый предделитель D;

            • регистр управления таймером CTR;

            • флаг переполнения таймера FT.

            Регистры таймеров Т доступны по записи и чтению (адреса 1, 3, 5 соответственно для Tl, Т2, T3). Программа в любой момент может считать текущее содержимое таймера или записать в него новое значение.

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

 

 

 

 

 

            Регистры управления CTR доступны по записи и чтению (адреса 2, 4, 6) и содержат следующие поля:

             Т (разряд 5) — флаг включения таймера;

             EI (разряд 4) флаг разрешения формирования запроса на прерывание при переполнении таймера;

             I/D) (разряд 3) — направление счета (инкремент/декремент), при I/D=0 таймер работает на сложение, при I/D = 1 — на вычитание;

             k (разряды [1:2]) — коэффициент деления предделителя (от 1 до 99).

            Флаги переполнения таймеров собраны в один регистр — доступный только по чтению регистр состояния SR, имеющий адрес О. Разряды регистра (5, 4 и 3 для Tl, Т2, T3 соответственно) устанавливаются в 1 при переполнении соответствующего таймера. Для таймера, работающего на сложение, переполнение наступает при переходе его состояния из 99 999 в О, для вычитающего таймера — переход из 0 в 99 999.

            В окне обозревателя (рис. 8.14) предусмотрена кнопка Сброс, нажатие которой сбрасывает в 0 все регистры блока таймеров, кроме CTR, которые устанавливаются в состояние 001000. Таким образом, все три таймера обнуляются, переключаются в режим инкремента, прекращается счет, запрещаются прерывания, сбрасываются флаги переполнения и устанавливаются коэффициенты деления предделителей равными 01.

 

 

 

            Программное управление режимами блока таймеров осуществляется путем записи в регистры CTR соответствующих кодов. Запись по адресу SR числа с 1 в третьем разряде интерпретируется блоком таймеров как команда, причем младшие разряды этого числа определяют код команды:

             хххl00 — общий сброс (эквивалентна нажатию кнопки Сброс в окне обозревателя);

             xxx101 — сброс флага переполнения таймера FT1;

             xxxl02 — сброс флага переполнения таймера FT2;

             ххх103 — сброс флага переполнения таймера FT3.

 

            8.6.4. Тоногенератор

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

            FR (адрес 0) — регистр частоты звучания (Гц):

            LR (адрес 1) — регистр длительности звучания (мс).

            По умолчанию базовый адрес тоногенератора — 30. Сначала следует записать в FR требуемую частоту тона в герцах, затем в LR — длительность звучания в миллисекундах. Запись числа по адресу регистра LR одновременно является командой на начало звучания.

 

            8.7. Подсистема прерываний

            В модели учебной ЭВМ предусмотрен механизм векторных внешних прерываний. Внешние устройства формируют запросы на прерывания, которые поступают на входы контроллера прерываний. При подключении ВУ, способного формировать запрос на прерывание, ему ставится в соответствие номер входа контроллера прерываний — вектор прерывания, принимающий значение в диапазоне 09.

            Контроллер передает вектор, соответствующий запросу, процессору, который начинает процедуру обслуживания прерывания.

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

            Механизм прерываний, реализованный в модели учебной ЭВМ, поддерживает таблицу векторов прерываний, которая создается в оперативной памяти моделью операционной системы (если она используется) или непосредственно пользователем.

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

            Таблица прерываний в рассматриваемой модели жестко фиксирована — она занимает ячейки памяти с адресами 100 — 109. Таким образом, адрес обработчика с вектором 0 должен располагаться в ячейке 100, с вектором 2 — в ячейке 102. При работе с прерываниями не рекомендуется использовать ячейки 100 — 109 для других целей.

            Процессор начинает обработку прерывания (если они разрешены), завершив текущую команду. При этом он:

            1. Получает от контроллера вектор прерывания.

            2. Формирует и помещает в верхушку стека слово, три младших разряда ([3:5]) которого — текущее значение РС (адрес возврата из прерывания), а разряды [1:2] сохраняют десятичный эквивалент шестнадцатеричной цифры, определяющей значение вектора флагов (I, ОV, S, Z). Например, если I = 1, ОV = 0, S = 1, Z = 1, то в разряды [1:2] запишется число 1110 =10112.

            3. Сбрасывает в 0 флаг разрешения прерывания I.

            4. Извлекает из таблицы векторов прерываний адрес обработчика, соответствующий обслуживаемому вектору, и помещает его в РС, осуществляя тем самым переход на подпрограмму обработчика прерывания.

            Таким образом, вызов обработчика прерывания, в отличие от вызова подпрограммы, связан с помещением в стек не только адреса возврата, но и текущего значения вектора флагов. Поэтому последней командой подпрограммы обработчика должна быть команда IRET, которая не только возвращает в РС три младшие разряда ячейки — верхушки стека (как RET), но и восстанавливает те значения флагов, которые были в момент перехода на обработчик прерывания.

            Не всякое событие, которое может вызвать прерывание, приводит к прерыванию текущей программы. В состав процессора входит программно-доступный флаг I разрешения прерывания. При I = 0 процессор не реагирует на запросы прерываний. После сброса процессора флаг I так же сброшен и все прерывания запрещены. Для того чтобы разрешить прерывания, следует в программе выполнить команду EI (от англ. enable interrupt).

            Выше отмечалось, что при переходе на обработчик прерывания флаг I автоматически сбрасывается, в этом случае прервать обслуживание одного прерывания другим прерыванием нельзя. По команде IRET значение флагов восстанавливается, в т. ч. вновь устанавливается I = 1, следовательно, в основной программе прерывания опять разрешены.

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

            Таким образом, флаг I разрешает или запрещает все прерывания системы.

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

            Как правило, каждое внешнее устройство, которое может вызвать прерывание, содержит в составе своих регистров разряд флага разрешения прерывания (см. формат регистров CR и CTR на рис. 8.9, 8.13), по умолчанию установленный в 0. Если оставить этот флаг в нуле, то внешнему устройству запрещается формировать запрос контроллеру прерываний.

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

            Поэтому в системах команд многих ЭВМ, в т. ч. и нашей модели, имеются команды вызова прерываний — INT n (в нашей модели n є {0, 1, ..., 9}), где n — вектор прерывания. Процессор, выполняя команду INT n, производит те же действия, что и при обработке прерывания с вектором л.

            Характерно, что с помощью команды INT л можно вызвать обработчик прерывания даже в том случае, когда флаг разрешения прерывания I сброшен.

 

            8.8. Программная модель кэш-памяти

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

            Кэш-память содержит N ячеек (в модели N может выбираться из множества (4, 8, 16, 32}), каждая из которых включает трехразрядное поле тега (адреса ОЗУ), шестиразрядное поле данных и три однобитовых признака (флага):

            Z — признак занятости ячейки;

            U — признак использования;

            W признак записи в ячейку.

            Таким образом, каждая ячейка кэш-памяти может дублировать одну любую

ячейку ОЗУ, причем отмечается ее занятость (в начале работы модели все ячейки кэш-памяти свободны, VZi; = 0), факт записи информации в ячейку во время пребывания ее в кэш-памяти, а также использование ячейки (т. е. любое обращение к ней).

 

 

            Текущее состояние кэш-памяти отображается на экране в отдельном окне в форме таблицы, причем количество строк соответствует выбранному числу ячеек кэш. Столбцы таблицы определяют содержимое полей ячеек, например, так, как показано в табл. 8.3.

 

 

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

            Напомним, что при сквозной записи при кэш-попадании в процессорных циклах записи осуществляется запись как в ячейку кэш-памяти, так и в ячейку ОЗУ, а при обратной записи — только в ячейку кэш-памяти, причем эта ячейка отмечается битом записи (Wi:=1). При очистке ячеек, отмеченных битом записи, необходимо переписать измененное значение ноля данных в соответствующую ячейку ОЗУ.

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

В модели реализованы три различных алгоритма замещения строк:

·        случайное замещение, при реализации которого номер ячейки кэш-памяти выбирается случайным образом;

·        очередь, при которой выбор замещаемой ячейки определяется временем пребывания ее в кэш-памяти;

·        Бит использования, случайный выбор осуществляется только из тех ячеек, которые имеют нулевое значение флага использования.

            Напомним, что бит использования устанавливается в 1 при любом обращении к ячейке, однако, как только все биты Ui. установятся в 1, все они тут же сбрасываются в 0, так что в кэш всегда ячейки разбиты на два непересекающихся подмножества по значению бита U — те, обращение к которым состоялось относительно недавно (после последнего сброса вектора U) имеют значение U = 1, иные — со значением U = 0 являются "кандидатами на удаление" при использовании алгоритма замещения "бит использования".

            Если в параметрах кэш-памяти установлен флаг "с учетом бита записи", то все три алгоритма замещения осуществляют поиск "кандидата на удаление" прежде всего среди тех ячеек, признак записи которых не установлен, а при отсутствии таких ячеек (что крайне маловероятно) — среди всех ячеек кэш- памяти. При снятом флаге "с учетом бита записи" поиск осуществляется по всем ячейкам кэш-памяти без учета значения W.

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

 

 

где

            K — коэффициент эффективности работы кэш-памяти;

            So, — общее число обращений к памяти;

            SK — число кэш-попаданий;

            SKW — число сквозных записей при кэш-попадании (в режиме сквозной записи);

            SiKW— число обратных записей (в режиме обратной записи).

           

            8.9. Вспомогательные таблицы

            В данном разделе представлены вспомогательные таблицы (табл. 8.4 — 8.8) для работы с моделью учебной ЭВМ.

 

 

            В табл. 8.6 приняты следующие обозначения:

             DD — данные, формируемые командой в качестве (второго) операнда: прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд;

             R *— содержимое регистра или косвенно адресуемая через регистр ячейка памяти;

             ADR* — два младших разряда ADR поля регистра CR;

             V адрес памяти, соответствующий вектору прерывания;

             М (*) — ячейка памяти, прямо или косвенно адресуемая в команде;

             I — пятиразрядный непосредственный операнд со знаком.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ГЛАВА 9

Лабораторные работы

            Цикл лабораторных работ рассчитан на выполнение студентами в рамках курса "Архитектура ЭВМ" и других, подобных по содержанию.

            Цикл включает работы различного уровня. Лабораторные работы №1 — 4 ориентированны на первичное знакомство с архитектурой процессора, системой команд, способами адресации и основными приемами программирования на машинно-ориентированном языке. Лабораторная работа № 5 иллюстрирует реализацию командного цикла процессора на уровне микроопераций. Лабораторная работа № 6 посвящена способам организации связи процессора с внешними устройствами, а в лабораторных работах №7 и 8 рассматривается организация кэш-памяти и эффективность различных алгоритмов замещения. Все работы выполняются на программной модели учебной ЭВМ и взаимодействующих с ней в программных моделях ВУ и кэш-памяти, описанных в главе 8.

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

 

9.1. Лабораторная работа № 1.

Архитектура ЭВМ и система команд

9.1.1. Общие положения

 

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

            Для того чтобы получить результат выполнения программы, пользователь должен:

            • ввести программу в память ЭВМ;  

            • определить, если это необходимо» содержимое ячеек ОЗУ и РОН,

            • содержащих исходные данные, а также регистров IR и BR;

            • установить в РС стартовый адрес программы;

            • перевести модель в режим Работа.

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

            Цель настоящей лабораторной работы — знакомство с интерфейсом модели ЭВМ, методами ввода и отладки программы, действиями основных классов команд и способов адресации. Для этого необходимо ввести в память ЭВМ и выполнить в режиме Шаг некоторую последовательность команд (определенную вариантом задания) и зафиксировать все изменения на уровне программно-доступных объектов ЭВМ, происходящие при выполнении этих команд.

            Команды в память учебной ЭВМ вводятся в виде шестиразрядных десятичных чисел (см. форматы команд на рис. 8.3, коды команд и способов адресации в табл. 8.2 — 8.4).

            В настоящей лабораторной работе будем программировать ЭВМ в машинных кодах.

           

            9.1.2. Пример 1

            Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаг и зафиксировать изменение состояний программно-доступных объектов ЭВМ (табл. 9.1)

 

 

            Введем полученные коды последовательно в ячейки ОЗУ, начиная с адреса 000. Выполняя команды в режиме Шаг, будем фиксировать изменения программно-доступных объектов (в данном случае это Асс, РС и ячейки ОЗУ 020 и 030) в табл. 9.2.

 

 

 

            9.1.3. Задание 1

            1. Ознакомиться с архитектурой ЭВМ (см. часть I).

            2. Записать в ОЗУ "программу", состоящую из пяти команд — варианты задания выбрать из табл.9.3. Команды разместить в последовательных ячейках памяти.

            3. При необходимости установить начальное значение в устройство ввода IR.

            4. Определить те программно-доступные объекты ЭВМ, которые будут изменяться при выполнении этих команд.

            5. Выполнить в режиме Шаг введенную последовательность команд, фиксируя изменения значений объектов, определенных в п. 4, в таблице (см. форму табл. 9.2).

            6. Если в программе образуется цикл, необходимо просмотреть не более двух повторений каждой команды, входящей в тело цикла.

 

 

 

 

 

 

 

            9 1.4. Содержание отчета

            1. Формулировка варианта задания.

            2. Машинные коды команд, соответствующих варианту задания.

            3. Результаты выполнения последовательности команд в форме табл. 9.2.

 

            9.1.5. Контрольные вопросы

            1. Из каких основных частей состоит ЭВМ и какие из них представлены в модели?

            2. Что такое система команд ЭВМ?

            3. Какие классы команд представлены в модели?

            4. Какие действия выполняют команды передачи управления?

            5. Какие способы адресации использованы в модели ЭВМ? В чем отличие

между ними?

            6. Какие ограничения накладываются на способ представления данных в модели ЭВМ?

            7. Какие режимы работы предусмотрены в модели и в чем отличие между ними?

            8. Как записать программу в машинных кодах в память модели ЭВМ?

            9. Как просмотреть содержимое регистров процессора и изменить содержимое некоторых регистров?

            10. Как просмотреть и, при необходимости, отредактировать содержимое ячейки памяти?

            11. Как запустить выполнение программы в режиме приостановки работы после выполнения каждой команды?

            12. Какие способы адресации операндов применяются в командах ЭВМ? 13. Какие команды относятся к классу передачи управления?

 

            9.2. Лабораторная работа № 2.

             Программирование разветвляющегося процесса

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

 

            9.2.1. Пример 2

            В качестве примера (несколько упрощенного по сравнению с заданиями лабораторной работы № 2) рассмотрим программу вычисления функции

 

причем х вводится с устройства ввода IR, результат у выводится на OR. Граф-схема алгоритма решения задачи показана на рис. 9.1.

 

 

 

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

            Оценив размер программы примерно в 20 — 25 команд отведем для области данных ячейки ОЗУ, начиная с адреса 030. Составленная программа с комментариями представлена в виде табл. 9.4.

 

 

 

 

            9.2.2. Задание 2

            1. Разработать программу вычисления и вывода значения функции:

 

 

для вводимого из IR значения аргумента х. Функции и допустимые пределы изменения аргумента приведены в табл. 9.5, варианты заданий  в табл. 9.6.

            2. Исходя из допустимых пределов изменения аргумента функций (табл. 9.5) и значения параметра а для своего варианта задания (табл. 9.6) выделить на числовой оси Ох области, в которых функция у вычисляется по представленной в п. 1 формуле, и недопустимые значения аргумента. На недопустимых значениях аргумента программа должна выдавать на OR максимальное отрицательное число: 199 999.

            3. Ввести текст программы в окно Текст программы, при этом возможен набор и редактирование текста непосредственно в окне Текст программы или загрузка текста из файла, подготовленного в другом редакторе.

            4. Ассемблировать текст программы, при необходимости исправить синтаксические ошибки.

            5. Отладить программу. Для этого:

            а) записать в IR значение аргумента х > а (в области допустимых значений);

            б) записать в РС стартовый адрес программы;

            в) проверить правильность выполнения программы (т. е. правильность результата и адреса останова) в автоматическом режиме. В случае наличия ошибки выполнить кп. 5, г и 5, д; иначе перейти к п. 5, е;

            г) записать в РС стартовый адрес программы;

            д) наблюдая выполнение программы в режиме Шаг, найти команду, являющуюся причиной ошибки; исправить ее; выполнить кп. 5, а — 5, в;

            е) записать в IR значение аргумента х < а (в области допустимых значений); выполнить кп. 5, б и 5, в;

            ж) записать в IR недопустимое значение аргумента х и выполнить кп. 5, б и 5, в.

            6. Для выбранного допустимого значения аргумента х наблюдать выполнение отлаженной программы в режиме Шаг и записать в форме табл. 9.2 содержимое регистров ЭВМ перед выполнением каждой команды.

 

 

 

 

            9.2.3. Содержание отчета

Отчет о лабораторной работе должен содержать следующие разделы:

            1. Формулировка варианта задания.

            2. Граф-схема алгоритма решения задачи.

            3. Размещение данных в ОЗУ.

            4. Программа в форме табл. 9.4.

            5. Последовательность состояний регистров ЭВМ при выполнении программы в режиме Шаг для одного значения аргумента.

            6. Результаты выполнения программы для нескольких значений аргумента, выбранных самостоятельно.

 

            9.2.4. Контрольные вопросы

            1. Как работает механизм косвенной адресации?

            2. Какая ячейка будет адресована в команде с косвенной адресацией через ячейку 043, если содержимое этой ячейки равно 102 347?

            3. Как работают команды передачи управления?

            4. Что входит в понятие "отладка программы"?

            5. Какие способы отладки программы можно реализовать в модели?

 

           

 

            9.3. Лабораторная работа № 3. Программирование цикла с переадресацией

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

 

            9.3.1. Пример 3

            Разработать программу вычисления суммы элементов массива чисел С1, C2, ..., Сn Исходными данными в этой задаче являются: n количество суммируемых чисел и С1, С2, ..., Cn— массив суммируемых чисел. Заметим, что должно выполняться условие n>1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последовательными адресами. Результатом является сумма S.

            Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива — 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042, ..., 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: А, — адрес числа Сn, I є {1,2, ...,10}; ОЗУ (Аi)- число по адресу Аi, S — текущая сумма; k — счетчик цикла, определяющий число повторений тела цикла.

            Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная

с адреса 000, примерная оценка объема программы — 20 команд; промежуточные переменные: А, — в ячейке ОЗУ с адресом 030, k — по адресу 031, S — по адресу 032. ГСА программы показана на рис. 9.2, текст программы с комментариями приведен в табл. 9.7.