- •Раздел 1. Базовая эвм
- •1.1 Назначение базовой эвм
- •1.2 Структура базовой эвм
- •1.3. Система команд базовой эвм
- •1.4 Арифметические операции
- •1.5 Управление вычислительным процессом, сдвиги и логические операции
- •1.6 Подпрограммы
- •1.7 Выполнение машинных команд
- •Домашнее задание № 1 Выполнение арифметических операций с двоичными числами.
- •Домашнее задание № 2 Программирование циклических алгоритмов
- •Лабораторная работа № 1 Исследование работы эвм при выполнении линейных программ.
- •Лабораторная работа № 2 Исследование работы эвм при выполнении разветвляющихся программ.
- •Лабораторная работа № 3 Исследование работы эвм при выполнении циклических программ.
- •Лабораторная работа № 4 Исследование работы эвм при выполнении комплекса программ.
- •Раздел 2. Организация ввода-вывода в базовой эвм
- •2.1 Устройства ввода-вывода базовой эвм
- •2.2 Программно-управляемая передача данных.
- •2.3 Асинхронный обмен.
- •2.4 Обмен по прерыванию программы.
- •Домашнее задание № 3 Программирование обмена данными с внешними устройствами
- •Лабораторная работа № 5 Исследование работы эвм при асинхронном обмене данными с ву
- •Лабораторная работа № 6 Исследование работы эвм при обмене данными с ву в режиме прерывания программы.
- •Раздел 3. Микропрограммное устройство управления
- •3.1. Микропрограммное управление вентильными схемами.
- •3.2 Интерпретатор базовой эвм.
- •Домашнее задание №4 Расширение системы команд эвм.
- •Часть II.
- •Лабораторная работа № 7 Исследование микропрограммного устройства управления.
- •Лабораторная работа № 8 Синтез команд базовой эвм.
- •Приложение 1
- •Содержание
- •Раздел 1. Базовая эвм 1
- •Раздел 2. Организация ввода-вывода в базовой эвм 19
- •Раздел 3. Микропрограммное устройство управления 25
1.5 Управление вычислительным процессом, сдвиги и логические операции
Задача управления вычислительным процессом, т.е. требуемой последовательностью выполнения команд, решается в базовой ЭВМ при помощи команд переходов (BCS, BPL, BMI, BEQ, BR), команд "Приращение и пропуск" (ISZ) и "Останов" (HLT). Все эти команды (кроме HLT) являются адресными, т.е. в них указывается адрес той ячейки памяти, из которой должна быть выбрана следующая команда программы при выполнении того или иного условия. Если же условия не выполняются, то должна исполняться команда, расположенная вслед за данной командой управления. Как и в других адресных командах, здесь можно использовать косвенную адресацию. Команды переходов не изменяют состояния аккумулятора и регистра переноса. Они могут лишь изменить содержимое счетчика команд, поместив в него адрес, определяемый адресной частью команды.
BCS M (Переход, если перенос). Переход к команде, расположенной в ячейке с адресом M, если содержимое регистра переноса равно 1.
BPL M (Переход, если плюс). Переход к команде, расположенной в ячейке с адресом M, если содержимое аккумулятора больше или равно нулю, т.е. в его старшем разряде (знаковом разряде) содержится 0.
BMI M (Переход, если минус). Переход к команде, расположенной в ячейке с адресом M, если содержимое аккумулятора меньше нуля, т.е. в его старшем (знаковом) разряде содержится 1.
BEQ M (Переход, если нуль). Переход к команде, расположенной в ячейке с адресом M, если содержимое аккумулятора равно нулю.
BR M (Переход безусловный). Переход к команде, расположенной в ячейке с адресом M, осуществляемый при любых значениях А и С или других регистров базовой ЭВМ.
Команды переходов широко применяются для организации циклических программ, которые используются в тех случаях, когда требуется несколько раз выполнить набор одинаковых действий с различными наборами данных. Базовая ЭВМ обладает рядом средств
для упрощения циклических программ. Целесообразность введения этих средств удобнее рассмотреть на примерах.
Пример 1.1 Получить произведение Z = Y * 50 .
Так как в системе команд базовой ЭВМ нет команды умножения, то воспользуемся простейшим способом: будем 50 раз складывать значение Y, используя программу, приведенную в табл. 1.3.
Так как в этой программе аккумулятор используется не только для накопления произведения, но еще для изменения количества выполненных циклов и сравнения их со значением множителя, то промежуточные результаты Z и С пришлось сохранить в памяти ЭВМ. Очевидно, что обсуждаемую программу можно существенно упростить, при наличии такого средства учета числа выполненных циклов и проверки условия завершения циклической программы, которое не затрагивает содержимого аккумулятора. Таким средством является команда ISZ (Приращение и пропуск). При каждом выполнении команды ISZ M, расположенной по адресу А, к содержимому ячейки с адресом М добавляется 1 и если результат меньше нуля, то выполняется команда, следующая за ISZ M (команда, расположенная по адресу А+1), в противном случае эта команда *попускается, т.е. выполняется команда, расположенная по адресу А+2. Программа с использованием команды ISZ приведена в табл. 1.4.
Таблица 1.3
Первый вариант программы для получения Z = Y * 50
Ад-рес |
Содержимое |
Комментарии | |
|
Код |
Мнемо-ника |
|
5
6
7
8
. . . 10 11 12 13
14 15 16 17
18 19
1A |
0078
0000
0032
0000
. . . F200 4006 4005 3006
F200 4008 F800 3008
6007 A010
F000 |
Y
Z
M
C
. . . CLA ADD 6 ADD 5 MOV 6
CLA ADD 8 INC MOV 8
SUB 7 BMI 10
HLT |
Множимое (здесь – десятичное значение 120)
Ячейка, отведенная для накопления результата. В ней поочередно будут храниться значения Y, 2*Y, … После 50 суммирований в этой ячейке будет содержаться искомый результат – 50 * Y
Множитель 50 = (32)16
Ячейка, используемая для накопления числа выполненных циклов, - счетчик циклов
К промежуточному результату, находящемуся в ячейке 6, добавляется еще одно значение множимого Y
Содержимое счетчика циклов увеличивается на 1, а его копия пока сохраняется в аккумуляторе
Если содержимое счетчика циклов меньше значения множителя, то выполняется переход к командам, осуществляющим новое суммирование Y с промежу- точным значением Z
Останов. В ячейке 6 хранится искомый результат |
Таблица 1.4
Второй вариант программы для получения Z = Y * 50
Ад-рес |
Содержимое |
Комментарии | |
|
Код |
Мнемо-ника |
|
5 6 7 . . . 10 11
12 13
14 15 |
0078 0000 FFCE . . . F200 4005
0007 C011
3006 F000 |
Y Z M
CLA ADD 5
ISZ 7 BR 11
MOV 6 HLT |
Множимое Ячейка, отведенная для накопления результата. Отрицательное значение множителя (-50)
Очистка аккумулятора К содержимому аккумулятора добавляется значение Y
Содержимое M наращивается на 1 и, если оно еще меньше нуля, то выполняется команда BR 11. При M = 0 команда BR 11 пропускается
Результат 50 сложений Y заносится в ячейку 6 Останов ЭВМ |
Пример 1.2. Получить в ячейке 005 сумму 32 элементов массива, элементы которого размещены в ячейках памяти с 010 по 02F.
В отличие от предыдущей задачи, где многократно суммировалось содержимое одной ячейки (Y), здесь надо суммировать содержимое разных ячеек. Если бы команды базовой ЭВМ позволяли лишь прямо адресовать ячейки памяти, то в программе решения поставленной задачи пришлось бы либо использовать 32 команды сложения (4010, 4011,...,402E, 402F), либо применять модификацию адресной части команды сложения. Последнее реализовано в программе табл. 1.5.
Таблица 1.5
Первый вариант программы суммирования элементов массива
Ад-рес |
Содержимое |
Комментарии | |
|
Код |
Мнемо-ника |
|
5 6 . . . 10 . . . 2F
30 31 32 33
34 35 36 37
38 39
3A |
0000 FFE0
F200 4005 4010 3005
F200 4032 F800 3032
0006 C030
F000 |
CLA ADD 5 ? MOV 5
CLA ADD 32 INC MOV 32
ISZ 6 BR 30
HLT |
Ячейка, отведенная для накопления результата Отрицательное число элементов массива
Численные значения элементов массива
Промежуточный результат (ячейка 5) суммируется с содержимым элемента массива, адрес которого расположен в адресной части команды, находящейся в ячейке 32 (сначала этот адрес равен 10, а затем он увеличивается при каждом прохождении цикла на 1 командами с 34 по 37)
Пересылка в аккумулятор команды, расположенной в ячейке 32, добавление к ее содержимому 1 и запись модифицированной команды на старое место (в ячейку 32)
Наращивание на 1 содержимого счетчика элементов массива и переход к команде 30 пока оно < 0
Останов ЭВМ |
Модификация команд практически не используется в современных ЭВМ. Для сближения языка команд с алгоритмическими языками и для обеспечения возможности работы с программами, записанными в постоянные запоминающие устройства (откуда можно лишь читать команды), разработаны специальные средства адресации, одним из которых является косвенная адресация.
При использовании косвенной адресации нужно выбрать в памяти ЭВМ какую-либо ячейку (например, 007), записать в нее адрес первого элемента суммируемого массива (адрес 010), заменить в программе табл. 1.5 команду 4010 на команду 4807 (ячейка 32) и заменить команды модификации командами вычисления текущего адреса суммируемого элемента массива. Если же вычисление текущего адреса суммируемого элемента выполнять с помощью команды ISZ 7 (не затрагивая содержимого аккумулятора), то можно получить достаточно компактную программу, приведенную в табл. 1.6.
Таблица 1.6
Второй вариант программы суммирования элементов массива
Ад-рес |
Содержимое |
Комментарии | |
|
Код |
Мнемо-ника |
|
5 6 7 . . . 10 . . . 2F
30 31 32 33
34 35
36 37 |
0000 FFE0 0010
F200 4807 0007 F100
0006 C031
3005 F000 |
CLA ADD (7) ISZ 7 NOP
ISZ 6 BR 31
MOV 5 HLT |
Ячейка, отведенная для накопления результата Отрицательное число элементов массива Текущий адрес элемента массива
Численные значения элементов массива
Очистка аккумулятора Суммирование очередного элемента массива Текущий адрес элемента массива наращивается на 1 Команда “Нет операции”
Наращивание на 1 содержимого счетчика элементов массива и переход к команде 31, пока оно < 0
Запись результата в ячейку 5 Останов ЭВМ |
Таблица 1.7
Третий вариант программы суммирования элементов массива
Ад-рес |
Содержимое |
Комментарии | |
|
Код |
Мнемо-ника |
|
5 6 . . . F
10 . . . 2F
30 31
32 33
34 35 |
0000 FFE0
0010
F200 480F
0006 C031
3005 F000 |
CLA ADD (F)
ISZ 6 BR 31
MOV 5 HLT |
Ячейка, отведенная для накопления результата Отрицательное число элементов массива
Текущий адрес элемента массива
Численные значения элементов массива
Очистка аккумулятора Суммирование очередного элемента массива. Так как сначала в индексную ячейку F помещен адрес первого элемента массива (10), то после первого выполнения данной команды содержимое ячейки F увеличится на 1 и будет указывать на второй элемент массива, после второго выполнения команды – на третий элемент массива и т.д.
Наращивание на 1 содержимого счетчика элементов массива и переход к команде 31, пока оно < 0
Запись результата в ячейку 5 Останов ЭВМ |
Так как по команде ISZ 7 (табл. 1.6) производится наращивание положительной величины (адреса), то после ее выполнения счетчик команд будет указывать на команду 34 (команда по адресу 33 будет пропущена). Поэтому в ячейку 33 помещена команда "Нет операции", но можно было бы поместить даже число.
Наконец, рассмотрим еще одно средство: позволяющее упростить циклические программы базовой ЭВМ, - индексные ячейки (ячейки с адресами от 008 до 00F). Если произвести косвенное адресование какой-либо из этих ячеек, то сначала ее содержимое будет использовано в качестве адреса операнда, а затем оно автоматически увеличится на единицу. При прямом адресовании индексные ячейки (их содержимое может измениться лишь в случае записи информации в ячейку). Указанное свойство индексных ячеек позволяет составить оптимальную программу для суммирования элементов массива (табл. 1.7).
Побитовая обработка данных обеспечивается базовой ЭВМ командами логического умножения, циклических сдвигов, а также командами инвертирования и очистки регистра переноса.
Команда AND M (Логическое умножение) выполняет над каждым разрядом содержимого аккумулятора и содержимым ячейки М булеву операцию "&" ("И").
Результат выполнения команды для каждой пары битов операндов равен единице только тогда, когда оба бита равны единице, а в остальных случаях бит результата равен нулю, т.е. команда позволяет выделять или очищать определенные биты слова.
Команды ROL (циклический сдвиг влево на один разряд) и ROR (циклический сдвиг вправо на один разряд) замыкают аккумулятор и регистр переноса в кольцо и сдвигают все биты кольца на один разряд влево или вправо (рис.1.3). Сдвигами числа влево или вправо
|
Регистр |
|
|
переноса |
Аккумулятор |
До сдвига |
0 |
1011100000101011 |
а) После сдвига |
1 |
0111000001010110 |
|
|
|
До сдвига |
0 |
1011100000101011 |
б) После сдвига |
1 |
0101110000010101 |
Рис. 1.3. Циклические сдвиги: а - влево, б - вправо
можно реализовать операции умножения или деления на два (один сдвиг), на четыре (два сдвига), на восемь (три сдвига) и т.д.