Учебная трёхадресная машина УМ-3 (набор команд)

(см. также сборник упражнений по учебным машинам «УМ-3»)

Память УМ-3 состоит из 512 32-х разрядных слов с адресами 0—511. В слове может храниться команда, (длинное) целое или вещественное число. Команда имеет обычную структуру:

32 разряда
КОПА1А2А3
5 бит9 бит9 бит9 бит

где КОП занимает 5, а каждый из адресов — 9 двоичных разрядов. Почти все команды выполняются по обычной схеме:

<A1> := <A2> <операция> <A3>

Ниже приведены номера, мнемоника и семантика операций:

01СЛВсложение вещественных чисел;
11СЛЦсложение целых чисел;
02ВЧВвычитание вещественных чисел;
12ВЧЦвычитание целых чисел;
03УВЧумножение вещественных чисел;
13УЦЧумножение целых чисел;
04ДЕВделение вещественных чисел;
14ДЕЦделение нацело (div) целых чисел;
24МОДостаток от деления целых (mod) чисел;
00ПЕРпересылка слов: <A1> := <A3>;
10ЦЕЛокругление: <A1> := round (<A3>);
20ВЕЩцелое в вещественное: <A1> := real (<A3>);
09БЕЗбезусловный переход по адресу A2goto A2;
19УСЛусловный переход в зависимости от признака результата OMEGA:
case OMEGA of
0 : goto A1;
1 : goto A2;
2 : goto A3
end;
31СТОПостанов машины;
05BBBначиная с адреса A1 вводятся A2 вещественных чисел;
06ВВЦначиная с адреса A1 вводятся A2 целых чисел;
15ВЫВначиная с адреса A1 выводятся A2 веществ, чисел;
16ВЫЦначиная с адреса A1 выводятся A2 целых чисел.

Признак результата OMEGA вырабатывается для числовых операций по следующим правилам:

При запуске машины программа считывается с устройства ввода и помещается в память, начиная с адреса 001. Ниже приведено описание соответствующих структур данных на Паскале:

Пример программы: вычислить для вещественных X и Y:

Y = X + 1 при X < 1.0, 1.0 при X = 1.0, 1.0/(X + 1.0) при X > 1.0.

001 :	05	100	001	000	; ввести X в слово по адресу 100
002 :	01	101	100	010	; <101> := Х+1.0
003 :	02	000	100	010	; сравнение X и 1.0
004 :	19	005	006	008	; условный переход
005 :	00	101	000	010	; Y := 1.0
006 :	15	101	001	000	; вывод Y
007 :	31	000	000	000	; СТОП
008 :	04	101	010	101	; Y := 1.0/(Х+1.0)
009 :	09	000	006	000	; goto 006
010 :		константа 1.0		; маш. представление не конкретизируется

Кроме того, на лекции разбирается задача суммирования элементов массива с переадресацией команд:

001 :	05	100	100	000	; ввод Х[1..100] вещ. чисел по адресу 100
002 :	01	010	010	100	; S := S+X[i]
003 :	11	002	002	009	; «i := i+1»
004 :	12	008	008	009	; N := N-1
005 :	19	006	006	002	; ЦИКЛ
006 :	15	010	001	000	; вывод S
007 :	31	000	000	000	; СТОП.
008 :	00	000	000	100	; Счётчик цикла N=100
009 :	00	000	000	001	; Целая константа - 1
010 :	00	000	000	000	; S = 0.0