
- •Учебное пособие для лабораторных работ
- •По курсу:
- •Организация эвм и систем
- •Содержание
- •Инструкция по использованию программного обеспечения.
- •Описание языка mcl.
- •1. Описание языка mcl.
- •2. Алфавит.
- •7. Операции и выражения. Побитовые операции:
- •Операции сдвига:
- •8. Приоритеты и порядок выполнения операций:
- •9. Арифметические преобразования в выражениях.
- •10. Типы языка mcl.
- •11. Переменные языка mcl.
- •12. Операторы языка mcl. Оператор - формат:
- •Оператор - метка:
- •Оператор - безусловный переход: goто
- •Оператор - вызов подпрограммы: gosub
- •Оператор - возврат из подпрограммы: return
- •Оператор - условный оператор: if then
- •Оператор - оператор цикла: for to next
- •Оператор - пауза: pause
- •Оператор - вывод: write writeln
- •Оператор – ввод: read
- •14. Общие замечания.
- •Арифметико-логические устройства эвм и принципы их функционирования.
- •Лабораторная работа № 1. Моделирование функционирования алу при выполнении операции сложения/вычитания. Цель работы:
- •Алгоритм алгебраического сложения/вычитания двоичных чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.
- •Моделирование функционирования алу.
- •Проверка на переполнение
- •Результат работы программы:
- •Контрольные вопросы.
- •Содержание отчета.
- •Варианты заданий.
- •Алгоритм умножения двоичных чисел с фиксированной запятой, представленных в дополнительном коде.
- •Моделирование функционирования алу при выполнении операции умножения чисел, представленных в прямом коде.
- •Моделирование функционирования алу при выполнении операции умножения чисел, представленных в дополнительном коде.
- •Контрольные вопросы.
- •Содержание отчета.
- •Варианты заданий.
- •Моделирование функционирования алу при выполнении операции деления методом с восстановлением остатка над числами, представленными в прямом коде.
- •2. Моделирование функционирования алу при выполнении операции деления методом без восстановления остатка над числами, представленными в прямом коде.
- •Контрольные вопросы.
- •Содержание отчета.
- •Варианты заданий.
- •Организация операционной части центрального процессора. Команды эвм.
- •Одноадресные команды.
- •Безадресные команды.
- •Способы адресации.
- •Микропрограмма и структурная схема операционной части цп при выполнении двухадресной команды формата регистр-регистр.
- •Примечания:
- •На рисунке 28 слева на графике расставлены вентили, которые в данной лабораторной работе не используются (они нужны для моделирования блока устройства управления);
- •Задание для выполнения лабораторной работы.
- •Содержание отчета.
- •Поэтапное выполнение программы (см. Файл буу.Mcl):
- •Примечание:
- •Задание для выполнения лабораторной работы.
- •Варианты заданий.
- •Лабораторная работа № 6. Моделирование функционирования селекторного канала.
- •Файл sk.Mcl.
- •Описание подпрограмм для моделирования селекторного канала, хранящихся в файле sk.Mcl. Подпрограмма k_u_k:
- •Подпрограмма w_reg:
- •Подпрограмма out_op:
- •Подпрограмма in_op:
- •Подпрограмма к_ор:
- •Подпрограмма w_op:
- •Подпрограмма z_rdu:
- •Подпрограмма zagr:
- •Задание.
- •Содержание отчета.
- •Пример результатов моделирования работы селекторного канала.
- •Варианты заданий для моделирования селекторного канала. Вариант номер 1
- •Вариант номер 2
- •Вариант номер 3
- •Вариант номер 4
- •Вариант номер 5
- •Вариант номер 6
- •Вариант номер 7
- •Вариант номер 8
- •Вариант номер 9
- •Вариант номер 10
- •Вариант номер 11
- •Вариант номер 12
- •Вариант номер 13
- •Вариант номер 14
- •Вариант номер 15
- •Лабораторная работа № 7. Моделирование функционирования мультиплексного канала.
- •Файл mk.Mcl.
- •Описание подпрограмм для моделирования мультиплексного канала, хранящихся в файле мk.Mcl. Подпрограммы k_u_k, оut_op, in_op и k_op:
- •Подпрограмма w_op:
- •Подпрограмма act:
- •Подпрограмма pas:
- •Подпрограмма w_pk:
- •Подпрограмма zagr2:
- •Задание.
- •Содержание отчета.
- •Пример результатов моделирования работы мультиплексного канала.
- •Варианты заданий для моделирования мультиплексного канала. Вариант номер 1
- •Вариант номер 2
- •Вариант номер 3
- •Вариант номер 4
- •Вариант номер 5
- •Вариант номер 6
- •Вариант номер 7
- •Вариант номер 8
- •Вариант номер 9
- •Вариант номер 10
- •Вариант номер 11
- •Вариант номер 12
- •Лабораторная работа № 8. Моделирование буферной памяти с признаковым обменом и сквозной записью. Сверхбыстродействующая кэш-память и ее моделирование.
- •Моделирование функционирования секторного буфера.
- •Выполнение работы.
- •Типы, используемые подпрограммами.
- •Используемые подпрограммы.
- •Исходные данные.
- •Содержание отчета.
- •Пример выполнения программы с признаковым обменом (файл cachesf.Mcl) для 1-го варианта:
- •Варианты заданий. Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Лабораторная работа № 9. Моделирование буферной памяти с признаковым обменом и сквозной записью. Моделирование функционирования группо-ассоциативного буфера.
- •Выполнение работы.
- •Типы, используемые подпрограммами.
- •Содержание отчета.
- •Пример выполнения программы с признаковым обменом (файл cacheaf.Mcl) для 1-го варианта:
Операции сдвига:
SHL (сдвиг влево) op1 SHL op2
Двоичное представление op1 сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются 0.
SHR (сдвиг вправо) op1 SHR op2
Двоичное представление op1 сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются 0.
ASL (арифметический сдвиг влево) op1 ASL op2
Двоичное представление op1 сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются 0.
ASR (арифметический сдвиг вправо) op1 ASR op2
Двоичное представление op1 сдвигается вправо на op2 разрядов. Знаковый разряд (старший разряд) дублируется.
ROL (циклический сдвиг влево) op1 ROL op2
Двоичное представление op1 циклически сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.
ROR (циклический сдвиг вправо) op1 ROR op2
Двоичное представление op1 циклически сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.
8. Приоритеты и порядок выполнения операций:
Для каждой группы операций в нижеследующей таблице приоритетов операций приоритеты одинаковы. Операции с большим значением приоритета выполняются в первую очередь. Чем выше приоритет группы операций, тем выше она расположена в таблице.
Таблица 1. Приоритеты операций
9 NOT COM
8 * / %
7 + -
6 SHL SHR ROR ROL ASR ASL
5 > >= < <=
4 = <>
3 AND
2 XOR
1 OR
Все операции с одинаковыми приоритетом выполняются справа налево. Можно группировать операции с помощью скобок. Операции в скобках будут выполняться в первую очередь.
9. Арифметические преобразования в выражениях.
1. Если операнды в выражениях имеют различный размер (размер операнда зависит от типа, о типах см. ниже), то все результаты операций приводятся к большему размеру.
2. При выполнении присваивания значение выражения преобразуется к размеру переменной, которой оно присваивается.
3. Уменьшение размера значения производится путем отбрасывания старших битов и никаких диагностических сообщений при этом не выводится.
10. Типы языка mcl.
Тип - простая переменная:
Простые переменные предназначены для использования в программе там, где не обязательно явное указание размера переменной - управляющие переменные циклов, счетчики и т.п. Описание простой переменной производится с помощью оператора VAR и синтаксис его определяется следующим правилом:
VAR <идентификатор>, ... ;
Например:
VAR i,j,simple_var; - описаны три простых переменных.
Простые переменные имеют предопределенный размер 16 битов и интерпретируются как целые без знака. Кроме получения значения простой переменной, возможно получение значения определенного разряда или группы разрядов.
Например:
j - значение переменной j;
j[3..3] - значение 3-го разряда переменной j;
i[0..7] - значение восьми младших разрядов переменной j.
Тип - регистр:
Регистры используются там, где необходимо точно определить размер переменной. Регистры могут иметь произвольный размер в пределах от 1 до 32 разрядов. Описание регистра производится с помощью оператора REG. Синтаксис описания регистров определяется следующим правилом:
REG <идентификатор> [ <константа> ] , ... ;
Например:
reg ra[8], rb[8], f_zero[1], mul_res[32];
- описаны два восьмиразрядных регистра ra и rb, одноразрядный регистр f_zero и тридцатидвухразрядный регистр mul_res. Константа описывает размерность регистра.
Использование регистров полностью идентично использованию простых переменных. Так же возможно как получение значения всего регистра, так и получение значения его части.
Например:
ra - значение регистра ra; rb[7..7] - значение старшего бита регистра rb;
mul_reg[16..31] - значение старшей половины регистра mul_reg.
Тип - структура:
Структуры могут быть использованы для упрощения доступа к отдельным полям переменных. Они позволяют присваивать группам битов имена. В остальном структуры сохраняют все свойства регистров. Описание структур производится с помощью оператора STRUCT. Синтаксис описания структур определяется следующим правилом:
STRUCT <имя структуры> [ <константа> ] <имя поля> [<константа>],.. ;
Например:
STRUCT rk[32] kop[16], r1[4], m1[4], r2[4], m2[4];
в этом примере описана 32-х разрядная структура rk с полями kop-[0..15], r1[16..19], m1[20..23], r2[24..27], m2[28..31]. Обратите внимание, что выделение полей в структуре производится начиная с младшего бита (т.е. от младших битов к старшим). Использование структур аналогично использованию регистров, но добавляется еще один метод доступа к значению группы бит - с помощью имени поля,
например:
rk - значение структуры rk;
rk[0..15] - значение младшей половины структуры rk;
rk.kop - то же самое, что и в предыдущем примере, но с использованием имени поля.
Тип - память:
Память представляет собой одномерный массив регистров. Ячейки памяти могут, как и регистры, иметь произвольный размер в пределах 1..32 разряда. Максимальный размер памяти 1024 (1K) ячеек. Индексация ячеек производится от 0. Описание памяти производится с помощью оператора MEM. Синтаксис описания памяти определяется следующим правилом:
<идентификатор> [<константа 1>] <константа 2>],...;
Где первая константа определяет количество ячеек в памяти, а вторая - разрядность ячейки.
Например:
MEM mb[32][8] - описана память mb с числом ячеек 32 и с разрядностью ячейки - 8 бит;
MEM ml[1024][32] - описана память ml с числом ячеек 1024 и с разрядностью ячейки 32 бита;
Для доступа к ячейке памяти необходимо после имени памяти задать индекс этой ячейки. Также возможен доступ и к группам битов отдельной ячейки.
Например:
mb[5] - обращение к 6-й ячейке памяти mb (помните, что индексация ячеек начинается с 0);
ml[9,5..5] - обращение к 6-му разряду 10-й ячейки памяти ml;
ml[100,0..15]- обращение к младшей половине 101-й ячейки памяти ml.