Архитектура ЭВМ. Учебные машины


П.4. Учебная машина с модификацией адресов УМ-М



бет4/4
Дата14.06.2016
өлшемі377.92 Kb.
#135088
1   2   3   4

П.4. Учебная машина с модификацией адресов УМ-М.

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


1. Описание учебной машины с модификацией адресов.

Машина УМ-М отличается от УМ-Р в следующем.

1) Объем ОП 164 ячеек.

2) Формат команд регистр-память




























     

КОП R1 M2 А2


M2 — регистр, используемый для модификации адреса A2. Это может быть любой регистр общего назначения, кроме R0

3) При выполнении команд регистр-память процессор вычисляет исполнительный адрес по правилу



Второй операнд берется из ячейки с адресом Аисп.


Пример 1. Вычислить сумму элементов массива x1, ..., x20..

S = x1 + x2 +...+ x20


Распределение памяти:

Используемые регистры:

0000 x1

R0 0

0002 x2

R1 1

* * *

R2 2

0026 x20

R3 21

0028 S

R4 i

002A 0

R5 S

002C 1

R6 модификатор

002E 1516 (=2110)




0030 2



Программа:



0100

00 0 0 002A

R0 := 0

загрузка

0102

00 1 0 002C

R1 := 1

константных

0104

00 2 0 0030

R2 := 2

регистров

0106

00 3 0 002E

R3 := 21




0108

20 6 0

R6 := 0




0109

20 5 0

S := 0




010A

20 4 1

i := 1




010B

01 5 6 0000

S := S + x [R6]




010D

21 6 2

R6 := R6 + 2




010E

21 4 1

i := i + 1




010F

25 4 3

i = 21?




0110

82 0 0 010B

i 21, go to 0010B




0112

10 5 0 0028

сохранили S




0114

99 0 0

стоп



В этой программе модификация адресов происходит только в одной команде 010B. Отметим, что во время работы программы модификатор R6 принимает значения 0, 2,4,...Значение R6 увеличивается на 2 на каждом шаге цикла, так как элементы массива занимают по две ячейки.

Можно использовать модификатор R6 для управления циклом. Тогда не потребуются команды, работающие с переменной i .

Пример 2. Вычислить сумму элементов массива x1, ..., x20..

S = x1 + x2 +...+ x20


Распределение памяти:

Регистры:

0000 0




0002 x1




0004 x2

R2 2

* * *

R3 38

0026 x20

R5 S

0028 S

R6 модификатор

002А 2616 (=3810)




002С 2



Программа:



0100

00 2 0 002E

R2 := 2

0102

00 3 0 002C

R3 := 38

0104

20 6 3

R6 := 38 адрес последнего элемента

0105

00 5 0 002A

S := 0

0107

01 5 6 0000

S := S + x [R6]

0109

22 6 2

R6 := R6 - 2

010A

82 0 0 0107

R6 0, go to 00107

010C

10 5 0 0028

сохранили S

010E

99 0 0

стоп

В этой программе элементы массива просматриваются, начиная с последнего. Поэтому начальное значение R6 — адрес последнего элемента. Для получения адреса предыдущего элемента из R6 вычитается 2 на каждом шаге цикла. После завершения выполнения программы значение R6 вышло за рамки массива и указывает на 0000.

При выполнении перехода по "не равно" процессор проверяет значение флага ZF (материал п1 §4). Команда 0109: 22 6 2 (R6 := R6 - 2) устанавливает такое же значение флага ZF, что и последовательность команд

22 6 2 (R6 := R6 - 2)

25 6 0 (R6 := 0).

В самом деле, числа (R6 - 2) и ((R6 - 2) - 0) могут равняться нулю только одновременно.



Следовательно, команду сравнения можно опустить.







Достарыңызбен бөлісу:
1   2   3   4




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет