Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по Базовой ЭВМ.doc
Скачиваний:
47
Добавлен:
20.03.2016
Размер:
959.49 Кб
Скачать

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. Циклические сдвиги: а - влево, б - вправо

можно реализовать операции умножения или деления на два (один сдвиг), на четыре (два сдвига), на восемь (три сдвига) и т.д.