(см. также сборник упражнений по учебным машинам «УМ-3»)
Память УМ-3 состоит из 512 32-х разрядных слов с адресами 0511. В слове может храниться команда, (длинное) целое или вещественное число. Команда имеет обычную структуру:
32 разряда | |||
КОП | А1 | А2 | А3 |
---|---|---|---|
5 бит | 9 бит | 9 бит | 9 бит |
где КОП занимает 5, а каждый из адресов — 9 двоичных разрядов. Почти все команды выполняются по обычной схеме:
Ниже приведены номера, мнемоника и семантика операций:
01 | СЛВ | сложение вещественных чисел; |
11 | СЛЦ | сложение целых чисел; |
02 | ВЧВ | вычитание вещественных чисел; |
12 | ВЧЦ | вычитание целых чисел; |
03 | УВЧ | умножение вещественных чисел; |
13 | УЦЧ | умножение целых чисел; |
04 | ДЕВ | деление вещественных чисел; |
14 | ДЕЦ | деление нацело (div) целых чисел; |
24 | МОД | остаток от деления целых (mod) чисел; |
00 | ПЕР | пересылка слов: <A1> := <A3>; |
10 | ЦЕЛ | округление: <A1> := round (<A3>); |
20 | ВЕЩ | целое в вещественное: <A1> := real (<A3>); |
09 | БЕЗ | безусловный переход по адресу A2: goto A2; |
19 | УСЛ | условный переход в зависимости от признака результата OMEGA:
case OMEGA of 0 : goto A1; 1 : goto A2; 2 : goto A3 end; |
31 | СТОП | останов машины; |
05 | BBB | начиная с адреса 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