Учебное пособие для иностранных студентов (1110580), страница 4
Текст из файла (страница 4)
2. Оперативная память.
Ячейка - 14 шестнадцатиричных разрядов.
Объем ОП - 164 ячеек с адресами 0000FFFF.
Представление чисел: число содержится в одной ячейке; отрицательные числа записываются в дополнительном коде.
Представление команд: команда занимает одну ячейку. Разряды ячейки имеют следующий смысл (формат команд):
КОП А1 А2 А3
Здесь КОП – код операции (указывает, какую машинную операцию надо выполнить); А1, А2, А3 – адреса первого, второго операндов и результата. Разрядность адресов совпадает с разрядностью регистра СА и определяется объемом ОП (а именно, количеством возможных адресов). Количество разрядов в регистрах ОП1, ОП2, РЕЗ и РК должно совпадать с количеством разрядов ячейки ОП, так как в ОП1, ОП2 и РЕЗ должны поместиться числа, а в РК – команда, которые занимают по одной ячейке ОП.
3. Система команд УМ-3.
Система команд ЭВМ – это набор всех машинных команд данной ЭВМ.
Название | КОП | Операция | Примечание |
останов | 99 | стоп | А1,А2,А3 - любые |
пересылка | 00 | [А1] [А3] | А2 - любой |
арифметические | |||
сложение | 01 | [А1]+[А2] [А3] | Устанавливаются |
вычитание | 02 | [А1]-[А2] [А3] | арифметические флаги |
умножение | |||
со знаком | 03 | [А1]*[А2] [А3] | |
без знака | 13 | ||
деление | |||
со знаком | 04 | [А1] div [А2] [А3], [А1] mod [А2] [А3+1] | |
без знака | 14 |
переходы | ||||
безусловный | 80 | перейти к А3 | А1,А2 - любые | |
условные | После выполнения | |||
по = | 81 | при [А1]=[А2] перейти к А3 | команды перехода работа продолжается | |
по | 82 | при [А1][А2] перейти к А3 | с команды, записанной в ячейке с адресом A3 | |
по | с/зн - 83 б/зн - 93 | при [А1][А2] перейти к А3 | ||
по | с/зн - 84 б/зн - 94 | при [А1] [А2] перейти к А3 | ||
по | с/зн - 85 б/зн - 95 | при [А1][А2] перейти к А3 | ||
по | с/зн - 86 б/зн - 96 | при [А1] [А2] перейти к А3 |
В таблице использовано обозначение [A] – содержимое ячейки с адресом A.
Арифметические команды выполняются следующим образом: содержимое ячеек с адресами A1 и A2 пересылается в регистры ОП1 и ОП2, выполняется арифметическая операция (результат – в регистре РЕЗ), содержимое регистра РЕЗ пересылается в ячейку с адресом А3. Следует обратить внимание на то, что есть две команды умножения и две команды деления. Программист использует подходящую команду в зависимости от того, с какими данными (числами со знаком или без знака) должна работать программа. Команда деления дает два результата – частное и остаток. Они записываются в соседние ячейки: частное – по адресу А3, остаток – в ячейку с адресом А3+1.
Действие команд перехода заключается в изменении содержимого регистра СА. При этом на следующем такте работы ЦП будет выполнять команду, записанную в ячейке с адресом А3. (Вспомните §2.)
В командах условного перехода производится проверка соответствующего условия. Если условие выполняется, тогда в СА записывается адрес А3. Сравнение значений [ А1] и [А2] выполняется так: в ОП1 записывается [А1], в ОП2 – [А2]; выполняется вычитание ОП1-ОП2, при этом получают значение все четыре арифметических флажка. По значениям флагов и определяется истинность условия. Некоторым условиям (например,<) соответствуют разные наборы значений флагов для разных данных – чисел со знаком и чисел без знака. Поэтому команды переходов для чисел со знаком и чисел без знака разные.
Рассмотрим на примерах соответствие между условиями и значениями флагов.
1) Переход по равенству. В результате вычитания [А1] - [А2] получится ZF=1 тогда и только тогда, когда [А1] = [А2].
2) Переход по "меньше", числа без знака.
[А1] < [А2] [А1] - [А2] < 0 CF=1.
3) Переход по "меньше", числа со знаком. Если вычитаются числа со знаком, то при [А1] < [А2], [А1] - [А2] < 0, возможны ситуации
а) результат вычислили правильно (OF=0) и он оказался отрицательным (SF=1),
б) результат вычислили неправильно (OF=1), при этом знак вычисленного значения противоречит знаку числа [А1] - [А2], вычисленный результат оказался положительным, то есть SF=0.
Таким образом, для чисел со знаком
[А1] < [А2] [А1] - [А2] < 0 (OF=1) and (SF=0) or (OF=0) and (SF=1), или более коротко OF SF. При выполнении команды перехода по "меньше" для чисел со знаком процессор проверяет выполнимость условия OF SF.
4. Разберем теперь несколько примеров программ для УМ-3. Условимся, что перед началом работы
1) в СА записывается 0100, то есть выполнение начинается с команды по адресу 0100,
2) в ячейки ОП уже записаны все данные, необходимые для работы программ (ввод и вывод не рассматриваем).
Пример 1. Вычислить значение x= ( a mod 50 - b )2 по заданным a и b.
Поскольку в выражении есть операция вычитания, лучше работать с числами со знаком. Пусть данные располагаются в следующих ячейках
Адрес | Содержимое |
0000 | a |
0001 | 3216 (=5010) |
0002 | b |
0003 | x |
0004 | рабочая (потребуется для деления) |
Программа.
Адрес | Содержимое ячейки | Комментарий |
0100 | 04 0000 0001 0003 | a mod 50 [0004] |
0101 | 02 0004 0002 0003 | [0004] - b x |
0102 | 03 0003 0003 0003 | xx x |
0103 | 99 0000 0000 0000 | стоп |
Напомним, что деление даёт два результата, поэтому первая команда программы записывает в [0003] x div 50 (это значение в дальнейшем не используется) и в [0004] a mod 50.
Пример 2. Вычислить
S1 = max(a,b) * 20,
S2 = min(a,b) div 3.
Вычисления организуем так:
begin if a < b then begin S1 := b; S2 := a end
else begin S1 := a; S2 := b end;
S1 := S1 * 20;
S2 := S2 div 3
end.
Данные:
0000 a
0001 b
0002 1416 (=2010)
0003 3
0004 S1
0005 S2
0006 рабочая.
Будем считать, что работаем с числами без знака.
Программа:
Адрес | Содержимое ячейки | Комментарий | |
0100 | 94 0000 0001 0104 | if ab, go to 0104 | |
0101 | 00 0001 0000 0004 | S1 := b | часть |
0102 | 00 0000 0000 0005 | S2 := a | then |
0103 | 80 0000 0000 0106 | go to 0106 | |
0104 | 00 0000 0000 0004 | S1 := a | часть |
0105 | 00 0001 0000 0005 | S2 := b | else |
0106 | 13 0004 0002 0004 | S1 := S1 * 20 | |
0107 | 14 0005 0003 0005 | S2 := S2 div 3 | |
0108 | 99 0000 0000 0000 | стоп |
Пример 3. Вычислить p = n!.
Алгоритм:
begin p:=1; k:=2;
while k n do
begin p := p * k;
k := k + 1
end
end.
В этой задаче могут возникнуть довольно большие положительные числа, поэтому будем работать с числами без знака.
Данные:
0000 n
0001 1
0002 2
0003 p