Учебное пособие для иностранных студентов (1110580), страница 5
Текст из файла (страница 5)
0004 k
Программа:
| 0100 | 00 0001 0000 0003 | p :=1 |
| 0101 | 00 0002 0000 0004 | k := 2 |
| 0102 | 95 0004 0000 0106 | if k > n, go to 0106 |
| 0103 | 13 0003 0004 0003 | p := p * k |
| 0104 | 01 0004 0001 0004 | k := k + 1 |
| 0105 | 80 0000 0000 0102 | go to 0102 |
| 0106 | 99 0000 0000 0000 | стоп |
Заметим, что в машинной программе начало цикла while k n do заменилось на переход на конец программы по отрицанию условия. Тело цикла заканчивается безусловным переходом на начало цикла.
П.2. Учебная двухадресная машина УМ-2.
Анализ большого числа программ показывает, что только 25% команд содержат три различных адреса. В остальных командах либо два, либо все три адреса совпадают. Этот факт наталкивает на идею отказаться от одного из адресов — сделать команды двухадресными. Тогда можно использовать освободившиеся разряды для задания более длинных адресов — появляется возможность адресовать бульший объем памяти. Либо можно сократить размер ячейки, сделав более дешевой оперативную память.
Как избавиться от третьего адреса? В УМ-3 существенно трехадресными были арифметические команды и команды условного перехода.
а) Арифметические команды. Договоримся, что результат записывается на место первого операнда (по адресу А1).
б) Команды условного перехода. Можно разбить команду на две, выделив в отдельную команду действие сравнения.
1. Описание УМ-2.
Структура процессора та же, что и в УМ-3; разрядность регистров соответствует разрядности ячейки и объему ОП.
Ячейка ОП — 10 шестнадцатиричных разрядов.
Объем ОП — 164 ячеек.
Представление чисел. Число занимает одну ячейку. Отрицательные числа записываются в дополнительном коде.
Формат команд. Команда занимает одну ячейку:
КОП А1 А2
Система команд. Коды операций те же, что в УМ-3. Отличия заключаются в следующем.
| Команды | Действие |
| Пересылка 00 А1 А2 | [А1] := [А2] |
| Арифметические команды | [А1] := [А1] [А2], где {+, -, *} |
| Деление | вычисляет частное и остаток от деления [А1] на [А2]; частное записывается в [А1], остаток в [А1+1] |
| Сравнение 05 А1 А2 | вычисляется [А1] - [А2], устанавливаются арифметические флаги |
| Условные переходы | переход по А2, если условие выполняется; А1 не используется |
Остальные команды те же, что в УМ-3.
2. Рассмотрим два примера программ для УМ-2.
Пример 1. Вычислить значение x= ( a mod 50 - b )2 по заданным a и b.
Распределение памяти:
0000 a
0001 x
0002 3216 (=5010)
0003 b
Программа:
| 0100 | 04 0000 0002 | x := a mod 50 |
| 0101 | 02 0001 0003 | x := x - b |
| 0102 | 03 0001 0001 | x := x * x |
| 0103 | 99 0000 0000 | стоп |
Пример 2. Вычислить p = n!.
Алгоритм:
begin p:=1; k:=2;
while k n do
begin p := p * k;
k := k + 1
end
end.
Распределение памяти:
0000 1
0001 2
0002 n
0003 p
0004 k.
Программа:
| 0100 | 00 0003 0000 | p := 1 |
| 0101 | 00 0004 0001 | k := 2 |
| 0102 | 05 0004 0002 | k n ? |
| 0103 | 95 0000 0107 | k > n, go to 0107 |
| 0104 | 13 0003 0004 | p := p * k |
| 0105 | 01 0004 0000 | k := k + 1 |
| 0106 | 80 0000 0102 | go to 0102 |
| 0107 | 99 0000 0000 | стоп |
П.3. Учебная машина с регистрами УМ-Р.
Вспомним, как выполняется арифметическая команда. Процессор обращается к ОП для получения операндов и для записи результата. Поскольку ОП внешнее по отношению к ЦП устройство, на это взаимодействие затрачивается бульшая часть времени выполнения команды. Кроме того, часто оказывается, что результат, полученный ЦП в предыдущей команде, требуется в качестве операнда для выполнения следующей команды. Принимая во внимание эти обстоятельства, имеет смысл включить в ЦП несколько ячеек памяти. Так как этих ячеек будет немного, можно сделать их более быстродействующими (и, видимо, более дорогими), чем ячейки ОП. Такие ячейки, расположенные в ЦП, называются регистрами. Программист может использовать эти регистры по своему желанию для хранения информации, в отличие от других регистров процессора. Поскольку регистров немного, для указания их в команде требуется меньше разрядов, чем для задания адресов ОП. Использование регистров позволяет сократить размер программ.
1. Описание УМ-Р.
Кроме обычных регистров, ЦП содержит 16 регистров общего назначения. Регистры нумеруются от 0 до F16. Размер регистров совпадает с разрядностью чисел.
Ячейка ОП состоит из четырех шестнадцатиричных разрядов.
Объем ОП — 165 ячеек.
Число занимает две соседние ячейки, отрицательные числа записываются в дополнительном коде.
Команды бывают двух типов.
а) Регистр-регистр. Занимает одну ячейку. Формат команды
КОП R1 R2,
где R1 — первый операнд, R2 — второй операнд.
б) Регистр-память. Занимает две ячейки. Формат команды
КОП R1 А2,
где R1 — первый операнд, A2 — адрес второго операнда.
Система команд следующая:
| Название | КОП | Регистр-память | КОП | Регистр-регистр | |
| останов | 99 | стоп | |||
| пересылки | 00 | R1:=(A2,A2+1) | 20 | R1:=R2 | |
| 10 | R1(A2,A2+1) | ||||
| арифметические | |||||
| сложение | 01 | R1:=R1+(А2,A2+1) | 21 | R1:=R1+R2 | |
| вычитание | 02 | R1:=R1-(А2,A2+1) | 22 | R1:=R1-R2 | |
| умножение | |||||
| со знаком | 03 | R1:=R1*(А2,A2+1) | 23 | R1:=R1*R2 | |
| без знака | 13 | 33 | |||
| деление | |||||
| со знаком | 04 | R1:=R1 div (А2,A2+1), (R1+1):=R1 mod (А2,A2+1) | 24 | R1:=R1 div R2, (R1+1):=R1 mod R2 | |
| без знака | 14 | 34 | |||
| сравнение | 05 | R1-(А2,A2+1) | 25 | R1-R2 | |
| переходы по А2 (типа регистр-память)(R1- любой) | |||||
| безусловный | 80 | ||||
| по = | 81 | ||||
| по | 82 | ||||
| по | с/зн - 83 | б/зн - 93 | |||
| по | с/зн - 84 | б/зн - 94 | |||
| по | с/зн - 85 | б/зн - 95 | |||
| по | с/зн - 86 | б/зн - 96 | |||
2. Примеры.
Для удобства чтения программы будем записывать, располагая по одной команде на строке. Тот факт, что команды имеют разную длину, будем учитывать при подсчете адресов команд.
Пример 1. Вычислить значение x= ( a mod 50 - b )2 по заданным a и b.
Распределение памяти:
00000 a
00002 b
00004 3216 (=5010)
00006 x
Программа:
| 00100 | 00 0 00000 | R0 := a |
| 00102 | 04 0 00004 | R1 := a mod 50 |
| 00104 | 02 1 00002 | R1 := R1 - b |
| 00106 | 23 1 1 | R1 := R1 *R1 |
| 00107 | 10 1 00006 | x := R1 |
| 00109 | 99 0 0 | стоп |
Пример 2. Вычислить
S1 = max(a,b) * 20,
S2 = min(a,b) div 3.
Алгоритм:
begin S1 := a; S2 := b;
if a > b then begin S1 := b; S2 := a end;
















