Электроника МС 0585 Система команд

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Электроника МС 0585 Система команд — перепечатка документа «2.791.026 ТО1 (система команд, техническое описание)». Текст распознан со скана; неразборчивые места помечены «[нрзб.]», сомнительные чтения — «[?]».

Заказ № 499-86

Комплекс вычислительный персональный "Электроника МС 0585". Система команд. Техническое описание 2.791.026 ТО1


1. Введение

1.1. В центральном процессоре ВК "Электроника МС0585" (в дальнейшем — ВК) используются три типа команд: безадресные, одноадресные и двухадресные. В безадресных командах код команды содержит только код операции. В кодах одноадресных и двухадресных команд обычно содержится информация, которая определяет:

1) выполняемую функцию (код операции);

2) регистры общего назначения, используемые при выборке операндов;

3) метод адресации (способ использования выбранного РОН).

1.2. Так как большая часть информации, обрабатываемой вычислительной машиной, представляет собой данные, сформированные в массивы, списки, потоки символов и т.д., центральный процессор разработан с учетом возможности эффективной обработки сформированных структур данных. Регистры общего назначения могут быть использованы:

1) как накопители (обрабатываемые данные хранятся в регистрах);

2) как указатели адреса (регистр общего назначения содержит адрес операнда, а не сам операнд);

3) как указатели адреса, содержимое которых изменяется автоматически с заданным шагом, что позволяет обращаться к последовательно расположенным ячейкам памяти. Автоматическое увеличение содержимого указателя при обращении к последовательно расположенным ячейкам памяти носит название автоинкрементной адресации. Автоматическое уменьшение содержимого указателя при обращении к последовательно расположенным ячейкам памяти носит название автодекрементной адресации. Эти методы могут быть использованы при обработке табулированных данных;

4) как индексные регистры, содержимое которых прибавляется к индексному слову для вычисления адреса операнда. Это позволяет легко обращаться к различным элементам списка.

1.3. Использование автоинкрементного и автодекрементного методов адресации дает возможность организации стековой памяти. В качестве указателя стека программно может быть выбран любой РОН, однако определенные команды (используемые при обслуживании прерывания, обращении к подпрограммам и возврате из подпрограмм) автоматически используют РОН R6 как аппаратный указатель стека (УС).

2. Формат одноадресных команд

2.1. Формат одноадресных команд (таких, как очистка, проверка и т.д.) имеет следующий вид:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
КОП Метод РОН
Поле адресации операнда приемника

2.2. Разряды 15-06 содержат код операции, который определяет выполняемую команду. Разряды 05-00 образуют шестиразрядное поле, именуемое полем адресации операнда приемника, которое в свою очередь состоит из двух подполей:

1) разряды 02-00 определяют один из восьми РОН, который использует данная команда;

2) разряды 05-03 определяют способ использования выбранного регистра (метод адресации). Причем, разряд 03 определяет прямую или косвенную адресацию.

3. Формат двухадресных команд

3.1. Операции над двумя операндами (такие, как сложение, пересылка, сравнение) выполняются с помощью команд, в которых задаются два адреса. Задание разрядов в полях адресации операндов источника и приемника определяют используемые методы адресации и регистры общего назначения. Формат двухадресной команды имеет следующий вид:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
КОП Метод РОН Метод РОН
Поле адресации операнда источника Поле адресации операнда приемника

3.2. Поле адресации операнда источника используется для выборки операнда источника. Поле адресации операнда приемника используется для выборки операнда приемника и занесения результата. Например, по команде "ADD A,B" содержимое ячейки "A" (операнд источника) складывается с содержимым ячейки "B" (операнд приемника). После выполнения операции сложения в ячейке "B" будет находиться результат операции, а содержимое ячейки "A" не изменится.

4. Методы адресации

4.1. В примерах данного подраздела при описании методов адресации используются следующие команды, согласно табл. 1.

Таблица 1
Мнемоника Описание Восьмеричный код
CLR Очистка. Очищается указанная ячейка 0050DD
CLRB Очистка байта. Очищаются старший или младший байты указанной ячейки 1050DD
INC Прибавление единицы. К содержимому указанной ячейки прибавляется единица. 0052DD
INCB Прибавление единицы к байту. 1052DD
COM Инвертирование. Операнд заменяется его обратным кодом, т.е. каждый разряд, равный 0, устанавливается, а каждый разряд, равный 1, очищается. 0051DD
COMB Инвертирование байта. 1051DD
ADD Сложение. Содержимое операнда приемника складывается с содержимым операнда источника и результат заносится по адресу операнда приемника. 06SSDD

4.2. Методы прямой адресации

4.2.1. На рис. 1 показаны последовательности операций при выполнении команд с каждым из четырех методов прямой адресации. При регистровом методе адресации операнд находится в выбранном регистре, который может быть использован как накопитель.

Так как РОН аппаратно реализованы в БИС РАЛУ, они обладают более высоким быстродействием, чем любая другая память, работающая под управлением процессора. Это их преимущество особенно проявляется при операциях с переменными, к которым необходимо часто обращаться.

Методы прямой адресации

Регистровый метод адресации

+----------------------+              +------------------+
!       КОМАНДА        !------------)!     ОПЕРАНД      !
+----------------------+              +------------------+

Автоинкрементный метод адресации

+-----------------+    +-----------------+    +-------------------+
!     КОМАНДА     !---)!      АДРЕС      !---)!      ОПЕРАНД      !
+-----------------+    +-----------------+    +-------------------+
                          !            !
                          !            +----)+-------------------+
                          !                  !   СЛОВО: +2       !---+
                          !                  !   БАЙТ: +1        !   !
                          !                  +-------------------+   !
                          +------------------(--------------------+---+

Автодекрементный метод адресации

+-----------------+    +-----------------+---+       +-----------------+
!    КОМАНДА      !---)!      АДРЕС      !   !   +--)!     ОПЕРАНД     !
+-----------------+    +-----------------+   !   !   +-----------------+
                          !               +--+   !
                          !     +----------+  +--+
                          !     !                   !
                          !     +---)+--------------+---+
                          !         ! СЛОВО: -2    !---*---+
                          !         ! БАЙТ: -1     !
                          +---------(--------------+

Индексный метод адресации

+-----------------+    +-----------------+
!    КОМАНДА      !--->!      АДРЕС      !---+
+-----------------+    +-----------------+   !
                                             !
                                  +--------+ !
                                +-)!       ! !
                                  !   +    !---)+------------------+
                                +-)!       !    !     ОПЕРАНД      !
                                  +--------+    +------------------+
                                             !
+------------------+                         !
!    ИНДЕКСНОЕ     !                         !
!      СЛОВО       !-------------------------+
+------------------+

Рис. 1. Методы прямой адресации

Примеры регистровой адресации

Символическое обозначение Восьмеричный код Наименование команды
1) INC R3 005203 Прибавление единицы

Действие: к содержимому R3 прибавляется единица.

Символическое обозначение Восьмеричный код Наименование команды
2) ADD R2,R4 060204 Сложение

Действие: содержимое R2 складывается с содержимым R4.

До выполнения операции После выполнения операции
R2) 000002 000002
R4) 000004 000006
Символическое обозначение Восьмеричный код Наименование команды
3) COMB R4 105104 Инвертирование байта

Действие: содержимое разрядов 07-00 в R4 заменяется их обратным кодом. (Байтовые команды, использующие регистровый метод адресации, оперируют только с младшими байтами информации, содержащимися в РОН).

До выполнения операции После выполнения операции
R4) 022222 022155

4.2.2. Автоинкрементный метод адресации используется при автоматическом обращении с заданным шагом к последовательным элементам таблицы операндов. Содержимое выбранного регистра автоматически наращивается для обеспечения возможности обращения в дальнейшем к последующей ячейке. При байтовых операциях наращивание происходит на 1, при операциях с полными словами — на 2, а содержимое R6, R7 всегда наращивается на 2. Автоинкрементный метод адресации особенно удобен при операциях с массивами и стеками. С помощью этого метода можно выбрать элемент таблицы, а затем нарастить указатель для обращения к следующему элементу в таблице. Хотя этот метод наиболее удобен при работе с таблицами, он может быть использован как общий метод для различных целей.

Примеры автоинкрементной адресации

Символическое обозначение Восьмеричный код Наименование команды
1) CLR (R5)+ 005025 Очистка

Действие: ячейка, адрес которой содержится в R5, очищается, после чего адрес (содержимое R5) увеличивается на 2.

До выполнения операции После выполнения операции
20000) 005025 R5) 030000 20000) 005025 R5) 030002
30000) 111116 30000) 000000
Символическое обозначение Восьмеричный код Наименование команды
2) CLRB (R5)+ 105025 Очистка байта

Действие: очищается выбранный байт, адрес которого содержится в R5, после чего адрес (содержимое R5) увеличивается на единицу.

До выполнения операции После выполнения операции
20000) 105025 R5) 030000 20000) 105025 R5) 030001
30000) 111116 30000) 111000
Символическое обозначение Восьмеричный код Наименование команды
3) ADD (R2)+,R4 062204 Сложение

Действие: операнда, адрес которого содержится в R2, складывается с содержимым R4. Результат заносится в R4, а содержимое R2 (адрес операнда источника) наращивается на 2.

До выполнения операции После выполнения операции
100) 062204 R2) 000204 100) 062204 R2) 000206
R4) 001000 R4) 003000
204) 002000 204) 002000

4.2.3. Автодекрементный метод адресации также используется для обработки табулированных данных. Однако в отличие от автоинкрементного метода, адресация к ячейкам массива идет в противоположном направлении. При этом методе адресации содержимое выбранного РОН уменьшается (для байтовых команд — на единицу, для команд с полными словами — на два), а затем используется как исполнительный адрес.

Сочетание автоинкрементного и автодекрементного методов адресации может быть эффективно использовано при работе со стеком.

Примеры автодекрементной адресации

Символическое обозначение Восьмеричный код Наименование команды
1) INC -(R0) 005240 Прибавление единицы

Дествие: содержимое R0 уменьшается на 2 и используется как исполнительный адрес. К операнду, выбранному из ячейки по этому адресу, прибавляется единица.

До выполнения операции После выполнения операции
100) 005240 R0) 017776 100) 005240 R0) 017774
17774) 000000 17774) 000001
Символическое обозначение Восьмеричный код Наименование команды
2) INCB -(R0) 105240 Прибавление единицы к байту

Действие: содержимое R0 уменьшается на единицу и используется как адрес операнда. К выбранному байту прибавляется единица.

До выполнения операции После выполнения операции
100) 105240 R0) 017776 100) 105240 R0) 017775
17774) 000000 17774) 000400
Символическое обозначение Восьмеричный код Наименование команды
3) ADD -(R3),R0 064300 Сложение

Действие: содержимое R3 уменьшается на 2 и используется как адрес операнда источника, который складывается с содержимым R0 (операнда приемника). Результат записывается в R0.

До выполнения операции После выполнения операции
120) 064300 R0) 000020 120) 064300 R0) 000070
(продолжение)
До выполнения операции После выполнения операции
R3) 001776 R3) 001774
1774) 000050 1774) 000050

4.2.4. Индексный метод адресации, при котором исполнительный адрес определяется как сумма содержимого выбранного РОН с индексным словом, позволяет осуществлять произвольный доступ к элементам структуры данных. Индексное слово содержится в следующей за командным словом ячейке памяти. При индексном методе адресации содержимое выбранного регистра может быть использовано в качестве базы для вычисления серии адресов.

Примеры индексной адресации

Символическое обозначение Восьмеричный код Наименование команды
1) CLR 200(R4) 005064
000200
Очистка

Действие: адрес операнда определяется прибавлением к содержимому R4 кода 200, после чего ячейка с вычисленным адресом очищается.

До выполнения операции После выполнения операции
1020) 005064 R4) 001000 1020) 005064 R4) 001000
1022) 000200 1022) 000200
1200) 177777 1200) 000000
Символическое обозначение Восьмеричный код Наименование команды
2) COMB 200(R1) 105161
000200
Инвертирование байта

Действие: адрес операнда определяется прибавлением к содержимому R1 кода 200. После этого содержимое ячейки с вычисленным адресом (старший байт) заменяется его обратным кодом.

До выполнения операции После выполнения операции
1020) 105161 R1) 017777 1020) 105161 R1) 017777
1022) 000200 1022) 000200
20176) 011000 20176) 166400
Символическое обозначение Восьмеричный код Наименование команды
3) ADD 30(R2),20(R5) 066265
000030
000020
Сложение

Действие: содержимое ячейки, адрес которой вычисляется сложением кода 30 с содержимым R2 (операнда источника), складывается с содержимым ячейки, адрес которой вычисляется сложением кода 20 с содержимым R5 (операнда приемника). Результат записывается по адресу операнда приемника.

До выполнения операции После выполнения операции
1020) 066265 R2) 001100 1020) 066265 R2) 001100
1022) 000030 R5) 002000 1022) 000030 R5) 002000
1024) 000020 1024) 000020
1130) 000001 1130) 000001
2020) 000001 2020) 000002

4.3. Методы косвенной адресации

4.3.1. Четыре основных метода могут быть использованы в комбинации с косвенной адресацией. Если при регистровом методе содержимое выбранного регистра является операндом, то при косвенно-регистровом методе это содержимое является адресом операнда. При трех других косвенных методах вычисленный адрес позволяет выбрать только адрес операнда, а не сам операнд. Эти методы используются при обращении к таблицам, состоящим из адресов, а не из операндов.

На рис. 2 показаны последовательности выполнения операции.

Косвенно-регистровый метод адресации

+-----------------+    +--------------------+    +-----------------+
!    КОМАНДА      !--->!       АДРЕС        !--->!     ОПЕРАНД     !
+-----------------+    +--------------------+    +-----------------+

Косвенно-автоинкрементный метод адресации

+-----------+   +-------------+        +-------------+    +--------------+
! КОМАНДА   !-->!   АДРЕС     !----+--->!   АДРЕС     !-->!   ОПЕРАНД    !
+-----------+   +------.------+    !   +-------------+    +--------------+
                       !           !   +-------------+
                       !           +-->!     +2      !---+
                       !               +-------------+   !
                       +------------------(--------------+

Косвенно-автодекрементный метод адресации

+-----------+  +----------+    +------+         +----------+   +-----------+
! КОМАНДА   !->!  АДРЕС   !----!  -2  !--+----->!  АДРЕС   !-->!  ОПЕРАНД  !
+-----------+  +----.-----+    +------+  !      +----------+   +-----------+
                    !                    !
                    !                    !
                    +--------(-----------+

Косвенно-индексный метод адресации

+-----------+  +---------+
! КОМАНДА   !->!  АДРЕС  !--+
+-----------+  +---------+  !
                            !
                       +----+
                    +->!    !
                    !  !  + !--->+---------+   +------------+
                    +->!    !    !  АДРЕС  !-->!  ОПЕРАНД   !
                       +----+    +---------+   +------------+
+---------------+          !
! ИНДЕКСНОЕ     !          !
!    СЛОВО      !----------+
+---------------+

Рис. 2. Методы косвенной адресации

Пример косвенно-регистрового метода адресации

Символическое обозначение Восьмеричный код Наименование команды
CLR @R5 005015 Очистка

Действие: очищается ячейка, адрес которой содержится в R5.

(продолжение)
До выполнения операции После выполнения операции
1020) 005015 R5) 001700 1020) 005015 R5) 001700
1700) 177777 1700) 000000

Пример косвенно-автоинкрементного метода адресации

Символическое обозначение Восьмеричный код Наименование команды
INC @(R2)+ 005232 Прибавление единицы

Действие: содержимое ячейки, адрес которой находится в R2, используется как адрес операнда. Операнд увеличивается на единицу, а содержимое R2 — на 2.

До выполнения операции После выполнения операции
1000) 005232 R2) 010300 100) 005232 R2) 010302
1010) 000000 1010) 000001
10300) 001010 10300) 001010

Пример косвенно-автодекрементной адресации

Символическое обозначение Восьмеричный код Наименование команды
COM @-(R0) 005150 Инвертирование

Действие: содержимое R0 уменьшается на 2 и используется как адрес ячейки, в которой находится адрес операнда. Операнд заменяется его обратным кодом.

До выполнения операции После выполнения операции
1000) 005150 R0) 010776 1000) 005150 R0) 010774
10100) 012345 10100) 165432
10774) 010100 10774) 010100

Пример косвенно-индексной адресации

Символическое обозначение Восьмеричный код Наименование команды
ADD @1000(R2), R1 067201
001000
Сложение

Действие: содержимое ячейки, адрес адреса которой определяется сложением кода 1000 с содержимым R2, складывается с операндом, хранящимся в R1. Результат записывается в R1.

До выполнения операции После выполнения операции
1020) 067201 R1) 001234 1020) 067201 R1) 001236
1022) 001000 R2) 000100 1022) 001000 R2) 000100
1050) 000002 1050) 000002
1100) 001050 1100) 001050

4.4. Использование счетчика команд (СК) в качестве регистра общего назначения

4.4.1. Регистр R7, являясь одним из восьми РОН, выполняет в центральном процессоре специальную функцию счетчика команд. Когда центральный процессор использует счетчик команд для выборки слова из памяти, его содержимое автоматически увеличивается на 2. Новое содержимое счетчика является адресом слова, используемого при выполнении данной команды, или адресом следующей команды, которую необходимо выполнить. Следует отметить, что при работе с байтами содержимое СК также увеличивается на 2.

4.4.2. Счетчик команд может быть использован со всеми методами адресации, применяемыми в микро-ЭВМ. Однако, наиболее эффективно он используется только с четырьмя методами адресации. Эти методы адресации получили специальные наименования: непосредственный, абсолютный, относительный и косвенно-относительный. Использование этих методов дает возможность построения программ, работоспособность которых не теряется при перемещении их в любую область памяти. В табл. 4 приведены методы адресации с использованием R7.

Необходимо помнить, что эти четыре метода аналогичны описанным в п.п. 4.1. и 4.2., но в качестве РОН используется R7.

Таблица 4
Двоичный код Наименование Функция
010 Непосредственный Операнд выбирается из ячейки, следующей за командным словом.
011 Абсолютный Из ячейки, следующей за командным словом, выбирается адрес операнда.
110 Относительный Операнд выбирается из ячейки, адрес которой определяется как сумма содержимого СК и ячейки, следующей за командным словом
111 Косвенно-относительный Из ячейки, адрес которой определяется как сумма содержимого СК и ячейки, следующей за командным словом, выбирается адрес операнда.

Методы адресации с использованием СК в значительной мере упрощают обработку данных, не сформированных в массивы.

4.4.3. Непосредственный метод адресации имеет символическое обозначение #N. Он эквивалентен автоинкрементному методу адресации через СК.

Этот метод обеспечивает экономию времени программиста при составлении программы за счет возможности помещения константы в ячейку памяти вслед за командным словом.

Пример непосредственной адресации

Символическое обозначение Восьмеричный код Наименование команды
ADD #10,R0 062700
000010
Сложение

Действие: содержимое R0 складывается с числом 10. Результат записывается в R0.

До выполнения операции После выполнения операции
1020) 062700 R0) 000020 1020) 062700 R0) 000030
1022) 000010 1022) 000010

Примечание. После выборки команды содержимое СК (адрес этой команды) увеличивается на 2. Так как в поле адреса операнда источника записан код 27, СК используется как указатель адреса при выборке операнда, после чего содержимое его вновь увеличивается на 2 для указания на следующую команду.

4.4.4. Абсолютный метод адресации имеет символическое обозначение @#A. Он эквивалентен косвенно-автоинкрементной адресации через СК. Этот метод удобен тем, что адрес операнда является его абсолютным адресом (т.е. он остается постоянным, независимо от места расположения программы в памяти).

Пример абсолютной адресации

Символическое обозначение Восьмеричный код Наименование команды
CLR @#1100 005037
001100
Очистка

Действие: содержимое ячейки, следующей за командой, используется в качестве адреса операнда (в данном случае исполнительным адресом является код 1100). Содержимое ячейки с адресом 1100 очищается.

До выполнения операции После выполнения операции
20) 005037 20) 005037
22) 001100 22) 001100
1100) 177777 1100) 000000

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

Пример относительной адресации.

Символическое обозначение Восьмеричный код Наименование команды
INC A 005267
000054
Прибавление единицы

Действие: к операнду, адрес которого определяется сложением содержимого СК и индексного слова (000054), прибавляется 1.

До выполнения операции После выполнения операции
1020) 005267 1020) 005267
1022) 000054 1022) 000054
1024) 1024)
1100) 000000 1100) 000001

4.4.6. Косвенно-относительный метод адресации имеет символическое обозначение @X(СК) или @A, где X — адрес ячейки, содержащей исполнительный адрес, по отношению к счетчику команд. Этот метод эквивалентен косвенно-индексной адресации через СК.

ПРИМЕР КОСВЕННО-ОТНОСИТЕЛЬНОЙ АДРЕСАЦИИ

Символическое обозначение Восьмеричный код Наименование команды
CLR @A 005077
000020
Очистка

Действие: очищается ячейка с адресом, находящимся в ячейке, адрес которой определяется прибавлением индексного слова к содержимому счетчика команд.

До выполнения операции После выполнения операции
1020) 005077
1022) 000020
1024)
1044) 010100
10100) 123456
1020) 005077
1022) 000020
1024)
1044) 010100
10100) 000000

4.5. Использование указателя стека (УС) в качестве регистра общего назначения

4.5.1. Регистр R6, являясь одним из РОН, используется в микро-ЭВМ как указатель адреса при обращении к той части памяти, которая отводится под стек. С помощью автодекрементной адресации через R6 данные записываются в стек, а с помощью автоинкрементной адресации производится выборка данных из стека. Индексный метод адресации позволяет производить произвольную выборку элементов стека.

Так как R6 используется для обслуживания прерывания, уменьшение и увеличение его содержимого всегда производится с шагом 2. При выполнении байтовых команд с использованием R6 содержимое ячеек с нечетными адресами не изменяется.

5. Выполнение команд

5.1. Описание каждой команды включает: мнемонику, восьмеричный код, формат команды, двоичный код, описание выполнения команды и выработки признаков, специальные пояснения и примеры.

При описании команд используются следующие обозначения:

R — регистр общего назначения;
СК — счетчик команд (R7);
УС — указатель стека (R6);
РСП — регистр состояния процессора;
ССП — слово состояния процессора;
SS — поле адресации операнда источника;
SRC — источник;
(SRC) — операнд источника;
DD — поле адресации операнда приемника;
DST — приемник;
(DST) — операнд приемника;
XXX — смещение (8 разрядов);
NN — смещение (6 разрядов);
( ) — содержимое ячейки;
& — логическое умножение;
V — логическое сложение ("или");
/V/ — "исключающее или";
-A — отрицание A ("не");
<- — становится равным;
PUSH — запись в стек;
POP — выборка из стека;
B — байтовая команда;
= — равно;
/=/ — не равно;
>= — больше или равно;
<= — меньше или равно.
* — умножение
** — возведение в степень

5.2. Форматы команд

5.2.1. Одноадресные команды (CLR, COM, INC, DEC, NEC, TST, ADC, SBC, SXT, ROR, ROL, ASR, ASL, JMP, SWAB, MFPS, MTPS, MTPI, MTPD, MFPI, MFPD).

15 14-06 05-00
(поле) Код операции DD или SS

5.2.2. Двухадресные команды (MOV, CMP, ADD, SUB, BIT, BIC, BIS)

15-12 11-06 05-00
Код операции SS DD

Команда XOR

15-09 08-06 05-00
Код операции R DD

5.2.3. Команды управления программой

1) Команды ветвления

15-08 07-00
Код операции XXX

2) Команда JSR

15 14-12 11-09 08-06 05-00
0 0 4 R DD

3) Команда RTS

15 14-12 11-09 08-06 05-03 02-00
0 0 0 2 0 R

4) Команды прерывания (EMT, TRAP, BPT, IOT)

15-00
Код операции

5) Команда MARK

15-06 05-00
Код операции NN

6) Команда SOB

15-09 08-06 05-00
Код операции R NN

5.2.4. Специальные команды (HALT, WAIT, RESET, RTI, RTT, NOP)

15-00
Код операции

5.2.5. Команды изменения признаков

15-04 03 02 01 00
Код операции N Z V C

5.3. Выполнение байтовых команд

Большинство команд ЭВМ оперируют как с полными словами, так и с байтами. Байтовые команды с автоинкрементным или автодекрементным методами адресации для обращения к следующему байту изменяют содержимое указанного регистра на "1". Байтовые команды при регистровом методе адресации производят обработку младшего байта выбранного регистра. Если старший разряд командного слова (разряд 15) установлен, он указывает, что команда байтовая. Если же в разряде 15 командного слова записан "0", команда оперирует с полным словом.

Пример:

CLR 0050DD Очистка слова
CLRB 1050DD Очистка байта

5.4. Одноадресные команды

CLR 0050DD
CLRB 1050DD
Очистка

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 0 0 0 D D D D D D

Действие: (DST)<-0

Признаки:

  • N - очищается;
  • Z - устанавливается;
  • V - очищается;
  • C - очищается.

Описание: в указанную ячейку записывается нуль. Для байтовой команды нуль записывается в указанный байт.

Пример: CLR R1

До выполнения операции После выполнения операции
(R1) = 177777
NZVC
1111
(R1) = 000000
NZVC
0100

COM 0051DD
COMB 1051DD
Инвертирование

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 0 0 1 D D D D D D

Действие: (DST)<- (-DST)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - очищается;
  • C - устанавливается.

Описание: содержимое указанной ячейки заменяется его двоичным обратным кодом (каждый разряд, содержащий "0", устанавливается, а каждый разряд, содержащий "1", очищается). Для байтовой команды операция производится по отношению к указанному байту.

Пример: COM R0

До операции После операции
(R0) = 013333
NZVC
0110
(R0) = 164444
NZVC
1001

INC 0052DD
INCB 1052DD
Прибавление единицы

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 0 1 0 D D D D D D

Действие: (DST) <- (DST) + 1

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - устанавливается, если операнд равен 077777, в противном случае - очищается;
  • C - не изменяется.

Описание: к содержимому указанной ячейки (или байту, если команда байтовая) прибавляется единица.

Пример: INC R2

До операции После операции
(R2) = 000333
NZVC
0000
(R2) = 000334
NZVC
0000

DEC 0053DD
DECB 1053DD
Вычитание единицы

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 0 1 1 D D D D D D

Действие: (DST) <- (DST) - 1

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - устанавливается, если операнд = 100000, в противном случае - очищается;
  • C - не изменяется.

Описание: из содержимого указанной ячейки (или указанного байта для байтовых команд) вычитается единица.

Пример: DEC R5

До операции После операции
(R5) = 000001
NZVC
1000
(R5) = 000000
NZVC
0100

NEG 0054DD
NEGB 1054DD
Изменение знака

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 1 0 0 D D D D D D

Действие: (DST) <- -(DST)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - устанавливается, если результат = 100000, в противном случае - очищается;
  • C - очищается, если результат = 0, в противном случае - устанавливается.

Описание: содержимое указанной ячейки (или байта для байтовых команд) заменяется его двоичным дополнением. Следует заметить, что число 100000 заменяется самим собой, так как не существует соответствующего ему положительного числа.

Пример: NEG R0

До операции После операции
(R0) = 000010
NZVC
0000
(R0) = 177770
NZVC
1001

TST 0057DD
TSTB 1057DD
Проверка

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 1 1 1 D D D D D D

Действие: (DST) <- (DST)

Признаки:

  • N - устанавливается, если операнд < 0, в противном случае - очищается;
  • Z - устанавливается, если операнд = 0, в противном случае - очищается;
  • V - очищается;
  • C - очищается.

Описание: в зависимости от содержимого указанной ячейки (или байта для байтовых команд) устанавливаются или очищаются признаки "N" и "Z".

Пример: TST R1

До операции После операции
(R1) = 012340
NZVC
0011
(R1) = 012340
NZVC
0000

Увеличение или уменьшение чисел в кратное степени 2 число раз выполняется с помощью команд арифметического сдвига: ASR - арифметического сдвига вправо и ASL - арифметического сдвига влево. Знаковый разряд операнда (разряд 15) при арифметическом сдвиге вправо восстанавливается. В младший разряд при арифметическом сдвиге влево заносится нуль. Информация, сдвинутая за пределы C-разряда, теряется.

ASR 0062DD
ASRB 1062DD
Арифметический сдвиг вправо

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 1 0 0 1 0 D D D D D D

Действие: (DST) <- сдвинутое на одну позицию вправо (DST).

Признаки:

  • N - устанавливается, если старший разряд результата установлен, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - устанавливается результатом операции "исключающее или" над содержимым "N" и "C" разрядов ( N/V/C ), которое они имеют после операции сдвига;
  • C - загружается содержимым младшего разряда (DST).

Описание: все разряды операнда сдвигаются вправо на одну позицию. Содержимое знакового разряда восстанавливается. C-разряд загружается содержимым младшего разряда операнда. Таким образом, ASR или ASRB выполняет деление числа со знаком на 2.

Пример:

Сдвиг полного слова

        +----+------------------------------------+            +-------+
  +-)!     !          ------------------)        !  ----------) !  C  ! ------)
  !     +----+------------------------------------+            +-------+
  !     !  15!                                    00
  +-------+

Сдвиг байта

          15  14  13  12  11  10  09  08
        +----+-----------------------------------+              +-------+
  +-)  !     !                                    !  ---------) !  C  ! ------)
  !    +----+-----------------------------------+              +-------+
  !       !              НЕЧЕТНЫЙ АДРЕС
  +-------+

          07  06  05  04  03  02  01  00
        +----+-----------------------------------+              +-------+
  +-)  !     !                                    !  ---------) !  C  ! ------)
  !    +----+-----------------------------------+              +-------+
  !       !              ЧЕТНЫЙ АДРЕС
  +-------+

ASL 0063DD
ASLB 1063DD
Арифметический сдвиг влево

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 1 0 0 1 1 D D D D D D

Действие: (DST) <- сдвинутое на одну позицию влево (DST)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - загружается результатом операции "N /V/ C" (значения "N" и "C" после окончания операции сдвига);
  • C - загружается содержимым старшего разряда операнда.

Описание: все разряды операнда сдвигаются на одну позицию влево. В младший разряд результата записывается нуль. C - разряд загружается содержимым старшего разряда операнда. Таким образом, ASL или ASLB выполняет умножение числа со знаком на 2.

Пример:

Сдвиг полного слова

  +-----+   +----------------------------------+
  ! C  !(---  !        (-----------            !  (----------- 0
  +-----+   +----------------------------------+
               15                              00

Сдвиг байта

  +-----+   +-----------------+
  ! C  !(---  !   (---------   !  (---------- 0
  +-----+   +-----------------+
               15  НЕЧЕТНЫЙ  08
                   АДРЕС
  +-----+   +-----------------+
  ! C  !(---  !   (---------   !  (---------- 0
  +-----+   +-----------------+
               07  ЧЕТНЫЙ    00
                   АДРЕС

Для облегчения последовательной проверки и поразрядной обработки операнда используются команды циклического сдвига. Они оперируют со словом операнда и C-разрядом как с содержимым 17-разрядного регистра с циклическим переносом.

ROR 0060DD
RORB 1060DD
Циклический сдвиг вправо

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 1 0 0 0 0 D D D D D D

Действие: (DST) <- циклически сдвинутое на одну позицию вправо (DST)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - загружается результатом операции "N /V/ C" (значения "N" и "C" после окончания операции сдвига);
  • C - загружается младшим разрядом операнда.

Описание: все разряды операнда циклически сдвигаются на одну позицию вправо. Содержимое младшего разряда загружается в C-разряд, а прежнее содержимое C-разряда загружается в старший разряд результата.

Пример:

Сдвиг полного слова

        +-----+      +------------------------------------+
  +--)! C   !--->  !      ----------->                  !-----+
  !   +-----+      +------------------------------------+     !
  !                 15                           00            !
  +----------------------------------------------------------+

Сдвиг байта

        +----+      +--------------+       +----+      +--------------+
  +--)! C   !----> !  --------->  !-+ +-)! C   !----> !  --------->  !-+
  !   +----+      +--------------+ ! !   +----+      +--------------+ !
  !                15          08  ! !                07          00  !
  +--------------------------------+ +--------------------------------+
           НЕЧЕТНЫЙ                            ЧЕТНЫЙ
            АДРЕС                               АДРЕС

ROL 0061DD
ROLB 1061DD
Циклический сдвиг влево

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 1 0 0 0 1 D D D D D D

Действие: (DST)<- циклически сдвинутое на одну позицию влево (DST);

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае - очищается;
  • V - загружается результатом операции "N /V/ C" (значения "N" и "C" после окончания операции сдвига);
  • C - загружается старшим разрядом операнда.

Описание: все разряды операнда циклически сдвигаются на одну позицию влево. Содержимое старшего разряда загружается в C-разряд, а прежнее содержимое C-разряда загружается в младший разряд результата.

Пример:

Сдвиг полного слова

        +------+          +----------------------------------+
  +-------! C   !<--------!      <--------------          !<---------------+
  !       +------+          +----------------------------------+              !
  !                          15                          00                   !
  !                                                                           !
  +---------------------------------------------------------------------------+

Сдвиг байта

        +-----+      +---------------+          +-----+      +--------------+
  +---! C   !<---!  <---------   !<--+    +---! C  !<---!  <--------- !---+
  !   +-----+      +---------------+   !    !   +-----+      +--------------+   !
  !                15          08      !    !                07          00      !
  !                                    !    !                                    !
  +------------------------------------+    +------------------------------------+
           НЕЧЕТНЫЙ АДРЕС                              ЧЕТНЫЙ АДРЕС

При вычислениях с повышенной точностью иногда необходимо выполнять арифметические операции над операндами длиной в несколько слов. Для реализации арифметических операций с повышенной точностью применяются команды прибавления переноса (ADC) и вычитания переноса (SBC). Например, два 16-разрядных слова могут быть объединены в 32-разрядное слово и над ним могут быть выполнены операции сложения или вычитания, как показано ниже.

32 - разрядное слово

  +--------------------------+           +---------------------------+
  !           R3             !           !            R1             !
  +--------------------------+           +---------------------------+
  31                       16            15                        00
  +--------------------------+           +---------------------------+
  !           R4             !           !            R2             !
  +--------------------------+           +---------------------------+
  31                       16            15                        00
  +--------------------------+           +---------------------------+
  !           R4             !           !            R2             !
  +--------------------------+           +---------------------------+
  31                       16            15                        00

Пример: сложение (-1) с (-1) может быть выполнено следующим образом:

- 1 = 37777777777

(R1) = (R2) = (R3) = (R4) = 177777

ADD R1,R2
ADC R3
ADD R3,R4

  1. После сложения (R1) с (R2) в C-разряд загружается 1.
  2. Команда ADC прибавляет C-разряд к (R3), после чего (R3) = 000000.
  3. Складываются (R3) и (R4).
  4. Результат = 37777777776 = -2

ADC 0055DD
ADCB 1055DD
Прибавление переноса

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 1 0 1 D D D D D D

Действие: (DST) <- (DST) + (C)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае очищается;
  • Z - устанавливается, если результат = 0, в противном

случае очищается;

  • V - устанавливается, если перед выполнением операции (DST) = 077777, а (C) = 1, в противном случае очищается;
  • C - устанавливается, если перед выполнением операции (DST) = 177777, а (C) = 1, в противном случае очищается.

Описание: операнд складывается с содержимым C - разряда.

Пример: ADC R3

До операции После операции
(R3) = 077777
NZVC
0001
(R3) = 100000
NZVC
1010

SBC 0056DD
SBCB 1056DD
Вычитание переноса

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 0 1 0 1 1 1 0 D D D D D D

Действие: (DST) <- (DST) - (C)

Признаки:

  • N - устанавливается, если результат < 0, в противном случае - очищается;
  • Z - устанавливается, если результат = 0, в противном случае очищается;
  • V - устанавливается, если перед выполнением команды (DST) = 100000 и C = 1, в противном случае - очищается;
  • C - устанавливается, если (DST) = 0 и (C) = 1, в противном случае - очищается.

Описание: содержимое C-разряда вычитается из операнда. Это позволяет вычесть перенос, получившийся при вычитании двух младших 16-разрядных слов из результата вычитания двух старших 16-разрядных слов.

Пример:

Вычитание с удвоенной точностью осуществляется следующей последовательностью команд:

SUB A0, B0
SBC B1
SUB A1, B1

SXT 0067DD
Расширение знака

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 1 0 1 1 1 D D D D D D

Действие:

  • (DST) <- 0, если "N" очищен.
  • (DST) <- -1, если "N" установлен.

Признаки:

  • N - не изменяется;
  • Z - устанавливается, если (N) = 0;
  • V - очищается;
  • C - не изменяется.

Описание: если (N) = 1, операнд заменяется кодом 177777, если (N) = 0, указанная ячейка очищается. Эта команда обычно используется при выполнении операций с повышенной точностью для расширения знака в 32-разрядном слове.

Пример: SXT R3

До операции После операции
(R3) = 012345
NZVC
1000
(R3) = 177777
NZVC
1000

При обработке данных, представленных 8-разрядными байтами, может быть весьма полезна команда перестановки байтов (SWAB).

SWAB 0003DD
Перестановка байтов

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 1 1 D D D D D D

Действие: байт 1/байт 0 <- байт 0/байт 1.

Признаки:

  • N - устанавливается, если старший разряд младшего байта (разряд 7) - установлен, в противном случае - очищается;
  • Z - устанавливается, если младший байт результата = 0;
  • V - очищается;
  • C - очищается.

Описание: старший и младший байты указанной ячейки меняются местами. Адресация происходит к полному слову.

Пример: SWAB R1

До операции После операции
(R1) = 077777
NZVC
1111
(R1) = 177577
NZVC
0000

Слово состояния процессора (ССП) хранится в регистре. Возможность программного доступа к ССП обеспечивается командами чтения и записи ССП.

MFPS 1067DD
Чтение ССП

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 0 0 1 1 0 1 1 1 S S S S S S

Действие: (DST) <- ССП

Признаки:

  • N - устанавливается, если разряд (07) слова состояния процессора равен 1, в противном случае - очищается;
  • Z - устанавливается, если все восемь разрядов ССП (разряды (00:07)) = 0, в противном случае - очищается;
  • V - очищается;
  • C - не изменяется.

Описание: восемь разрядов слова состояния процессора (ССП) пересылаются в указанную ячейку. Если используется регистровый метод адресации и разряд (07) слова состояния процессора установлен то в указанном регистре происходит расширение знака. Адрес операнда приемника воспринимается как адрес байта.

Пример: MFPS R0

До операции После операции
(R0) = 000000
РСП = 000014
(R0) = 000014
РСП = 000000

MTPS 1064SS
Запись ССП

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 0 0 1 1 0 1 0 0 S S S S S S

Действие: ССП <- (SRC)

Признаки: устанавливаются или очищаются в соответствии с разрядами (00:03) операнда источника (SRC).

Описание: в системном режиме восемь разрядов указанного операнда замещают содержимое младшего байта регистра состояния процессора. Адрес операнда источника воспринимается как адрес байта. В режиме пользователя устанавливаются или очищаются только разряды (00:03) ССП Следует заметить, что T-разряд (разряд (04) ССП) не изменяется ни для одного из режимов.

5.5. Двухадресные команды

Использование двухадресных команд обеспечивает возможность экономии машинного времени и сокращения количества команд в программе. Список двухадресных команд содержит 4 арифметические и 4 логические команды.

5.5.1. Арифметические команды

MOV 01SSDD
MOVB 11SSDD
Пересылка

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0/1 0 0 1 S S S S S S D D D D D D

Действие: (DST) <- (SRC)

Признаки:

  • N - устанавливается, если (SRC) < 0, в противном случае - очищается;
  • Z - устанавливается, если (SRC) = 0, в противном случае - очищается;
  • V - очищается;
  • C - не изменяется.

Описание: операнд источника (SRC) пересылается по адресу операнда приемника. Прежнее содержимое ячейки DST теряется. Содержимое ячейки SRC не изменяется. при операциях с байтами команда MOVB с использованием регистрового метода адресации (единственная среди байтовых команд) расширяет старший разряд младшего байта (расширение знака). Все разряды старшего байта устанавливаются или сбрасываются в зависимости от того, установлен или сброшен старший (знаковый) разряд младшего байта. В других случаях MOVB оперирует с байтами так, как MOV со словами.

Примеры:

MOV X, R1 — загружает R1 содержимым ячейки памяти X;
MOV #20, R0 — загружает число 20 в регистр R0;
MOV #20,-(R6) — записывает операнд, содержащийся в ячейке с адресом 20, в стек.
MOV (R6)+,@#177566 — выбирает операнд из стека и записывает его в ячейку 177566.
MOV R1, R3 — выполняет межрегистровую передачу.

CMP 02SSDD
CMPB 12SSDD

Сравнение

Формат команды CMP, CMPB
15 14 13 12 11-06 05-00
0/1 0 1 0 S D

Действие: (SRC) - (DST)

Признаки: N — устанавливается, если результат < 0, в противном случае — очищается;

Z — устанавливается, если результат = 0, в противном случае — очищается;

V — устанавливается, если было арифметическое переполнение (это может произойти в случае, когда операнды были противоположного знака, а знак результата совпадает со знаком операнда приемника), в противном случае — очищается;

C — очищается, если был перенос из старшего разряда результата, в противном случае — устанавливается.

Описание: сравниваются операнды источника и приемника и как результат сравнения изменяются признаки, которые затем могут быть использованы для команд условных переходов. Оба операнда не изменяются. За командой сравнения обычно следует команда условного ветвления. Заметим, что в отличие от команды вычитания при выполнении команды CMP операнды меняются местами: (SRC) - (DST), а не (DST) - (SRC).

ADD 06SSDD

Сложение

Формат команды ADD
15 14 13 12 11-06 05-00
0 1 1 0 S D

Действие: (DST) <- (SRC) + (DST)

Признаки: N — устанавливается, если результат < 0, в противном случае — очищается;

Z — устанавливается, если результат = 0, в противном случае — очищается;

V — устанавливается, если в результате операции произошло арифметическое переполнение (это происходит, когда операнды были одного знака, а результат получился противоположного знака), в противном случае — очищается;

C — устанавливается, если был перенос из старшего разряда результата, в противном случае — очищается.

Описание: операнд источника (SRC) складывается с операндом приемника (DST) и результат записывается по адресу операнда приемника. Первоначальное содержимое (DST) теряется. Содержимое (SRC) не изменяется. Сложение выполняется в двоичном дополнительном коде.

Пример: ADD R1, R2

До операции После операции
(R1) = 000020
(R2) = 000060
NZVC
1111
(R1) = 000020
(R2) = 000100
NZVC
0000

SUB 16SSDD

Вычитание

Формат команды SUB
15 14 13 12 11-06 05-00
1 1 1 0 S D

Действие: (DST) <- (DST) - (SRC)

Признаки: N — устанавливается, если результат < 0, в противном случае — очищается;

Z — устанавливается, если результат = 0, в противном случае — очищается;

V — устанавливается, если в результате операции произошло арифметическое переполнение (это происходит, когда операнды были противоположного знака, а знак операнда совпадает со знаком операнда источника), в противном случае — очищается;

C — очищается, если был перенос из старшего разряда результата, в противном случае — устанавливается.

Описание: из операнда приемника (DST) вычитается операнд источника (SRC) и

результат записывается по адресу DST. Первоначальное содержимое DST теряется, а содержимое SRC остается без изменения. При арифметических операциях с удвоенной точностью установка C-разряда означает заем единицы из старшей части вычитаемого.

Пример: SUB R1, R2

До операции После операции
(R1) = 011111
(R2) = 012345
NZVC
1111
(R1) = 011111
(R2) = 001234
NZVC
0000

5.5.2. Логические команды

Из четырех логических команд три имеют такой же формат, как и двухадресные арифметические команды. Четвертая команда имеет специфический формат. Логические команды позволяют осуществлять поразрядную обработку данных.

BIT 03SSDD
BITB 13SSDD

Проверка разрядов

Формат команды BIT, BITB
15 14 13 12 11-06 05-00
0/1 0 1 1 S D

Действие: (DST) & (SRC)

Признаки: N — устанавливается, если старший разряд результата установлен, в противном случае — очищается;

Z — устанавливается, если результат = 0, в противном случае — очищается;

V — очищается; C — не изменяется.

Описание: выполняется логическая операция «И» над (SRC) и (DST) с соответствующим изменением признаков. Оба операнда не изменяют своего значения.

Команда BIT используется для проверки состояния разрядов операнда источника (SRC), для которых установлены соответствующие разряды в операнде приемника (DST).

Пример: BIT #30, R3

До операции После операции
(R3) = 0000000000011000
NZVC
1111
(R3) = 0000000000011000
NZVC
0001

BIC 04SSDD
BICB 14SSDD

Очистка разрядов

Формат команды BIC, BICB
15 14 13 12 11-06 05-00
0/1 1 0 0 S D

Действие: (DST) <- (~SRC) & (DST)

Признаки: N — устанавливается, если старший разряд результата установлен, в противном случае — очищается;

Z — устанавливается, если все разряды результата очищены, в противном случае — очищается;

V — очищается;

C — не изменяется.

Описание: каждый разряд операнда (DST), соответствующий установленному разряду операнда (SRC), очищается. Первоначальное содержимое DST теряется. Содержимое SRC не изменяется.

Пример: BIC R3, R4

До операции После операции
(R3) = 001234
(R4) = 001111
NZVC
1111
(R3) = 001234
(R4) = 000101
NZVC
0001

BIS 05SSDD
BISB 15SSDD

Логическое сложение

Формат команды BIS, BISB
15 14 13 12 11-06 05-00
0/1 1 0 1 S D

Действие: (DST) <- (SRC) V (DST)

Признаки: N — устанавливается, если старший разряд результата установлен, в противном случае — очищается;

Z — устанавливается, если все разряды результата очищены, в противном случае — очищается;

V — очищается;

C — не изменяется.

Описание: над содержимым SRC и DST выполняется логическая операция «ИЛИ» и записывается результат по адресу DST. Разряды DST устанавливаются в «1», если соответствующие им разряды (SRC) находятся в «1». Прежнее содержимое DST теряется, а содержимое SRC остается неизменным.

Пример: BIS R0, R1

До операции После операции
(R0) = 001234
(R1) = 001111
NZVC
0000
(R0) = 001234
(R1) = 001335
NZVC
0000
(R0) = 0000001010011100
(R1) = 0000001001001001
(R0) = 0000001010011100
(R1) = 0000001011011101

XOR 074RDD

Исключающее ИЛИ

Формат команды XOR
15 14 13 12 11 10 09 08-06 05-00
0 1 1 1 1 0 0 R D

Действие: (DST) <- R V (DST)

Признаки: N — устанавливается, если результат < 0, в противном случае — очищается;

Z — устанавливается, если результат = 0, в противном случае — очищается;

V — очищается;

C — не изменяется.

Описание: над содержимым указанного регистра и содержимым DST выполняется операция «исключающее ИЛИ». Результат записывается в DST. Содержимое регистра «R» не изменяется. Пример: XOR R0, R2

До операции После операции
(R0) = 001234
(R2) = 001111
NZVC
1111
(R0) = 001234
(R2) = 000325
NZVC
0001
(R0) = 0000001010011100
(R2) = 0000001001001001
(R0) = 0000001010011100
(R2) = 0000000011010101

5.6. Команды управления программой

К командам управления программой относятся команды ветвления, обращения к подпрограмме, возврата из подпрограммы, безусловного перехода и другие.

5.6.1. Команды ветвления

Эти команды вызывают ветвление по адресу, являющемуся суммой смещения (умноженного на 2) и текущего содержимого СК, если условие ветвления выполняется.

Смещение показывает, на сколько ячеек нужно перейти относительно текущего содержимого СК в ту или другую сторону. Так как слова имеют четные адреса, то для получения истинного исполнительного адреса смещение необходимо умножить на два перед прибавлением к СК, который всегда указывает на слово. Старший разряд смещения (разряд <07>) является знаковым разрядом. Если он установлен, смещение отрицательное, ветвление происходит в сторону уменьшения адреса (в обратном направлении). Если в разряде <07> содержится 0, смещение — положительное, и ветвление происходит в сторону увеличения адресов (в прямом направлении).

Восьмиразрядное смещение позволяет производить ветвление в обратном направлении максимально на 200(8) слов от слова, на которое указывает текущее содержимое СК, и на 177(8) слов в прямом направлении.

BR 000400 + XXX

Ветвление безусловное

Формат команды BR
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 0 0 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX

Признаки: не изменяются.

Описание: с помощью одной команды управление программой передается ячейке, адрес которой находится в ограниченной области.

Новое содержимое СК = текущее содержимое СК + 2 XXX (смещение), где текущее содержимое СК = адрес команды ветвления + 2.

Пример:

Адрес Код команды Смещение
500 000402 002
502

В данном примере управление передается ячейке с адресом СК = 502 + 2 * 2 = 506.

5.6.1.1. Простые условные ветвления

BNE 001000 + XXX

Ветвление, если не равно (нулю)

Формат команды BNE
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 0 1 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если Z = 0

Признаки: не изменяются.

Описание: проверяется состояние разряда «Z» и вызывается ветвление, если он очищен. Команда BNE обратна по действию команде BEQ. Вместе с командой CMP команда BNE используется для проверки неравенства двух величин. Вместе с командой BIT она используется для проверки того, что установленные разряды операнда источника соответствуют установленным разрядам операнда приемника. В общем случае она используется для проверки неравенства нулю результата предыдущей операции.

Пример:

CMP A,B сравниваются A и B
BNE C перехода, если A не равно B
...
C: ... продолжение программы.

Эта последовательность команд будет давать переход на C, если A≠B, а последовательность:

ADD A, B складываются A и B
BNE C перехода, если A + B ≠ 0
...
C: ...

будет давать перехода, если A + B ≠ 0

BEQ 001400 + XXX

Ветвление, если равно (нулю)

Формат команды BEQ
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 0 1 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если Z = 1

Признаки: не изменяются.

Описание: проверяется состоянием разряда «Z» и вызывается ветвление, если он установлен. Вместе с командой CMP команда BEQ используется для проверки равенства двух величин. Вместе с командой BIT она используется для проверки того, что очищенные разряды операнда источника соответствуют установленным разрядам приемника. В общем случае эта команда используется для проверки равенства нулю результата предыдущей операции.

Пример:

CMP A,B сравниваются A и B
BEQ C перехода, если они равны
...
C: ...

Если A - B = 0, то управление передается ячейке C.

ADD A,B складываются A и B
BEQ C перехода, если A + B = 0
...
C: ...

Управление передается ячейке C, если A + B = 0

BPL 100000 + XXX

Ветвление, если плюс

Формат команды BPL
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 0 0 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если N = 0

Признаки: не изменяются.

Описание: проверяется разряд «N» и вызывается ветвление, если он очищен. Вместе с командой TSTB она используется для проверки установки разряда <07> (готовность) регистра состояния периферийного устройства. В общем случае эта команда используется для проверки положительности результата предыдущей операции. Команда BPL обратна по действию команде BMI. Пример:

C: TSTB @#177564 проверка регистра состояния вывода терминала
BPL C перехода, если готовности нет.
...

BMI 100400 + XXX

Ветвление, если минус

Формат команды BMI
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 0 0 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если N = 1

Признаки: не изменяются.

Описание: проверяется состояние разряда «N» и вызывается ветвление, если он установлен. Используется для проверки знака (старший разряд) результата предыдущей операции.

BVC 102000 + XXX

Ветвление, если нет арифметического переполнения

Формат команды BVC
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 1 0 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если V = 0

Признаки: не изменяются.

Описание: проверяется состояние разряда «V» и вызывается ветвление, если он очищен.

BVS 102400 + XXX

Ветвление, если арифметическое переполнение

Формат команды BVS
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 1 0 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX, если V = 1

Описание: проверяется состояние разряда «V» и вызывается ветвление, если он установлен.

BVS используется для обнаружения арифметического переполнения в результате исполнения предыдущей операции.

BVS обратна по действию команде BVC.

BCC 103000 + XXX

Ветвление, если нет переноса

Формат команды BCC
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 1 1 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если C = 0

Признаки: не изменяются.

Описание: проверяется состояние разряда «C» и вызывается ветвление, если он очищен.

BCS 103400 + XXX

Ветвление, если перенос

Формат команды BCS
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 1 1 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если C = 1 Признаки: не изменяются.

Описание: проверяется разряд «C» и вызывается ветвление, если он установлен. BCS используется для проверки наличия переноса в результате предыдущей операции.

Команда BCS обратна по действию команде BCC.

5.6.1.2. Условные ветвления по результату операций над числами.

Особые комбинации разрядов признаков проверяются с помощью команд условного ветвления по результату операций над числами. Эти команды используются для проверки результатов выполнения команд, в которых операнды рассматриваются как двоичные числа, имеющие знак. Заметим, что отличие в сравнении чисел, имеющих знак и чисел без знака обусловлено их различным представлением. В арифметике, использующей дополнительные коды, последовательность чисел следующая:

                / НАИБОЛЬШЕЕ          077777
                !                     077776
ПОЛОЖИТЕЛЬНЫЕ ->!                     ......
                !                     ......
                !                     000001      +1
                \ НАИМЕНЬШЕЕ          000000       0
                / НАИБОЛЬШЕЕ          177777      -1
                !                     177776      -2
ОТРИЦАТЕЛЬНЫЕ ->!                     ......
                !                     ......
                !                     100001
                \ НАИМЕНЬШЕЕ          100000

Для 16-разрядных чисел, не имеющих знака, последовательность следующая:

                НАИБОЛЬШЕЕ            177777
                                      ......
                                      ......
                                      000002
                                      000001
                НАИМЕНЬШЕЕ            000000

Командами условного ветвления по результату операции над числами являются следующие: BGE, BLT, BGT, BLE. BGE 002000 + XXX

Ветвление, если больше или равно (нулю)

Формат команды BGE
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 1 0 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если N ⊕ V = 0

Признаки: не изменяются.

Описание: вызывается ветвление, если оба разряда признаков «N» и «V» установлены или очищены (т.е. если результат операции «исключающее ИЛИ» над содержимым разрядов «N» и «V» равен 0 ). Таким образом, команда BGE всегда будет вызывать ветвление, если она следует за операцией сложения двух положительных чисел. Команда BGE будет также вызывать ветвление по нулевому результату.

BLT 002400 + XXX

Ветвление, если меньше (нуля)

Формат команды BLT
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 1 0 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если N ⊕ V = 1

Признаки: не изменяются.

Описание: вызывается ветвление, если результат операции «исключающее ИЛИ» над содержимым разрядов «N» и «V» равен 1. Команда BLT обратна по действию команде BGE. Таким образом, команда BLT всегда будет вызывать ветвление, если она следует за операцией сложения двух отрицательных чисел, даже если происходит переполнение. В частности, команда BLT будет всегда вызывать ветвление, если она следует за командой сравнения отрицательного операнда и

положительного операнда назначения, даже если произошло переполнение. Команда BLT никогда не будет вызывать ветвления, если она следует за командой сравнения (CMP) положительного операнда источника и отрицательного операнда назначения. Она также не будет вызывать ветвления, если результат предыдущей операции равен нулю без переполнения.

BGT 003000 + XXX

Ветвление, если больше (нуля)

Формат команды BGT
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 1 1 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если Z V (N ⊕ V) = 0

Признаки: не изменяются.

Описание: команда BGT подобна команде BGE, за исключением того, что команда BGT не вызывает ветвления по нулевому результату.

BLE 003400 + XXX

Ветвление, если меньше или равно (нулю)

Формат команды BLE
15 14 13 12 11 10 09 08 07-00
0 0 0 0 0 1 1 1 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если Z V (N ⊕ V) = 1

Признаки: не изменяются.

Описание: команда BLE подобна команде BLT, но дополнительно вызывает ветвление, если результат предыдущей операции равен нулю.

5.6.1.3. Условные ветвления по результату операций над кодами

Условные ветвления по результату операции над кодами обеспечивают методы проверки результата операции сравнения операндов, рассматриваемых как величины без знака.

BHI 101000 + XXX

Ветвление, если больше

Формат команды BHI
15 14 13 12 11 10 09 08 07-00
1 0 0 0 0 0 1 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если C=0 или Z=0

Признаки: не изменяются.

Описание: вызывается ветвление, если предыдущая операция не вызывала переноса или появления нулевого результата. Это происходит при операциях сравнения CMP, когда операнд источника больше операнда приемника.

BLOS 101100[?] + XXX

Ветвление, если меньше или равно

Формат команды BLOS
15 14 13 12 11 10 09 08 07-00
1 0 0 1[?] 0 0 1 0 Смещение

Действие: (СК) <-- (СК) + 2 XXX , если C=1 или Z=1

Признаки: не изменяются.

Описание: вызывается ветвление, если предыдущая операция вызывает перенос или появление нулевого результата. Команда BLOS является обратной по действию команде BHI. Ветвление будет происходить, если операнд источника меньше или равен операнду приемника.

BHIS 103000 + XXX

Ветвление, если больше или равно По своему действию команда BHIS идентична команде BCC. Другая мнемоника вводится только в связи с другим использованием команды.

BLO 103400 + XXX

Ветвление, если меньше

По своему действию команда BLO идентична команде BCS. Другая мнемоника вводится только в связи с другим использованием команды.

JMP 0001DD

Безусловный переход

Формат команды JMP
15 14 13 12 11 10 09 08 07 06 05-00
0 0 0 0 0 0 0 0 0 1 D

Действие: (СК) <-- (DST)

Признаки: не изменяются.

Описание: команда JMP обеспечивает возможность перехода на любую команду программы (не ограничиваясь пределами в +177 и -200 слов как команда BR) с использованием всех методов адресации, за исключением регистрового. Использование регистровой адресации вызывает прерывание программы по условию «запрещенная команда» через адрес вектора 4. Метод косвенной адресации может применяться и вызывает передачу управления программой по адресу, содержащемуся в указанном регистре. Заметим, что команды — это полные слова и поэтому должны выбираться из ячеек с четными адресами. Команда JMP с косвенно-индексным методом адресации позволяет передать управление по адресу, являющемуся элементов таблицы адресов.

5.6.2. Команды обращения к подпрограмме и выхода из подпрограммы.

Эти команды обеспечивают возможность автоматического вложения подпрограмм, выхода из подпрограммы и многократного входа в подпрограмму. В подпрограммах могут быть обращения к другим подпрограммам (или к самим себе) без специального программного запоминания адресов возврата. Процедура обращения к подпрограмме и выхода из нее не изменяет подпрограмму. Это позволяет использовать одну и ту же подпрограмму несколькими процессами, осуществляющими прерывание программы.

JSR 004RDD

Обращение к подпрограмме

Формат команды JSR
15 14 13 12 11 10 09 08-06 05-00
0 0 0 0 1 0 0 R D

Действие: (TMP) <- (DST); запись содержимого приемника во внутренний регистр процессора;

PUSH(УС) <- (R); запись содержимого указанного регистра в стек;

(R) <- (СК); счетчик команд (СК) содержит адрес ячейки, следующей за командой JSR; этот адрес заносится в регистр R;

(СК) <- (TMP); занесение в счетчик команд нового содержимого, определяющего начальный адрес подпрограммы.

Признаки: не изменяются.

Описание: при выполнении команды JSR старое содержимое указанного регистра («указателя связи») автоматически засылается в стек, и в регистр поступает новая связующая информация. Таким образом, обращение к подпрограммам, вложенное в подпрограмму на любую глубину, осуществляется с помощью регистра «указатель связи». Нет необходимости в том, чтобы задавать максимальную глубину обращения к данной подпрограмме или включать команды запоминания и восстановления «указателя связи» в каждую подпрограмму.

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

Обращение к подпрограмме по команде JSR может осуществляться с помощью автоинкрементной адресации (если каждый последующий вход в подпрограмму осуществляется через ячейку, адрес которой на 2 больше предыдущего) или индексной адресации (если входы в подпрограмму осуществляются по адресам, расположенным в произвольном порядке). Оба эти метода могут быть также косвенными.

Команда JSR СК, DST является особым случаем обращения к подпрограмме. В этом случае не изменяется содержимое ни одного из общих регистров, кроме СК.

Другим особым случаем команды JSR является JSR СК, @(УС)+, при выполнении которой последняя заполненная ячейка стека и СК обмениваются содержимым. Использование этой команды позволяет двум подпрограммам попеременно передавать управление друг другу и каждый раз возобновлять работу с того места, где осуществлялась передача управления. Такие подпрограммы называются «со-программами».

Возврат из подпрограммы осуществляется командой RTS. По команде RTS содержимое регистра передается в СК, а содержимое верхней ячейки стека — в указанный регистр.

Пример: JSR R5,DST

До операции:

                                                     СТЕК
      +--------------------+               +--------------------+
  R7! |                    !               !                    !
      +--------------------+               !                    !
      +--------------------+               !--------------------!
  R6! |         N          ! ----------)!  !       ДАННЫЕ       !
      +--------------------+               !--------------------!
      +--------------------+               !                    !
  R5! |        # 1         !               !                    !
      +--------------------+               !                    !
                                           +--------------------+

После операции:

                                                     СТЕК
      +--------------------+               +--------------------+
  R7! |       (DST)        !               !                    !
      +--------------------+               !--------------------!
      +--------------------+               !       ДАННЫЕ       !
  R6! |       N - 2        ! ----------)!  !--------------------!
      +--------------------+               !        # 1         !
      +--------------------+               !--------------------!
  R5! |      СК + 2        !               !                    !
      +--------------------+               !                    !
                                           +--------------------+

RTS 00020R

Возврат из подпрограммы

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 1 0 0 0 0 R R R

Действие: (СК) <- (R)

(R) <- (УС) POP

Описание: Содержимое регистра (R) загружается в (СК), после чего извлекается верхний элемент стека и засылается в указанный регистр. Возврат из подпрограммы обычно выполняется через тот же самый регистр, который используется при обращении к ней. Таким образом, выход из подпрограммы, обращение к которой осуществляется командой JSR СК, DST, выполняется командой RTS СК, а выход из подпрограммы, обращение к которой осуществлялось командой JSR R5, DST с использованием любого из методов адресации, выполняется командой RTS R5.

Пример RTS R5.

До операции:

                                                     СТЕК
                                                     СТЕК
                                           +--------------------+
      +--------------------+               !                    !
  R7! |       (DST)        !               !--------------------!
      +--------------------+               !       ДАННЫЕ       !
      +--------------------+               !--------------------!
  R6! |         N          ! ----------)!  !        # 1         !
      +--------------------+               !--------------------!
      +--------------------+               !                    !
  R5! |      СК + 2        !               !                    !
      +--------------------+               +--------------------+

После операции:

                                                     СТЕК
      +--------------------+               +--------------------+
  R7! |                    !               !                    !
      +--------------------+               !                    !
      +--------------------+               !--------------------!
  R6! |       N + 2        ! ----------)!  !       ДАННЫЕ       !
      +--------------------+               !--------------------!
      +--------------------+               !                    !
  R5! |        # 1         !               !                    !
      +--------------------+               !                    !
                                           +--------------------+

MARK N 0064NN

Восстановление УС

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 1 0 1 0 0 N N N N N N

Действие: (УС) <- (СК) + 2 * NN ; NN - число параметров

(СК) <- (R5)

(R5) <- (УС) POP

Признаки: не изменяются.

Описание: Эта команда используется для облегчения выхода из подпрограммы. При использовании стека для записи в него N параметров команда MARK N восстанавливает указатель стека (УС) во время выхода из подпрограммы. Пример:

MOV R5, -(УС)     ;ПРЕДЫДУЩЕЕ ЗНАЧЕНИЕ (R5) ЗАНОСИТСЯ В СТЕК;
MOV P1, -(УС)     ;ДЛЯ ИСПОЛЬЗОВАНИЯ ПОДПРОГРАММОЙ
MOV P2, -(УС)     ;В СТЕК ЗАНОСИТСЯ N ПАРАМЕТРОВ;
...
MOV PN, -(УС)
MOV =MARKN, -(УС) ;КОМАНДА MARK ЗАНОСИТСЯ В СТЕК;
MOV УС,R5         ;В R5 ЗАПОМИНАЕТСЯ АДРЕС КОМАНДЫ MARK;
JSR СК,DST        ;ОБРАЩЕНИЕ К ПОДПРОГРАММЕ;
...               ;ВЫПОЛНЕНИЕ ПОДПРОГРАММЫ С НАЧАЛЬНЫМ АДРЕСОМ,
                  ;ОПРЕДЕЛЯЕМЫМ (DST);
RTS R5            ;ВОЗВРАТ ИЗ ПОДПРОГРАММЫ.

После выполнения команды JSR СК, DST стек будет выглядеть следующим образом:

 +-------------------------+
 !      ПРЕЖНЕЕ (R5)       !
 !-------------------------!
 !           P 1           !
 !-------------------------!
 !           P 2           !
 !-------------------------!
...                       ...
 !-------------------------!
 !           P N           !
 !-------------------------!
 !         MARK N          !
 !-------------------------!
 !      ПРЕЖНЕЕ (СК)       !
 +-------------------------+

Команда RTS R5 загрузит счетчик команд содержимым регистра R5 (адрес команды MARK N) и, выбрав из стека прежнее содержимое СК, загрузит в R5. После этого команда MARK N, восстановив указатель стека на ячейку с прежним R5, загрузит СК содержимым R5 (в R5 в это время находится прежнее содержимое СК). Затем из стека восстановится прежнее содержимое R5. УС теперь будет указывать на последнюю заполненную ячейку стека, на которую он указывал перед тем, как возникла необходимость записи в стек "N" констант.

SOB 077RNN

Вычитание единицы и ветвление

15 14 13 12 11 10 09 08 07 06 05-00
0 1 1 1 1 1 1 R R R Смещение

Действие: (R) <- (R) - 1, если результат # 0, (СК) <- (СК) - 2 NN

если результат = 0, (СК) <- (СК)

Признаки: не изменяются.

Описание: Содержимое регистра уменьшается на единицу. Если результат не равен 0, в счетчик команд загружается новое содержимое, определяемое вычитанием удвоенного смещения из текущего содержимого СК.

В команде SOB смещением является шестиразрядное положительное число. Эта команда может быть эффективно использована для организации различного рода счетчиков, циклов. Следует отметить, что команда SOB не может быть использована для передачи управления в прямом направлении.

5.7. Команды прерывания программы

Команды прерывания обеспечивают возможность обращения к моделирующим программам, программам управления вводом-выводом, программам отладки и программам, разработанным пользователем. Когда происходит прерывание, текущее содержимое счетчика команд и содержимое регистра состояния процессора записываются в стек. Новое содержимое СК и РСП загружается из вектора прерывания, состоящего из двух слов. При выходе из прерывания используются команды RTI и RTT, которые восстанавливают СК и РСП, извлекая их прежнее содержимое из стека. Векторы прерывания расположены по фиксированным, приписанным каждому виду, адресам. EMT 104000 - 104377

Командное прерывание для системных программ

15 14 13 12 11 10 09 08 07-00
1 0 0 0 1 0 0 0  

Действие: PUSH(УС) <- (РСП)

PUSH(УС) <- (СК)

(СК) <- (30)

(РСП) <- (32)

Признаки: загружаются из вектора прерывания.

Описание: Команды EMT имеют коды операции от 104000 до 104377, которые могут быть использованы для передачи информации в моделирующую программу (т.е. информации о функции, которая должна быть выполнена).

Вектор прерывания команды EMT находится по адресу 30. Новое содержимое СК берется из ячейки с адресом 30, а новое содержимое РСП - из ячейки с адресом 32.

TRAP 104400 - 104777

Командное прерывание

15 14 13 12 11 10 09 08 07-00
1 0 0 0 1 0 0 1  

Действие: PUSH(УС) <- (РСП)

PUSH(УС) <- (СК)

(СК) <- (34)

(СК) <- (36)

Признаки: загружаются из вектора прерывания. Описание: Команды с кодами операции от 104400 до 104777 являются командами TRAP, которые по своему действию идентичны командам EMT, за исключением того, что вектор прерывания команды TRAP имеет адрес 34.

IOT 000004

Командное прерывание для ввода-вывода

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

Действие: PUSH(УС) <- (РСП)

PUSH(УС) <- (СК)

(СК) <- (20)

(РСП) <- (22)

Признаки: загружаются из вектора прерывания.

Описание: Команда IOT осуществляет прерывание с вектором, расположенным по адресу 20. Используется для обращения к подпрограмме управления вводом-выводом.

BPT 000003

Командное прерывание для отладки

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

Действие: PUSH(УС) <- (РСП)

PUSH(УС) <- (СК)

(СК) <- (14)

(РСП) <- (16)

Признаки: загружаются из вектора прерывания.

Описание: Выполняется прерывание с вектором, расположенным по адресу 14. Используется для обращения к подпрограммам отладки. Пользователю запрещается употребление кода 000003 в программах, которые выполняются под управлением подпрограмм отладки.

RTI 000002

Возврат из прерывания

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

Действие: (СК) <- (УС)POP

(РСП) <- (УС)POP

Признаки: загружаются из стека.

Описание: Команда RTI используется для выхода из подпрограмм обслуживания внешних и внутренних прерываний. Содержимое СК и РСП восстанавливается с помощью стека. Если при выполнении этой команды устанавливается Т-разряд РСП, то прерывание по Т-разряду выполняется сразу по ее завершении.

RTT 000006

Возврат из прерывания

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0

Действие: (СК) <- (УС)POP

(РСП) <- (УС)POP Признаки: загружаются из стека.

Описание: Эта команда по своему действию идентична команде RTI за исключением того, что при установке Т-разряда РСП прерывание будет иметь место после того, как выполнится первая команда, следующая за RTT.

5.8. Команды управления ЭВМ

HALT 000000

Останов

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Признаки: не изменяются.

Описание: В "системном режиме" центральный процессор переходит в режим опроса пультового терминала. В счетчике команд сохраняется адрес команды, которая должна быть исполнена следующей. ЭВМ будет находиться в состоянии "останов" до тех пор, пока оператор не продолжит выполнение программы при помощи команды пультового терминала. В режиме "пользователь" команда HALT является запрещенной. Центральный процессор выполняет прерывание по резервной команде с вектором прерывания 10.

WAIT 000001

Ожидание

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

Признаки: не изменяются. Описание: Применение этой команды обеспечивает наиболее быструю передачу магистрали внешнему устройству по его запросу. Команда WAIT запрещает процессору выбирать из памяти очередную команду. Это позволяет наиболее быстро приступить к обмену между внешним устройством и памятью, т.к. при обслуживании запроса магистрали процессором не вносится задержка на время, когда он освобождает занятую им магистраль. При выполнении команды WAIT, как и при выполнении всех других команд, в СК содержится адрес следующей за ней команды. Таким образом, когда по прерыванию вызывается содержимого СК и РСП в стек, адрес этой команды сохраняется. Выход из подпрограммы, обслуживающей прерывания (т.е. выполнение команды RTI или RTT), вызовет возобновление прерванного процесса с команды, следующей за командой WAIT.

RESET 000005

Сброс внешних устройств

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1

Признаки: не изменяются.

Описание: В "системном" режиме по этой команде вырабатывается и передается в магистраль сигнал "М УСТ" длительностью 10 мкс. Все внешние устройства, присоединенные к магистрали, устанавливаются при этом в состояние, которое они должны иметь после включения. В режиме "пользователь" команда RESET выполняется как команда NOP.

MFPT 000007

Модель процессора

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

Действие: R0(7:0) <- идентификационный код модели процессора

R0(15:8) <- дополнительный идентификационный код

Признаки: не изменяются.

Описание: Эта команда пересылает в младший байт РОН R0 идентификационный код, указывающий на тип используемого процессора. Для данной ЭВМ код 3 . В старший байт R0 засылается дополнительный идентификационный код модели процессора. Код 0 для данной ЭВМ.

5.9. Команды связи адресных пространств

Диспетчер памяти центрального процессора обеспечивает возможность связи между областями памяти для системных программ и программ пользователя. Эта возможность осуществляется с помощью команд MFPI, MFPD, MTPI, MTPD. Команды MTPD и MFPD предназначены для обмена с пространством данных и используются в ЭВМ, у которых разделены области памяти для команд и данных. В рассматриваемой ЭВМ такое разделение отсутствует, поэтому команды MTPD и MFPD выполняются также, как команды MTPI и MFPI. Эти команды используются для обмена данными между "системной" областью и областью "пользователя". Пользователь не всегда может непосредственно управлять своими устройствами ввода/вывода, т.е. область адресов устройств ввода/вывода не всегда доступна пользователю. Пользователь вырабатывает запрос обращения к вводу/выводу с помощью прерывания, например, командой EMT. Перед прерыванием пользователь засылает в свой стек (R6) определенные параметры. При прерывании РСП (15:12) устанавливается таким образом, что текущим является "системный" режим, а предыдущим - режим "пользователя". После этого командой MFPI параметры пользователя извлекаются из стека пользователя и засылаются в системный стек.

MFPI 0065SS

Переслать из предыдущего режима

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 1 0 1 0 1 S S S S S S

Действие: (TEMP) <- (SRC)

PUSH(УС) <- (TEMP)

Признаки: N - устанавливается, если результат < 0, в противном случае - очищается;

Z - устанавливается, если результат = 0, в противном случае - очищается;

V - очищается;

C - не изменяется.

Описание: Команда MFPI записывает в стек в текущем режиме, определяемом разрядами (15:14) РСП, содержимое операнда источника, взятое из предыдущего режима, определяемого разрядами (13:12) РСП. Адрес операнда источника определяется текущим набором регистров активной страницы диспетчера памяти. Окончательная выборка операнда источника производится в предыдущей области т.е. с использованием регистров адреса страницы предыдущего режима. Если задан метод адресации источника 0 и регистр R6, то выбор УС осуществляется в предыдущем режиме. Но если метод адресации источника отличен от 0, то выбор УС осуществляется в текущем режиме, т.к. в этом случае содержимое регистра используется при вычислении адреса, а не как конечный операнд. Операнда-источник затем засылается в стек текущего режима.

MFPD 1065SS

Переслать из предыдущего режима

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 0 0 1 1 0 1 0 1 S S S S S S

Команда MFPD выполняется центральным процессором аналогично команде MFPI .

MTPI 0066DD

Переслать в предыдущий режим

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 1 1 0 1 1 0 D D D D D D

Действие: (TEMP) <- POP(УС)

(DST) <- (TEMP)

Признаки: N - устанавливается, если результат < 0, в противном случае - очищается;

Z - устанавливается, если результат = 0, в противном случае - очищается;

V - очищается;

C - не изменяется.

Описание: Команда MTPI выбирает слово из стека в текущем режиме, определяемом разрядами (15:14) РСП, и пересылает его по адресу в предыдущем режиме, определяемом разрядами (13:12) РСП. Адрес операнда приемника определяется текущим набором регистров активной страницы диспетчера памяти. Окончательная выборка операнда приемника производится в предыдущей области т.е. с использованием регистров адреса страницы предыдущего режима. Если задан метод адресации приемника 0 и регистр R6, то выбор УС осуществляется в предыдущем режиме. Но если метод адресации приемника отличен от 0, то выбор УС осуществляется в текущем режиме, т.к. в этом случае содержимое регистра используется при вычислении адреса, а не как конечный операнд.

MTPD 1066DD

Переслать в предыдущий режим

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 0 0 1 1 0 1 1 0 D D D D D D

Команда MTPD выполняется центральным процессором аналогично команде MTPI .

5.10. Команды изменения признаков

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 0 0 0 0 1 0 1 0/1 N Z V C

Описание: Выше приведен формат команд изменения признаков. Признаки, соответствующие установленным в коде команды разрядам (00:03), изменяются в соответствии с состоянием разряда (04) (разряда установки/сброса). Эти разряды РСП устанавливаются, если разряд (04) установлен, и очищаются, если он очищен.

Ниже перечисляются команды изменения признаков.

Обозначение Операция Код
CLN Очистка N 000250
CLZ Очистка Z 00244
CLV Очистка V 000242
CLC Очистка C 000241
CCC Очистка всех разрядов (N,Z,V,C) 00257
SEN Установка N 000270
SEZ Установка Z 000264
SEV Установка V 000262
SEC Установка C 000261
SCC Установка всех разрядов (N,Z,V,C) 000277
NOP Нет операции 000240

Коды указанных выше операции очистки или установки, соединенные по схеме "ИЛИ", могут образовывать комбинированные команды.

6. Внутренние прерывания программы

6.1. Прерывание по резервной команде - это прерывание, возникающие при попытке выполнить команды, коды которых в данной ЭВМ не используются и зарезервированы для дальнейших расширений системы команд (резервные команды). При попытке выполнения команды с неправильно заданными методами адресации (запрещенной команды) также будет вызываться прерывание.

Запрещенными командами являются, например, команды JMP и JSR с регистровым методом адресации; они будут вызывать прерывание программы по вектору с адресом 4. Прерывание по резервной команде осуществляется по вектору с адресом 10.

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

6.3. Прерывание по переполнению стека. Возникает при попытке использования под стек ячеек памяти ниже адреса 400(8). Это прерывание использует вектор с адресом 4.

6.4. Прерывание при попытке выполнить команду "останов" в режиме "пользователь". Это прерывание использует вектор с адресом 10(8).

6.5. Прерывание по Т-разряду вызывается при установке 4-го разряда ССП. Обычно это прерывание с адресом вектора 14 используется для отладки программ. Команда, которая должна выполняться следом за установившей Т-разряд командой, будет выполнена до конца, а затем произойдет внутреннее прерывание программы с вектором по адресу 14. Далее описываются особые случаи прерываниия по Т-разряду в зависимости от типа команды, выполняемой за командой, устанавливающей Т-разряд (прослеживаемой команды):

1) прослеживаемая команда очищает Т-разряд;

2) прослеживаемая команда устанавливает Т-разряд;

3) прослеживаемая команда является командой прерывания;

4) при выполнении прослеживаемой команды вызывается прерывание по ошибке обращения к магистрали;

5) в промежутке времени между установкой Т-разряда и началом выполнения прослеживаемой команды вызывается внешнее прерывание программы;

6) прослеживаемой командой является команда WAIT;

7) прослеживаемой командой является команда HALT;

8) прослеживаемой командой является команда возврата из прерывания.

Команда очищает Т-разряд.

Перед выборкой этой команды Т-разряд РСП был установлен. По окончании выполнения этой команды все же произойдет прерывание программы, но запоминаемое в стеке РСП будет иметь очищенный Т-разряд.

Команда устанавливает Т-разряд.

Поскольку Т-разряд был установлен, дополнительная его установка не приводит ни к каким изменениям. После выполнения команды происходит прерывание программы.

Прослеживаемой командой является команда прерывания.

Происходит прерывание программы с соответствующим вектором и полностью выполняется программа обслуживания этого прерывания. Если выполнение этой программы заканчивается с помощью команды RTI или другим путем, при котором происходит восстановление запомненного в стеке слова состояния программы, может быть вновь установлен Т-разряд РСП. В этом случае выполняется следующая за прослеживаемой команда и, если не встречается описанных выше случаев, происходит прерывание по Т-разряду. При выполнении команды происходит ошибка обращения к магистрали.

Выполняются действия аналогичные тем, что и при попытке выполнения команды прерывания. Единственным отличием является то, что при обслуживании прерывания по ошибке обращения к магистрали выход из программы обслуживания с помощью команды RTI не происходит, поэтому прерывание по Т-разряду может не вызываться.

Если в промежутке между выборкой нового содержимого СК и РСП из вектора и выполнением первой команды возникает запрос прерывания от внешнего устройства, он удовлетворяется немедленно. Для предотвращения прерывания разряд (07) РСП должен быть установлен в "1".

Прослеживаемая команда WAIT.

Следует избегать выполнения команды WAIT, когда установлен Т-разряд, т.к. процессор переходит в состояние, из которого его можно вывести только кратковременным воздействием сигнала "М АИП" с низким уровнем.

Прослеживаемая команда HALT.

При исполнении команды HALT в системном режиме происходит останов машины. В счетчике команд при этом находится адрес очередной выполняемой команды. Если команда HALT является прослеживаемой командой, прерывание произойдет сразу после возобновления работы. В режиме "пользователь" возникает прерывание с адресом вектора 10(8).

Прослеживаемая команда - возврат из прерывания.

Если прослеживаемой командой является команда RTT, прерывание не наступит до окончания выполнения следующей за нею команды.

6.6. Прерывание по нарушению питания.

Это прерывание может возникнуть при поступлении в процессор, находящийся в режиме программной работы, сигнала нарушения питания. Прерывание по нарушению питания использует вектор с адресом 24.

6.7. Прерывание по ошибке паритета памяти. Осуществляется по вектору с адресом 144(8).

6.8. Прерывание по ошибке операции плавающей запятой. Используется вектор с адресом 244(8).

6.9. Прерывание по защите памяти. Используется вектор с адресом 250(8).

В случае одновременного возникновения различных условий внутренних и внешних прерываний в микро-ЭВМ принят следующий порядок их обслуживания:

1) ошибка управления центрального процессора;

2) прерывание по защите памяти;

3) прерывание по ошибке обращения к магистрали;

4) прерывание по ошибке паритета памяти;

5) прерывание по ошибке операции плавающей запятой;

6) командное прерывание;

7) прерывание по Т-разряду;

8) прерывание по переполнению стека;

9) прерывание по аварии питания;

10) прерывание от внешних устройств;

11) останов в режиме "пользователь"

7. Организация стека

Стек является динамичным последовательным списком данных, помещенным в специально отведенную для него область оперативной памяти, доступ к которому осуществляется только с одной стороны. В основу организации стека положен принцип: "записанный последним читается первым" (LIFO). В ЭВМ стек используется при прерываниях программы для запоминания и восстановления текущего содержимого счетчика команд и слова состояния процессора, а также для временного хранения данных, часто используемых программой.

Обращение к стеку осуществляется через указатель стека (УС).

Указатель стека содержит адрес последней занятой ячейки стека. Для аппаратно реализованного стека, используемого при обслуживании прерываний программы и обращении к подпрограммам, в качестве указателя стека используется R6. При программно реализуемом стеке в качестве указателя стека может быть использован любой из регистров общего назначения. В этом случае запись в стек и выборка из стека осуществляется с помощью автодекрементного и автоинкрементного методов адресации. Ниже приводятся примеры программного использования стека для хранения или выборки информации.

Пример 1:

MOV R3, -(УС)
MOV R2, -(УС)
MOV R1, -(УС)
MOV R0, -(УС)

С помощью этой программы реализуется задача сохранения в стеке содержимого регистров R3, R2, R1, R0. Причем, в самом низу стека будет записано содержимое R3, затем R2, R1 и R0. Содержимое R0 находится вверху стека. В данном примере запись в стек осуществляется с помощью автодекрементного способа адресации. Пример 2:

MOV (УС)+, R0
MOV (УС)+, R1
MOV (УС)+, R2
MOV (УС)+, R3

В этом примере восстанавливается содержимое регистров по данным, хранимым в стеке. Выборка из стека осуществляется с помощью автоинкрементного метода адресации в обратном порядке по сравнению с их записью в стек.

К стеку можно обращаться тремя способами:

1) программно, с помощью команд пересылок (см. примеры 1 и 2);

2) используя команды для работы с подпрограммами: JSR и RTS;

3) автоматически, при прерывании программы.

При выполнении команды JSR в стек засылается содержимое регистра, называемого "указателем связи", а при выполнении команды RTS содержимое указанного регистра восстанавливается из стека.

При прерывании программы стек используется для автоматического хранения текущего содержимого счетчика команд (адреса возврата на прерванную программу) и слова состояния программы.

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

   +----------------------+
   !                      !
AO !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !                      !
   !                      !
   !                      !
   !                      !
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

1. Выполняется программа N0. УС указывает на ячейку AO.

   +----------------------+
   !                      !
AO !----------------------!
   !         ССПО         !
   !----------------------!
   !         СКО          !
   !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

2. Программа N0 прервана при ССП = ССПО и СК = СКО. Выполняется программа N1

   +----------------------+
   !                      !
AO !----------------------!
   !        ССП 0         !
   !----------------------!
   !        СК 0          !
   !----------------------!
   !         С 1          !
   !----------------------!
   !         С 2          !
   !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

3. Программа N1 использует стек для временного хранения слов С1 и С2.

   +----------------------+
   !                      !
AO !----------------------!
   !        ССП 0         !
   !----------------------!
   !        СК 0          !
   !----------------------!
   !         С 1          !
   !----------------------!
   !         С 2          !
   !----------------------!
   !        ССП 1         !
   !----------------------!
   !        СК 1          !
   !----------------------!
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

4. Программа N1 прервана при ССП = ССП 1 и СК = СК 1. Выполняется программа N2.

   +----------------------+
   !                      !
AO !----------------------!
   !        ССП 0         !
   !----------------------!
   !        СК 0          !
   !----------------------!
   !         С 1          !
   !----------------------!
   !         С 2          !
   !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

5. Программа N2 завершена выполнением команды RTI. В СК заносится СК 1, а в РСП - ССП 1 и возобновляется выполнение программы N1.

   +----------------------+
   !                      !
AO !----------------------!
   !        ССП 0         !
   !----------------------!
   !        СК 0          !
   !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

6. Программа N1 освобождает ячейки, содержащие С1 и С2.

   +----------------------+
   !                      !
AO !----------------------!
   !                      !
   !----------------------!
   !                      !
   !                      !
   !                      !
   !----------------------!
 0 !                      !
   +----------------------+

7. Программа N1 завершена выполнением команды RTI, в СК заносится СК 0, а в РСП - ССП 0 и возобновляется программа N0.

8. Команды расширенной арифметики

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

1) MUL - умножение;

2) DIV - деление;

3) ASH - арифметический сдвиг;

4) ASHC - арифметический сдвиг двойного слова.

Формат чисел, используемый при выполнении команд расширенной арифметики следующий:

15 +----+-----------------------------+ 00
   !    !                             !
   +----+-----------------------------+
              16-ти разрядное слово
15 +---+-------------------+ 00     15 +-----------------------+ 00
   !   ! Старшая часть     !           !   Младшая часть       !
   +---+-------------------+           +-----------------------+
               32-разрядное слово

Разряд 15 старшей части 32-разрядного слова или разряд 15 обычного 16-разрядного слова являются знаковыми разрядами.

Положительным числам соответствует 0 в знаковом разряде, отрицательным -1.

MUL 070RSS

Умножение

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 1 1 1 0 0 0 R R R S S S S S S

Действие: R,R V 1 <- R*(SRC)

Признаки: N - устанавливается, если результат < 0, в противном случае - очищается;

Z - устанавливается, если результат = 0, в противном случае - очищается;

V - очищается;

C - устанавливается, если результат меньше -2**15 или больше или равен 2**15-1.

Описание: перемножаются операнды источника и приемника, взятые в двоичном дополнительном коде. Результат помещается в регистр, используемый в качестве приемника, и в следующий за ним регистр, если регистр приемника имеет четный номер. Если же регистр приемника имеет нечетный номер, сохраняется только младшая часть результата. Следует заметить, что номер регистра "R" должен быть четным.

Мнемоническая запись команды умножения: MUL SRC,R

Пример: MUL $ 10, R1

До операции После операции
1000) 070127 R1) 000400
1002) 000010
1000) 070127 R1) 004000
1002) 000010

DIV 071RSS

Деление

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 1 1 1 0 0 1 R R R S S S S S S

Действие: R,R V 1 <- R,R V 1/(SRC)

Признаки: N - устанавливается, если частное < 0, в противном случае - очищается;

Z - устанавливается, если частное = 0, в противном случае - очищается;

V - устанавливается, если (SRC) = 0 или, если (DST) > (SRC) по абсолютной величине. (В этом случае выполнение команды прекращается, т.к. частное будет превышать 15 разрядов);

C - устанавливается, если происходит попытка деления на 0.

Описание: 32-разрядное число, находящееся в регистрах "R" и "R V 1", делится на операнд источника. Операция деления происходит в двоично-дополнительном коде. Частное заносится в "R", остаток - в "R V 1". После выполнения операции деления знак остатка будет таким же, как и у делимого. Следует заметить, что номер регистра "R" должен быть четным.

Мнемоническая запись команды деления: DIV SRC,R

Пример: DIV $ 2, R0

До операции После операции
2000) 071027 R0) 000000
2002) 000002 R1) 020001
2000) 071027 R0) 010000
2002) 000002 R1) 000001
В R0 находится частное, а в R1 - остаток

ASH 072RSS

Арифметический сдвиг

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 1 1 1 0 1 0 R R R S S S S S S

Действие: R <- R, сдвинутое на NN позиции влево или вправо, где NN - 6 младших разрядов (SRC).

Признаки: N - устанавливается, если результат < 0, в противном случае - очищается;

Z - устанавливается, если результат = 0, в противном случае - очищается; V - устанавливается, если в результате выполнения команды изменяется содержимое знакового разряда, в противном случае - очищается;

C - загружается содержимым разряда, выдвинутого из регистра последним.

Описание: содержимое указанного регистра сдвигается влево или вправо на количество позиций, определяемое счетчиком сдвига. Функции счетчика сдвига выполняют 6 младших разрядов операнда источника. Их значение может изменяться в пределах от -32 до +31. Отрицательное значение счетчика определяет сдвиг вправо, положительное - влево.

Выполнение команды ASH иллюстрируется ниже.

           +-----------------------------------------+                +------+
   +---)! 15 !  -------------------)    00 !--------)! C   !
   !      +-----------------------------------------+                +------+
   !___!
                           или
+------+      +-----------------------------------------+
! C    !(-----! 15    (-------------------      00 !(------- 0
+------+      +-----------------------------------------+
Счетчик сдвига
(6 младших разрядов
операнда источника)
Выполняемая функция
011111 Сдвиг "R" на 31 позицию влево
000001 Сдвиг "R" на 1 позицию влево
111111 Сдвиг "R" на 1 позицию вправо
100000 Сдвиг "R" на 32 позиции вправо

Мнемоническая запись команды арифметического сдвига : ASH SRC,R

Пример: ASH R0,R3

До операции После операции
3000) 072300 R0) 001234
R3) 000003
3000) 072300 R0) 012340
R3) 000003

ASHC 073RSS

Арифметический сдвиг двойного слова

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 1 1 1 0 1 1 R R R S S S S S S

Действие: R,R V 1 <- R,R V 1, сдвинутое на NN позиции влево или вправо, где NN - 6 младших разрядов (SRC).

Признаки: N - устанавливается, если результат < 0, в противном случае - очищается;

Z - устанавливается, если результат = 0, в противном случае - очищается;

V - устанавливается, если в результате выполнения команды изменяется содержимое знакового разряда, в противном случае - очищается;

C - загружается содержимым последнего выдвинутого разряда 32-разрядного слова.

Описание: содержимое регистров "R" и "R V 1" интерпретируется как одно 32-разрядное слово. Причем, младшая часть слова (разряды (15:00)) содержится в "R + 1", а старшая часть (разряды (31:16)) - в "R". 32-разрядное слово сдвигается вправо или влево на количество позиций, определяемое счетчиком сдвига. Функцию счетчика сдвига выполняют 6 младших разрядов операнда источника. Его значение может изменяться в пределах от -32 до +31. Отрицательное значение счетчика определяет сдвиг вправо, положительное - влево. Если выбранный регистр имеет нечетный номер, то "R" и "R V 1" являются одним и тем же регистром. В этом случае сдвиг вправо будет выполняться циклически (16-разрядное слово сдвигается циклически на количество позиций, определяемое счетчиком сдвига).

Выполнение команд ASHC иллюстрируется ниже.

   +-------------------------------------------+
R +----)! 31 !   -------------------)       ! 16 !
   !   +-------------------------------------------+
   !___!                                   !
              +--------------------------------+
              !
              V
        +---------------------------------------------+        +-------+
R V 1   ! 15 !    ------------------)     ! 00 !---->! C     !
        +---------------------------------------------+        +-------+

                              или

+--------+     +---------------------------------------------+
! C      !---->! 31 !    (------------------     ! 16 !   R
+--------+     +---------------------------------------------+
                                                   +
                                                   !
               +-----------------------------------+
               !
         +---------------------------------------------+
         ! 15 !    (------------------     ! 00 !(---- 0   R V 1
         +---------------------------------------------+

Мнемоническая запись команды арифметического сдвига двойного слова: ASHC SRC,R.

Пример: ASHC $ 75,R2

До операции После операции
4000) 073227 R2) 012345
4002) 000075 R3) 000000
4000) 073227 2) 001234
4002) 000075 R3) 120000

9. Команды плавающей запятой (ПЗ)

9.1. Формат данных с плавающей запятой.

Числа с плавающей запятой состоят из знака, 8-разрядного порядка (с избытком 200(8)) и мантиссы. Мантисса всегда нормализована, т.е. имеет вид 0,1XXXXX, где самый старший значащий разряд дроби стоит справа от двоичной запятой. Поскольку числа с ПЗ нормализованы, то после запятой всегда стоит 1 и можно этот разряд не хранить в памяти. Этот разряд называется "скрытым разрядом", он восстанавливается аппаратно в БИС ПЗ при загрузке числа с ПЗ из памяти в БИС ПЗ, при этом формируется 24-разрядная мантисса в режиме одинарной точности или 56-разрядная мантисса в режиме двойной точности.

Независимо от знака числа с плавающей запятой (положительное число или отрицательное число), мантисса всегда рассматривается как положительная нормализованная дробь.

Порядок числа с плавающей запятой записывается с избытком 200(8), обеспечивая тем самым представление положительных и отрицательных порядков. Таким образом наименьший положительный порядок равен 200(8), наибольший положительный порядок равен 377(8), наименьший отрицательный порядок равен 177(8), наибольший отрицательный порядок равен 0.

9.1.1. Форматы целого числа при операциях с ПЗ

Целые числа при операциях с ПЗ имеют два формата: короткий (I-формат) и длинный (L-формат). В коротком формате целое число имеет 16 разрядов, в длинном - 32 разряда. В обоих случаях самый старший разряд является знаковым.

9.1.2. Форматы чисел с ПЗ

При операциях с ПЗ используются два формата чисел с плавающей запятой:

1) F-формат - одинарная точность, слово состоит из 32 разрядов;

2) D-формат - двойная точность, слово состоит из 64 разрядов.

Все числа с ПЗ должны быть нормализованы, порядок должен быть с избытком 200(8), число должно быть записано со знаком и величиной.

Форматы чисел с ПЗ

Число с ПЗ одинарной точности (F)

!<------- Слово 1 --------------)!  !<----------- Слово 2 ------------)!
+----------------------------------!  !-----------------------------------+
!31!30            23!22          !16!  !15!                            00!
+----------------------------------!  !-----------------------------------+
 !  !<--Порядок-->!<------------------ Мантисса ------------------------)!
 !
Знак

Число с ПЗ двойной точности (D)

!<--- Слово 1 ----->!!<--Слово 2--->!!<---Слово 3-->!!<---Слово 4--->!
+--------------------!!--------------!!--------------!!--------------+
!63!62   55!54  48!!47          32!!31          16!!15          00!
+--------------------!!--------------!!--------------!!--------------+
 !  !<------>!<------------------- Мантисса -------------------------)!
 !  Порядок
Знак

9.2. Величина числа с плавающей запятой.

Величины чисел, которые могут быть обработаны ЦП, зависят от разрядности чисел порядка. Операции с ПЗ используют 8-разрядное поле порядка. Порядок записывается с избытком 200(8) (или со смещением). В этом случае несмещенный отрицательный порядок -177(8) представляется порядком 001, порядок -200(8) представляется порядком 000 и порядок 177(8) представляется 377(8). Число со смещенным порядком равным 0, рассматривается как действительный нуль и, если мантисса не равна 0, то она обнуляется, так как это число меньше наименьшего числа, которое может быть представлено при операциях ПЗ.

Ниже показана область чисел, которая может быть представлена при операциях с ПЗ. Для простоты указаны только 3 разряда чисел.

 -0,100*2**(-177(8)) ----)!   !<---- +0,100*2**(-177(8))
+------------------------+ + +----------------------------+
!                        Нуль                              !
-0,111*2**177(8)                          +0,111*2**177(8)
Наименьшее отри-                          Наибольшее поло-
цательное число                           жительное число

Число с несмещенным порядком меньше -200(8) будет вызывать возникновение условия антипереполнения, которое означает, что число настолько мало, что не может быть представлено.

9.3. Регистр состояния плавающей запятой (РСПЗ)

Регистр состояния плавающей запятой (РСПЗ) является 16-разрядным регистром, который содержит разряды режимов управления работой ПЗ и информацию о результатах выполнения команд. Формат регистра состояния ПЗ показан на рисунке:

      Разрешение прерываний          Режим         Признаки
     !<---------------------------)!<------------)!<-------------)!
 +---+-----------+-----------+-----------+-----------+-------------+
 ! 15! 14! 13! 12! 11! 10! 09! 08! 07! 06! 05! 04! 03! 02! 01! 00!
 +---+-----------+-----------+-----------+-----------+-------------+
   !  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
ОШПЗ--+  !  !  !  !  !  !  !  !  !  !  !  !  !  !  !
ЗАПР-----+  !  !  !  !  !  !  !  !  !  !  !  !  !  !
НЕ ИСПОЛЬЗУЕТСЯ+  !  !  !  !  !  !  !  !  !  !  !  !
НЕ ИСПОЛЬЗУЕТСЯ----+  !  !  !  !  !  !  !  !  !  !  !
ПРРН--------------------+  !  !  !  !  !  !  !  !  !  !
ПРРА-----------------------+  !  !  !  !  !  !  !  !  !
ПРРП--------------------------+  !  !  !  !  !  !  !  !
ПРРЦ-----------------------------+  !  !  !  !  !  !  !
РАТ--------------------------------+  !  !  !  !  !  !
РАЦЧ---------------------------------+  !  !  !  !  !
УСЧ------------------------------------+  !  !  !  !
НЕ ИСПОЛЬЗУЕТСЯ---------------------------+  !  !  !
NE-----------------------------------------------+  !  !
ZE--------------------------------------------------+  !
VE-----------------------------------------------------+  !
CE--------------------------------------------------------+

(15) ОШПЗ - этот разряд указывает наличие ошибок ПЗ. Устанавливается, если возникает любое из условий, перечисленных ниже: 1) неопределенная величина в памяти (знаковый разряд равен 1 и смещенный порядок равен нулю);

2) переполнение;

3) антипереполнение;

4) ошибка преобразования в целое число;

5) попытка деления на 0;

6) неправильный код команды.

(14) ЗАПР - запрещение прерывания ПЗ. Когда этот разряд установлен, все прерывания ПЗ запрещены.

(11) ПРРН - прерывания по неопределенным переменным. Когда этот разряд установлен, произойдет прерывание, если из памяти будет считано число "минус нуль", т.е. отрицательное число ПЗ с нулевым порядком. Если разряд неустановлен, число "минус нуль" может быть считано из памяти или записано в память. При этом любая арифметическая операция ПЗ рассматривает это число как положительный нуль.

(10) ПРРА - прерывание по антипереполнению. Когда этот разряд установлен, условие антрипереполнеия вызывает прерывание по результату операции, вызвавшей прерывание, корректен, исключая порядок, который смещен на 400(8). Если разряд не установлен и имеет место антипереполнение, результат устанавливается равным нулю.

(09) ПРРП - прерывание по переполнению. Когда этот разряд установлен. Переполнение вызывает прерывание ПЗ. Результат операции, вызвавшей прерывание, корректен, исключая порядок, который имеет смещение 400(8). Если этот разряд не установлен, результат операции такой же, разница только в том, что прерывание не возникает.

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

(07) РАТ - режим двойной точности. Когда этот разряд установлен, определяется формат двойной точности числа ПЗ, а когда не установлен, определяется формат одинарной точности ПЗ.

(06) РАЦЧ - режим длинного целого числа. Этот разряд используется во время преобразования числа ПЗ в целое число. Если он установлен - определяется режим длинного целого числа (32 разряда), если сброшен - определяется режим короткого целого числа (16 разрядов).

(05) УСЧ - режим усечения. Этот разряд, когда он установлен, приводит к усечению результата, а не к его округлению.

(03) NE - признак "отрицательно";
(02) ZE - признак "нуль";

(01) VE - признак "переполнение";

(00) CE - признак "перенос".

9.4. Регистры исключения и адреса ПЗ.

Условия (исключения), приводящие к возникновению ошибок ПЗ, кодируются в регистре исключения (РОШ ПЗ) следующим образом:

2 - ошибка в коде команды;

4 - деление на нуль;

6 - преобразование плавающее - целое;

8 - переполнение;

10 - антипереполнение; 12 - неопределенная величина.

Адрес команды, при выполнении которой возникает ошибка ПЗ, запоминается в регистре адреса исключения (УАОШ ПЗ). Содержимое регистров РОШ ПЗ и УАОШ ПЗ меняется только в том случае, если возникают:

1) ошибка в коде команды;

2) деление на нуль;

3) любое из остальных условий, приводящих к возникновению ошибки ПЗ, если разрешено соответствующее прерывание.

Запрет прерываний установкой разряда (14) РС ПЗ не запрещает изменение этих регистров.

Команд прямой записи регистров УАОШ и РОШ нет.

Считывание регистров исключения осуществляется с использованием команды STST.

9.5. Адресация в командах плавающей запятой

Команды ПЗ используют тот же тип адресации, что и команды базового набора. Операнд источника или приемника определяется путем указания одного из восьми методов адресации и одного из восьми регистров общего назначения, которые должны быть использованы при нахождении операнда. Методы адресации те же, что и в базовом наборе команд, за исключением нулевого метода адресации. При этом методе адресации операнд находится в указанном накопителе ПЗ, а не в регистре общего назначения. Таким образом, в командах плавающей запятой используются следующие методы адресации:

0 - накопительный,

1 - косвенный,

2 - автоинкрементный,

3 - косвенно-автоинкрементный, 4 - автодекрементный,

5 - косвенно-автодекрементный,

6 - индексный,

7 - косвенно-индексный.

При автоинкрементном и автодекрементном методах адресации наращивание и уменьшение происходит на 4 для формата одинарной точности (F) и на 10 для формата двойной точности (D). При нулевом методе адресации программист может использовать 6 накопителей (AC0...AC5) в качестве источника или приемника. При всех других методах адресации, когда происходит передача данных из памяти или из регистров общего назначения, программист ограничивается первыми четырьмя накопителями (AC0...AC3). При непосредственном методе адресации (метод адресации 2 с использованием R7) загружаются или записываются только 16 разрядов.

9.6. Точность выполнения команд.

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

Все арифметические команды рассматривают операнд со смещенным порядком, равным 0, как точный 0 (число, содержащее во всех разрядах сетки 0, то-есть имеющее положительную нулевую мантиссу и положительный нулевой порядок, называется точным нулем). Все арифметические операции с нулевым операндом, за исключением DIV, считаются точными. Команда DIV считается точной, если нулем является делимое. Но если это делитель, деление считается неопределенным, и происходит прерывание.

Предполагается, что мантиссы операндов с плавающей запятой при

арифметических операциях нормализованы. Мантисса содержит 24 разряда для режима одинарной точности и 56 разрядов для режима двойной точности. Для команд ADD, SUB, MUL и DIV необходимы два разряда расширения, чтобы гарантировать получение усеченного или округленного результата, тождественного результату соответствующей операции усечения или округления до определенной длины слова. Таким образом, с двумя разрядами расширения, ошибка усеченного результата ограничивается одним младшим значащим разрядом (МЗР); ошибка округленного результата ограничивается 1/2 МЗР. Эти границы ошибок реализуются для всех команд плавающей запятой. В дальнейшем арифметических операций. Арифметический результат считается точным, если нет невыровненных разрядов, которые должны быть потеряны при усечении. Старший теряемый разряд при усечении рассматривается как "округляемый" разряд. Соотношение округленного и усеченного результатов следующее:

1) если округляемый разряд равен 1, то округленный результат является усеченным результатом, увеличенным на МЗР;

2) если округляемый разряд равен 0, то округленный и усеченный результаты тождественны.

Из этого следует, что:

1) если результат точный, то округленная и усеченная величины равны точной величине.

2) если результат неточный, то его величина всегда уменьшается при усечении и при округлении, если округляемый разряд равен нулю; если округляемый разряд равен единице, то результат увеличивается при округлении.

Переполнение и антипереполнение при операциях ПЗ представляют собой условия ошибки: результат вычисления не может быть записан точно, так как порядок слишком велик, чтобы уместиться в предназначенные для него 8 разрядов. Однако, центральный процессор образует верный ответ. Для случая антипереполнения запись в результате нуля является приемлемым решением проблемы для многих случаев. Это выполняется, если запрещено прерывание по антипереполнению. Ошибка, возникающая при этом действии, абсолютная, а не относительная; она ограничивается по абсолютной величине величиной 2**(-128). Для случая переполнения мантисса результата операции будет точной, а смещенный порядок будет слишком мал. При запрещенном прерывании в результат записывается точный 0. Особые случаи переполнения объясняются подробно при описании команд MOD и LDEXP.

Разряды регистра состояния плавающей запятой ПРРП и ПРРА разрешают или запрещают прерывание по переполнению или антипереполнению, соответственно. Если имеется переполнение или антипереполнение и разрешено соответсвующее прерывание, аппаратура записывает мантиссу и младшие 8 разрядов смещенного порядка. Будет происходить прерывание и программист может узнать причину прерывания путем проверки признака переполнения плавающей запятой (VF) или регистра ошибки плавающей запятой (РОШ ПЗ).

Для стандартных арифметических команд ADD, SUB, MUL, и DIV смещение порядка может вызвать следующие ситуации:

1) переполнение: смещенный порядок слишком мал по сравнению с 400(8);

2) антипереполнение: если смещенный порядок = 0, то результат верный, если порядок #0, то он слишком велик по сравнению с 400(8).

Таким образом, при разрешенном прерывании имеется достаточно информации, чтобы определить точный ответ. Программист может, например, переписать свои переменные (изменить масштаб) с помощью команд STEXP и LDEXP, чтобы продолжить вычисление. Заметим, что переполнение и антипереполнение не влияет на точность мантиссы.

9.7. Формат команд плавающей запятой

Команды плавающей запятой могут работать с числом одинарной или двойной точности в зависимости от состояния разряда РАТ регистра состояния ПЗ. При одинарной точности под мантиссу отводится 24 разряда, при двойной точности - 56 разрядов. Порядок занимает 8 разрядов. Длина целого числа зависит от состояния разряда РАЦЧ регистра состояния ПЗ: РАЦЧ = 1 определяет 32-разрядную длину целого числа. Этот разряд используется при преобразовании целого числа в число с плавающей запятой и, наоборот. В мнемонике команд процессора используются обозначения FSRC и FDST, которые требуют пояснения. FSRC и FDST - это 6-разрядные поля адреса источника и приемника соответственно, которые используют методы адресации плавающей запятой. SRC и DST - это 6-разрядные поля адреса источника и приемника соответственно, использующие методы адресации центрального процессора. AC - накопитель плавающей запятой.

При описании команд используются следующие обозначения:

MMAX = максимальная мантиса:

1-2**(-24), при одинарной точности (РАТ=0)

1-2**(-56), при двойной точности (РАТ=1)

ЧMIN = минимальная число не округляемое до нуля:

2**(-128)-2**(-127)*(1/2)

ЧМАХ = максимальное представимое число:

2**(127)*MMAX

ЦМАХ = максимальное целое

2**(15)-1, при РАЦЧ = 0

2**(31)-1, при РАЦЧ = 1

ABS = абсолютное значение

EXP = порядок

.LT. = меньше

.LE. = меньше или равно

.GT. = больше

.GE. = больше или равно

Форматы команд ПЗ приведены ниже:

Формат двухадресных команд

15-12 11-08 07-06 05-00
OPR = 17(8) FOPR AC FSRC,FDST,SRC,DST

Формат одноадресных команд

15-12 11-06 05-00
OPR = 17(8) FOPR FSRC,FDST,SRC,DST

Формат безадресной команды

15-12 11-00
OPR = 17(8) FOPR

Все команды плавающей запятой имеют 4-разрядный код операции 17(8) и код операции ПЗ - FOPR. При описании команд плавающей запятой используются понятия источника и приемника плавающей запятой. Источник плавающей запятой (FSRC) и приемник плавающей запятой (FDST) идентичны SRC и DST соответственно, за исключением случая с нулевым методом адресации, когда обращение происходит к накопителю плавающей запятой, а не к регистру общего назначения ЦП.

9.8. Команды плавающей запятой

LDF/LDD 172(AC+4)FSRC

Загрузка с одинарной/двойной точностью

15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 1 0 1 AC FSRC

Пример: LDF FSRC, AC

Действие: (AC) <- (FSRC)

Признаки: SE <- 0

VE <- 0

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0

NE <- 1, если (AC) < 0, в противном случае NE <- 0

Описание: загрузка числа одинарной или двойной точности в накопитель.

Прерывания: если ПРРН - разрешено, прерывание по -0 происходит перед загрузкой AC. Однако признаки будут отображать выборку -0 независимо от состояния разряда. Переполнение или антипереполнение произойти не может.

Точность: эти команды точные.

Примечание. Эти команды позволяют использовать -0 в качестве операнда, если (FSRC)= -0, а ПРРН - не разрешено.

STF/STD 174(AC)FDST

Запись с одинарной/двойной точностью

15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 0 0 0 AC FDST

Пример: STF AC, FDST

Действие: (FDST) <- (AC)

Признаки: CE <- CE VE <- VE

ZE <- ZE

NE <- NE

Описание: запись числа одинарной или двойной точности из накопителя в память.

Прерывания: эти команды не вызывают прерывание, если ПРРН - разрешено и в накопителе -0. Переполнение или антипереполнение произойти не может.

Точность: эти команды точные.

Примечание. Имеется два случая, при которых -0 может быть записан в аккумулятор: это произойдет, когда возникает переполнение и антипереполнение и соответствующее прерывание разрешено, а также при выполнении команд LDF, LDD, LDCDF и LDCFD, если ПРРН - неразрешено.

ADDF/ADDD 172(AC)FSRC

Сложение с одинарной/двойной точностью

Формат команды ADDF/ADDD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 1 0 0 AC FSRC

Пример: ADDF FSRC,AC

Действие: (AC) <- (AC) + (FSRC)

Если возникло переполнение или антипереполнение, а ПРРП или ПРРА соответственно не разрешены, то (AC) <- точный 0.

Признаки: CE <- 0;

VE <- 1, если происходит переполнение, в противном случае VE <- 0;

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0;

NE <- 1, если (AC) < 0, в противном случае NE <- -0.

Описание: складывается содержимое FSRC с содержимым AC. Сложение осуществляется с одинарной или двойной точностью и округляется или усекается в соответствии с состоянием разрядов РАТ[?] и УСЧ в регистре состояния ПЗ. Результат записывается в AC. В случае переполнения с запрещенным прерыванием ПРРП или антипереполнения с запрещенным прерыванием ПРРА в AC записывается точный 0.

Прерывания: если ПРРН разрешено, прерывание по -0 в FSRC происходит перед выполнением команды. Если происходит переполнение или антипереполнение и если разрешено соответствующее прерывание, происходит прерывание с ошибочным результатом в AC. Мантиссы записываются точно. Порядок при антипереполнении слишком велик по сравнению с 400(8), за исключением особого случая 0, который является правильным. При переполнении порядок слишком мал по сравнению с 400(8).

Точность: ошибки переполнения и антипереполнения описаны выше. При отсутствии переполнения или антипереполнения для операндов с одинаковыми знаками с разностью порядков, равной 0 или 1, ответ будет точным, т.е. равным результату, полученному при вычислении с бесконечной точностью и усеченному или округленному до заданной разрядности. Во всех других случаях результат является неточным с ошибкой, ограниченной 1 МЗР в режиме усечения с одинарной или двойной точностью и 1/2 МЗР в режиме округления с одинарной точностью.

Примечание. Неопределенная переменная -0 может появляться только в связи с переполнением или антипереполнением. Она будет записываться в AC только, если соответствующее прерывание разрешено.

SUBF/SUBD 173(AC)FSRC

Вычитание с одинарной/двойной точностью

Формат команды SUBF/SUBD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 1 1 0 AC FSRC

Пример: SUBF FSRC, AC

Действие: разность = (AC) - (FSRC).

Если происходит антипереполнение и ПРРА не разрешено, (AC) <- 0.

Если происходит переполнение и ПРРП не разрешено, (AC) <- 0.

Для всех других случаев (AC) <- разность.

Признаки: CE <- 0;

VE <- 1, если происходит переполнение, в противном случае VE <- 0;

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0;

NE <- 1, если (AC) <- 0, в противном случае NE <- 0.

Описание: вычитается содержимое FSRC из содержимого AC. Вычитание выполняется с одинарной или двойной точностью с округлением или усечением в соответствии с состоянием разрядов РТА, УСЧ регистра РСПЗ. Результат записывается в AC. В случае переполнения и антипереполнения с запрещением соответствующего прерывания в AC записывается точный 0.

Прерывания: если ПРРН разрешено, прерывание по -0 в FSRC происходит перед исполнением команды. Если происходит переполнение или антипереполнение и если разрешено соответствующее прерывание по общему результату в AC. Мантиссы записываются точно. При переполнении порядок слишком мал по сравнению с 400(8). При антипереполнении он слишком велик по сравнению с 400(8), за исключением особого случая 0, который является правильным.

Точность: ошибки переполнения и антипереполнения описаны выше. При отсутствии переполнения или антипереполнения для операндов с одинаковыми знаками с разностью порядков, равной 0 или 1, ответ будет точным, т.е. равным результату, полученному при вычислении с бесконечной точностью и усеченному или округленному до заданной разрядности. Во всех других случаях результат является неточным с ошибкой, ограниченной 1 МЗР в режиме усечения с одинарной или двойной точностью и 1/2 МЗР в режиме округления с одинарной точностью.

Примечание. Неопределенная переменная -0 может появляться только в связи с переполнением или антипереполнением. Она будет записываться в AC только, если соответствующее прерывание разрешено.

NEGF/NEGD 1707FDST

Изменение знака числа с одинарной/двойной точностью

Формат команды NEGF/NEGD
15 14 13 12 11 10 09 08 07 06 05-00
1 1 1 1 0 0 0 1 1 1 FDST

Пример: NEGF FDST

Действие: (FDST) <- -(FDST), если порядок (FDST) /=/ 0, в противном случае (FDST) <- точный 0.

Признаки: CE <- 0;

VE <- 0;

ZE <- 1, если порядок (FDST) = 0, в противном случае ZE <- 0;

NE <- 1, если (FDST) < 0 , в противном случае NE <- 0.

Описание: инвертирует знак числа с одинарной или двойной точностью. Результат записывается в ту же ячейку (FDST).

Прерывания: если ПРРН разрешено, прерывание по -0 происходит после исполнения команды. Переполнение и антипереполнение произойти не может.

Точность: эти команды точные.

Примечание. Если -0 находится в памяти и ПРРН разрешено, в этом случае точный 0 записывается в память. Признаки отображают точный 0 (ZE <- 1).

MULF/MULD 171(AC)FSRC

Умножение с одинарной/двойной точностью

Формат команды MULF/MULD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 0 1 0 AC FSRC

Пример: MULF FSRC, AC

Действие: (AC) <- (AC) * (FSRC)

Если произойдет переполнение и ПРРП не разрешено или антипереполнение и ПРРА не разрешено, то (AC) <- точный 0.

Признаки: CE <- 0;

VE <- 1, если произойдет переполнение, в противном случае VE <- 0;

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0;

NE <- 1, если (AC) < 0, в противном случае NE <- 0.

Описание: если смещенный порядок какого-либо операнда равен 0, (AC) <- точный 0. Во всех других случаях образуется 32-разрядное произведение для режима одинарной точности и 64-разрядное произведение для режима двойной точности. Результат округляется или усекается в зависимости от состояния УСЧ и записывается в AC за исключением случая переполнения и антипереполнения при запрещенном прерывании. В этих случаях в накопитель записывается точный 0.

Прерывания: если ПРРН разрешено, то прерывание по -0 происходит перед исполнением команды. Если происходит переполнение или антипереполнение с разрешенным соответствующим прерыванием, то происходит прерывание с ошибочным результатом в AC. Мантиссы записываются точно. Порядок при переполнении слишком мал по сравнению с 400(8), а при антипереполнении слишком велик по сравнению с 400(8) за исключением особого случая 0, который является правильным.

Точность: ошибки переполнения и антипереполнения описаны выше. При отсутствии переполнения или антипереполнения результат является неточным с ошибкой, ограниченной 1 МЗР в режиме усечения и 1/2 МЗР в режиме округления.

Примечание. Неопределенная переменная -0 может появляться только вместе с переполнением или антипереполнением. Она будет записываться в накопитель при разрешенном соответствующем прерывании.

DIVF/DIVD 174(AC+4)FSRC

Деление с одинарной/двойной точностью

Формат команды DIVF/DIVD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 0 0 1 AC FSRC

Пример: DIVF FSRC,AC

Действие: если порядок (FSRC) = 0, (AC) <- (AC): выполнение команды прекращается. Если порядок (AC) = 0, то (AC) <- точный 0.

Во всех других случаях частное = (AC)/(FSRC).

Если происходит антипереполнение и ПРРА не разрешено или происходит переполнение и ПРРП не разрешено, то (AC) <- точный 0.

Во всех остальных случаях (AC) <- частное.

Признаки: CE <- 0;

VE <- 1, если происходит переполнение, в противном случае VE <- 0;

ZE <- 1, если порядок (AC) = 0, в противном случае ZE <- 0;

NE <- 1, если (AC) < 0, в противном случае NE <- 0.

Описание: если какой-либо операнд имеет смещенный порядок равный 0, то он рассматривается как точный 0. Для FSRC это означает деление на 0; в этом случае выполнение команды прекращается, в регистр ошибки ПЗ заносится код 4 и происходит прерывание. В противном случае частное приводится к одинарной или двойной точности с двумя гарантированными битами для правильного округления. Частное округляется или усекается в соответствии с состоянием разрядов РАТ[?] и УСЧ в регистре состояния ПЗ. Результата записывается в AC за исключением случая переполнения и антипереполнения при запрещенном прерывании. В этих случаях в накопитель записывается точный 0.

Прерывания: если ПРРН разрешено, прерывание по -0 происходит перед исполнением команды. Если порядок (FSRC) = 0, происходит прерывание из-за попытки деления на 0. Если происходит переполнение или антипереполнение и если разрешено соответствующее прерывание, то происходит прерывание с ошибочным результатом в AC. Мантиссы записываются точно. При переполнении порядок слишком мал по сравнению с 400(8), при антипереполнении порядок слишком велик по сравнению с 400(8) за исключением особого случая 0, который является правильным.

Точность: ошибки переполнения, антипереполнения и деления на 0 описаны выше. При их отсутствии ошибка результата будет ограничиваться 1 МЗР при усечении и 1/2 МЗР при округлении.

Примечание. Неопределенная переменная -0 может появляться только в связи с переполнением и антипереполнением. Она будет записываться в AC в случае разрешения соответствующего прерывания.

CMPF/CMPD 173(AC+4)FSRC

Сравнение с одинарной/двойной точностью

Формат команды CMPF/CMPD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 1 1 1 AC FSRC

Пример: CMPF FSRC,AC

Действие: (FSRC) - (AC)

Признаки: CE <- 0;

VE <- 0;

ZE <- 1, если (FSRC) - (AC) = 0, в противном случае ZE <- 0; NE <- 1, если (FSRC) - (AC) < 0, в противном случае NE <- 0.

Описание: сравнивается содержимое (FSRC) с содержимым накопителя. Устанавливаются соответствующие признаки ПЗ. (FSRC) и (AC) остаются без изменения, за исключением отмеченного ниже.

Прерывания: если ПРРН разрешено, то прерывание по -0 происходит перед выполнением команды.

Точность: эти команды являются точными.

Примечание. Операнда, который имеет смещенную экспоненту = 0, рассматривается как точный 0. В том случае, когда оба операнда = 0, (AC) <- точный 0.

MODF/MODD 171(AC+4)FSRC

Умножение и целочисленное представление с одинарной/двойной точностью

Формат команды MODF/MODD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 0 0 1 1 AC FSRC

Пример: MODF FSRC,AC

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

Произведение = (AC) * (FSRC)

В представлении с плавающей запятой:

ABS(произведение) = (2**K)*F, где 1/2 <= F < 1

EXP(произведение) = (200+K).

В представлении с фиксированной запятой:

Произведение = N + G,

где N - целая часть произведения, G - дробная часть произведения, 0 <= G < 1.

N и G имеют тот же знак, что и произведение.

Если номер накопителя четный (0 или 2), N - записывается в AC+1 (1 или 3), а G - записывается в AC.

Если номер накопителя нечетный, N - не записывается, а G - записывается в AC.

Иначе можно представить, что N - записывается в (AC V 1), а G - записывается в AC, где V - означает "или".

Возникает 5 особых случаев, которые рассматриваются ниже, с длиной мантиссы L=24 разряда - для одинарной точности и L=56 разрядов - для двойной точности:

1) Если происходит переполнение произведения при разрешенном ПРРП, то (AC V 1) <- N, усеченное до L-разрядов, (AC) <- точный 0.

Заметим, что порядок N слишком мал по сравнению с 400 и что может получиться (AC V 1) <- 0.

Если ПРРП не разрешено, (AC V 1) <- точный 0, (AC) <- точный 0, а -0 - записываться не будет.

2) Если 2 в степени L <= ABS (произведение) и нет переполнения (AC V 1) <- N, усеченное до L-разрядов, (AC) <- точный 0. Знак и порядок N остаются правильными, но младшие разряды теряются.

3) Если 1 <= ABS (произведение) < 2 в степени L , (AC V 1) <- N, (AC) <- G. Целая часть N - точная. Дробная часть G - нормализуется и усекается или округляется в соответствии со значением разрядов УСЧ. Округление вызывает увеличение или уменьшение дробной части. Для L=24 ошибка G ограничивается 1 МЗР в режиме усечения и 1/2 МЗР в режиме округления. Для L=56 ошибка G увеличивается до верхних пределов, когда ABS(N) становится больше 8, так как образуются только 64 разряда произведения. Если 2 в степени P <= ABS(N) < 2 в степени P+1, где P>7, младшие P-7 разрядов G могут быть в пределах ошибки.

4) Если ABS(произведение) < I и нет антипереполнения (AC V 1) <- точный 0, (AC) <- G. В целой части ошибки нет. Ошибка дробной части ограничивается 1 МЗР при усечении и 1/2 МЗР при округлении. Округление может уменьшить или увеличить дробную часть.

5) Если происходит антипереполнение и ПРРА разрешено, то (AC V 1) <- точный 0, (AC) <- G.

Ошибки - как в п.4 за исключением случая, когда порядок (AC) слишком велик (правильный результат - когда порядок = 0). Будет происходить прерывание, и в (AC) может быть записан -0. Если ПРРА не разрешено, (AC V 1) <- точный 0 и (AC) <- точный 0. Для этого случая ошибка дробной части меньше, чем 2 в степени -128.

Признаки: CE <- 0;

VE <- 1, если есть переполнение произведения, в противном случае VE <- 0;

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0;

NE <- 1, если (AC) < 0, в противном случае NE <- 0.

Прерывания: если ПРРН разрешено, прерывания по -0 в FSRC будет происходить перед исполнением команды. Случаи переполнения и антипереполнения обсуждались выше.

Точность: обсуждалась выше.

Применение:

1) Преобразование дроби из двоичной системы счисления в десятичную. Записанный ниже алгоритм, используя команду MOD, будет образовывать десятичные числа D(1), D(2)... слева направо.

Первоначально: (A) <- 0 , в ячейке A организован счетчик

X <- число, которое должно быть преобразовано ABS(X) < 1.

Так как X /=/ 0, выполняем умножение на 10:

Произведение <- X * 10;

(A) <- (A)+1;

D(A) <- целая часть произведения

X <- произведение без целой части

Конец;

Этот алгоритм точный; он представляет собой случай 3 в описании команды, потому что число невыровненных разрядов в дробной части произведения никогда не достигает L и, следовательно, усечение или округление не может внести ошибку.

2) Упрощение аргумента тригонометрической функции:

Ф[?] * 2/ПИ = N+G. Младшие 2 разряда N определяют квадрант, а G - определяет аргумент тригонометрической функции, сокращенный до первого квадранта. Точность N+G ограничивается L-разрядами из-за множителя 2/ПИ. Точность сокращаемого аргумента зависит, таким образом, от размера N.

3) Вычисление экспоненциальной функции E в степени X:

X * (логарифм E с основанием 2) = N+G,

где (E**X) = (2**N) * [E**(G*натуральный логарифм 2)].

Упрощенный аргумент (G*натуральный логарифм 2) < 1 и множитель 2**N, являющийся точной степенью 2, могут быть переписаны в конце с помощью STEXP, ADDN и экспоненты LD EXP. Точность N+G ограничивается L-разрядами из-за множителя логарифм E с основанием 2. Точность упрощенного аргумента зависит, таким образом, от размера N.

LDCDF/LDCF 177(AC+4)FSRC

Загрузка и преобразование числа с двойной точностью в число с одинарной точностью и числа с одинарной точностью в число с двойной точностью.

Формат команды LDCDF/LDCF
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 1 1 1 AC FSRC

Пример: LDCDF FSRC,AC.

Действие: если порядок (FSRC)=0, (AC) <- точный 0.

Если РАТ=1, УСЧ=0, ПРРП=0 и округление вызывает переполнение, (AC) <- точный 0.

Во всех других случаях (AC) <- CXY (FSRC), где CXY определяет преобразование числа из формата плавающей запятой X в формат плавающей запятой Y.

X=D, Y=F, если РАТ=0.

X=F, Y=D, если РАТ=1.

Признаки: CE <- 0;

VE <- 1, если преобразование вызывает переполнение, в противном случае VE <- 0.

ZE <- 1, если (AC)=0, в противном случае ZE <- 0;

NE <- 1, если (AC)<0, в противном случае NE <- 0.

Описание: если текущий режим одинарной точности (РАТ)=0, предполагается, что содержимое источника должно быть числом двойной точности и должно быть преобразовано в число с одинарной точностью. Если разряд УСЧ установлен, число усекается, в противном случае число округляется. Если текущий режим двойной точности (РАТ=1), предполагается, что источник должен быть числом одинарной точности и загружается выровненным по левому разряду в AC. Младшая половина AC очищается.

Прерывания: если ПРПН[?] разрешено, прерывание по -0 происходит перед исполнением. При LDCFD переполнение произойти не может. Прерывание происходит, если ПРРП разрешено и если округление с LDCDF вызывает переполнение: (AC) <- переполненный результат преобразования. Этот результат должен быть +0 или -0. Антипереполнение произойти не может.

Точность: LDSFD является точной командой. За исключением случая переполнения, описанного выше, LDCDF дает ошибку, которая ограничивается 1 МЗР в режиме усечения и 1/2 МЗР в режиме округления.

STCFD/STCD 176(AC)FDST

Запись с преобразованием числа с одинарной точностью в число с двойной точностью и числа с двойной точностью в число с одинарной точностью.

Формат команды STCFD/STCD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 1 0 0 AC FDST

Пример: STCFD AC, FDST

Действие: если порядок (AC)=0, (FDST) <- точный 0.

Если РАТ=1, УСЧ=1, ПРРП=0 и округление вызывает переполнение, (FDST) <- точный 0.

Во всех других случаях (FDST) <-CXY(AC), где CXY определяет преобразование числа из формата плавающей запятой X в формат плавающей запятой Y;

X=F и Y=D, если РАТ=0;

X=D и Y=F, если РАТ=1

Признаки: CE <- 0

VE <- 1, если преобразование вызывает переполнение, в противном случае VE <- 0; ZE <- 1, если (AC) = 0, в противном случае ZE <- 0.

NE <- 1, если (AC) < 0, в противном случае NE <- 0.

Описание: если текущий режим одинарной точности, содержимое накопителя записывается выровненным по левому разряду в FDST, а младшая часть очищается. Если текущий режим двойной точности, содержимое накопителя преобразуется в одинарную точность, усекается или округляется в зависимости от состояния УСЧ и записывается в FDST.

Прерывания: прерывание по -0 не будет происходить, даже если ПРРН разрешено из-за того, что FSRC представляет собой накопитель. Антипереполнение произойти не может. В результате STCFD не может произойти переполнение.

Прерывание происходит, если ПРРП установлен и если округление при STCDF вызывает переполнение: (FDST) <- переполненный результат преобразования. Этот результат должен быть + 0 или - 0.

Точность: STCFD является точной командой. За исключением случая переолнения, описанного выше, STCDF дает ошибку, ограниченную 1 МЗР в режиме усечения и 1/2 МЗР в режиме округления.

LDCIF/LDCID/LDCLF/LDCLD 177(AC)SRC

Загрузка и преобразование короткого или длинного числа с одинарной или двойной точностью.

Формат команды LDCIF/LDCID/LDCLF/LDCLD
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 1 1 0 AC SRC

Пример: LDCIF SRC, AC

Действие: (AC) <- CJX (SRC), где CJX определяет преобразование целого числа J в число с плавающей запятой P.

J = I, если РДСЧ[?] = 0, J = L, если РДТЧ[?] = 1, X = F, если RAT = 0, X = D, если РАТ = 1.

Признаки: SE <- 0.

VE <- 0.

ZE <- 1, если (AC) = 0, в противном случае ZE <- 0.

NE <- 1, если (AC) < 0, в противном случае NE <- 0.

Описание: выполняется преобразование содержимого SRC из целого числа в дополнительном коде с точностью J в число с плавающей запятой с точостью X. Заметим, что J и X определяются состоянием разрядов режима РДЦЧ[?] и РАТ, соответственно. J = I или L и X = F и D. Если определено 32-разрядное целое число (режим L) и метод адресации источника нулевой или непосредственный, 16 разрядов регистра источника выравниваются по левому разряду, а остальные 16 разрядов перед преобразованием загружаются нулями. В случае LDCLF дробная часть представления с плавающей запятой усекается при УСЧ = 1 или округляется до 24 разрядов при УСЧ = 0.

Прерывания: не происходит; содержимое SRC не является числом с плавающей запятой, так что прерывание по - 0 произойти не может. Переполнение и антипереполнение произойти не может.

Точность: LDCIF, LDCID, LDCLD являются точными командами. Ошибка, происходящая при LDCLF ограничивается 1 МЗР в режиме усечения и 1/2 МЗР в режиме округления.

STCFI/STCFL/STCDI/STCDL 175(AC+4)DST

Запись с преобразованием числа с одинарной или с двойной точностью в короткое или в длинное число.

Формат команды STCFI/STCFL/STCDI/STCDL
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 0 1 1 AC DST

Пример: STCFI AC, DST

Действие: (DST) <- CXY(AC), если - M-1 < CXY(AC) < M+1, в противном случае (DST) <- 0, где CXY определяет преобразование числа с плавающей запятой X в короткое целое число J.

J = I, если РДЦЧ[?] = 0, J=L, если РДЦЧ[?]=1,

X = F, если РАТ = 0, X=D, если РАТ=2.

M является наибольшим целым числом, которое может быть представлено:

M = (2**15) - 1 при РДЦЧ[?]=0,

M = (2**32) - 1 при РДЦЧ[?]=1.

Признаки: C <- CE <- 0, если -M -I < CXY (AC) < M+1,

в противном случае CE <-1.

V <- VE <- 0.

Z <- ZE <- 1, если (DST) =0, в противном случае ZE <- 0.

N <- NE <- 1, если (DST) <0, в противном случае NE <- 0.

Описание: выполняется преобразование данных в накопителе из представления с плавающей запятой в целочисленное представление. Если выполняется преобразование в 32-разрядное слово (формат L) и определен нулевой или непосредственный метод адресации, записываются только старшие 16 разрядов в регистр приемника. Числа, которые должны быть преобразованы, всегда усекаются (а не округляются) перед преобразованием. Это выполняется даже в случае запрещенного разряда УСЧ в регистре состояния ПЗ.

Прерывания: эти команды не прерываются, если ПРРН разрешено, и в AC присутствует -0. Если установлен разряд ПРРЦ в регистре состояния ПЗ, будет происходить прерывание по ошибке преобразования.

Точность: эти команды записывают целую часть операнда с плавающей запятой, которая может быть целым числом, наиболее близким к операнду. Эти команды являются точными, если целая часть находится в пределах, определяемых РДЦЧ[?].

LDEXP 176(AC+4)SRC

Загрузка порядка

Формат команды LDEXP
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 1 0 1 AC SRC

Пример: LDEXP SRC, AR

Действие: если - 200 (8) < (SRC) < 200 (8), EXP(AC) <- (SRC)+200(8), остальная часть AC не изменяется.

Если (SRC) > 177 (8) и ПРРП разрешено,

EXP(AC) <- ((SRC)+200(8)) <7:0>

Если (SRC) > 177 (8) и ПРРП запрещено,

(AC) <- точный 0.

Если (SRC) <- -177 (8) и ПРРП запрещено, (AC) <- точный 0,

Если (SRC) <- -177 (8) и ПРРА разрешено,

EXP(AC) <- ((SRC)+200(8)) <7:0>.

Признаки: CE <- 0.

VE <- 1, если (SRC) > 177 (8), в противном случае VE <- 0;

ZE <- 1, если порядок (AC) = 0 в противном случае ZE <- 0.

NE <- 1, если (AC9 < 0, в противном случае NE <- 0.

Описание: изменение (AC) таким образом, что его несмещенный порядок равен (SRC). Таким образом, (SRC) преобразуется из представления в дополнительном коде в представление со смещенным 200 и помещается в поле порядка AC. Эта операция имеет смысл только если ABS (SRC) < 177 (8). Если (SRC) > 177 (8), то результат рассматривается как переполнение. Если (SRC) < -177 (8), то результат рассматривается как антипереполнение.

Прерывания: прерывание по -0 в AC не происходит, даже если разрешено ПРРН. Если (SRC9 > 177 (8) и ПРРП разрешено, будет происходить прерывание по переполнению. Если (SRC) < -177 (восьмеричный код) и ПРРА разрешено, будет происходить прерывание по антипереполнению.

Точность: ошибки из-за переполнения и антипереполнения описаны выше. Если EXP(AC) = 0 и (SRC) ≠[?] -200, AC, содержащее число с плавающей запятой, рассматриваемое как 0 всеми арифметическими операциями, заменяется числом, не равным 0, так как аппаратно восстанавливается "скрытая" единица. Во всех других случаях LDEXP выполняет точно преобразование числа с плавающей запятой. (2**K)*F в [2**(SRC)] * F, где 1/2 < или = ABS (F) < 1.

STEXP 175(AC)DST

Запись порядка

Формат команды STEXP
15 14 13 12 11 10 09 08 07-06 05-00
1 1 1 1 1 0 1 0 AC DST

Пример: STEXP AC, DST

Действие: (DST) <- порядок (AC) -200 (8).

Признаки: C <-CE <-0;

V <-VE <-0;

Z <-ZE <-1,если (DST)=0,в противном случае ZE <-0;

N <-NE <-1,если (ACT)<0,в противном случае NE <-0.

Описание: преобразование порядка, содержащегося в накопителе, со смещением 200 в представление в дополнительном коде и запись результата в (DST).

Прерывания: эта команда не будет прерываться по -0. Переполнение и антипереполнение произойти не может.

Точность: эта команда всегда точная.

CLRF/CLRD 1704FDST

Очистка с одинарной/двойной точностью.

Формат команды CLRF/CLRD
15 14 13 12 11 10 09 08 07 06 05-00
1 1 1 1 0 0 0 1 0 0 FDST

Пример: CLRF FDST

Действие: (FDST) <- точный 0.

Признаки: CE <- 0;

VE <- 0;

ZE <- 1;

NE <- 0.

Описание: установка (FDST) в 0. Установка ZE и очистка других признаков.

Прерывания: прерывание происходить не будет. Переполнение и антипереполнение произойти не может.

Точность: эти команды точные.

ABSF/ABSD 1706FDST

Вычисление абсолютного значения с одинарной/двойной точностью

Формат команды ABSF/ABSD
15 14 13 12 11 10 09 08 07 06 05-00
1 1 1 1 0 0 0 1 1 0 FDST

Пример: ABSF FDST

Действие: (FDST) <- -(FDST), если (FDST) < 0

(FDST) <- 0, если порядок (FDST)=0.

Во всех других случаях (FDST) <- (FDST). Признаки: CE <- 0.

VE <- 0.

ZE <- 1, если порядок (FDST) = 0, в противном случае ZE <- 0.

NE <- 0.

Описание: установка в (FDST) его абсолютной величины.

Прерывания: если ПРРН разрешено, прерывание по -0 происходит после исполнения. Переполнение и антипереполнение произойти не может.

Точность: эти команды точные.

TSTF/TSTD 1705FDST

Проверка с одинарной/двойной точностью

Формат команды TSTF/TSTD
15 14 13 12 11 10 09 08 07 06 05-00
1 1 1 1 0 0 0 1 0 1 FDST

Пример: TSTF FDST

Действие: (FDST) <- (FDST).

Признаки: CE <- 0;

VE <- 0;

ZE <- 1, если порядок (FDST) = 0, в противном случае ZE <- 0;

NE <- 1, если (FDST) < 0, в противном случае NE <- 0.

Описание: установка признаков ПЗ в соответствии с содержимым FDST.

Прерывания: если ПРРН разрешено, прерывание по -0 происходит после исполнения. Переполнение и антипереполнение произойти не может.

Точность: эти команды точные.

SETF 170001

Установка режима одинарной точности

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1

Пример: SETF

Действие: (РАТ[?]) <- 0.

Описание: Установка в ПЗ режима одинарной точности для чисел с плавающей запятой.

SETD 170011

Установка режима двойной точности

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 1

Пример: SETD

Действие: (РАТ[?]) <- 1

Описание: Установка в ПЗ режима двойной точности для чисел с плавающей запятой.

SETI 170002

Установка режима короткого числа

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0

Пример: SETI

Действие: (РАЦЧ[?]) <- 0.

Описание: Установка режима короткого целого числа.

SETL 170012

Установка режима длинного числа

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0

Пример: SETL

Действие: (РАЦЧ[?]) <- 1.

Описание: Установка режима длинного целого числа.

LDFPS 1701SRC

Загрузка слова состояния программы ПЗ

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 1 SRC

Пример: LDFPS SRC

Действие: (РС ПЗ) <- (SRC).

Описание: Загрузка слова состояния программы ПЗ из (SRC).

STFPS 1702DST

Запись слова состояния программы ПЗ

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 1 0 DST

Пример: STFPS DST

Действие: (DST) <- (РС ПЗ).

Описание: Запись слова состояния программы ПЗ в DST.

STST 1703DST

Запись состояния ПЗ

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 1 1 DST

Пример: STST DST

Действие: (DST) <- (РОШ ПЗ)
(DST+2) <- (УАОШ ПЗ).

Описание: Запись (РОШ ПЗ) в (DST) и (УАОШ ПЗ) в (DST+2).

Примечания:

  1. Если метод адресации приемника нулевой или непосредственный, записывается только РОШ ПЗ.
  2. Информация в этих регистрах относится к последней команде, вызвавшей состояние исключения ПЗ, т.к. прерывание по ошибке.

CFCC 170000

Копирование признаков ПЗ

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

Пример: CFCC

Действие: C <- CE;
V <- VE;
Z <- ZE;
N <- NE.

Описание: Копирование признаков ПЗ в признаки ЦП.

Приложение 1. Методы адресации

Таблица. Методы адресации
Метод адресации Описание
Восьмеричный код Наименование
0 Регистровый Регистр содержит операнд
1 Косвенно-регистровый Регистр содержит адрес операнда
2 Автоинкрементный Регистр содержит адрес операнда, который после выборки операнда увеличивается на 1 для байтовых команд и на 2 для команд со словами
3 Косвенно-автоинкрементный Регистр содержит адрес адреса операнда, который после выборки увеличивается на 2
4 Автодекрементный Содержимое регистра уменьшается на 2 для команд со словами, и на 1 для команд с байтами, а затем используется как адрес операнда
5 Косвенно-автодекрементный Содержимое регистра уменьшается на 2, а затем используется как адрес адреса операнда
6 Индексный Содержимое регистра складывается со словом, следующим за командой, и сумма используется как адрес операнда
7 Косвенно-индексный Содержимое регистра складывается с индексным словом и сумма используется как адрес адреса операнда
Методы адресации через счетчик команд
2 Непосредственный Операнд следует за командой
3 Абсолютный Адрес операнда следует за командой
6 Относительный Адрес операнда равен сумме содержимого счетчика команд и индексного слова
7 Косвенно-относительный Адрес адреса операнда равен сумме содержимого счетчика команд и индексного слова

Приложение 2. Система команд

Таблица. Система команд
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
Команды управления
1. HALT 000000 Останов
2. WAIT 000001 Ожидание
3. RESET 000005 0 0 0 0 Сброс внешних устройств
4. MFPT 000007 R0<--3 Модель процессора
Команды прерывания
5. EMT 104000-
104377
УС!<--(ССП,СК)
СК,ССП<--(30,32)
Прерывание для системных программ
6. TRAP 104400-
104777
УС!<--(ССП,СК)
СК,ССП<--(34,36)
Прерывание
7. BPT 000003 УС!<--(ССП,СК)
СК,ССП<--(14,16)
Прерывание для отладки
8. IDT 000004 УС!<--(ССП,СК)
СК,ССП<--(20,22)
Прерывание для ввода/вывода
9. RTT 000006 СК<--УС^,
ССП<--УС^
Возврат из прерывания (запрещается прерывание по Т-разряду)
10. RTI 000002 СК<--УС^
ССП<--УС^
Возврат из прерывания
Команды перехода и обращения к подпрограммам
11. JMP 0001DD СК<--DST Безусловный переход
12. JSR 004RDD УС!<--R
R<--СК
СК<--DST
Обращение к подпрограмме
13. RTS 00020R СК<--R,
R<--УС^
Возврат из подпрограммы
14. MARK 0064NN - - - - УС<--СК+2*NN
СК<--R5,R5<--УС^
Восстановление УС
Команды управления кодами состояния
15. NOP 000240 - - - - Нет операции
16. CLC 000241 - - - 0 Очистка C
17. CLV 000242 - - 0 - Очистка V
18. CLZ 000244 - 0 - - Очистка Z
19. CLN 000250 0 - - - Очистка N
20. SEC 000261 - - - 1 Установка C
Таблица (продолжение)
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
21. SEV 000262 - - 1 - Установка V
22. SEZ 000264 - 1 - - Установка Z
23. SEN 000270 1 - - - Установка N
24. SCC 000277 1 1 1 1 Установка N,Z,V,C
25. CCC 000257 0 0 0 0 Очистка N,Z,V,C
Одноадресные команды
26. SWAB 0003DD + + 0 0 Перестановка байтов
27. CLR 0050DD 0 1 0 0 DST<--0 Очистка
28. CLRB 1050DD 0 1 0 0 DST<--0 Очистка байта
29. COM 0051DD + + 0 1 DST<--DST Инвертирование
30. COMB 1051DD + + 0 1 DST<--DST Инвертирование байта
31. INC 0052DD + + + - DST<--DST+1 Прибавление единицы
32. INCB 1052DD + + + - DRT<--DST+1 Прибавление единицы к байту
33. DEC 0053DD + + + + DST<--DST-1 Вычитание единицы
34. DECB 1053DD + + + + AST<--DST-1 Вычитание единицы из байта
35. NEG 0054DD + + + + DST<-- -DST Изменение знака
36. NEGB 1054DD + + + + DST<-- -DST Изменение знака байта
37. ADC 0055DD + + + + DST<--DST+C Прибавление переноса
38. ADCB 1055DD + + + + DST<--DST+C Прибавление переноса к байту
39. SBC 0056DD + + + + DST<--DST-C Вычитание переноса
40. SBCB 1056DD + + + + DST<--DST-C Вычитание переноса из байта
41. TST 0057DD + + 0 0 DST<--DST Проверка
42. TSTB 1057DD + + 0 0 DST<--DST Проверка байта
43. ROR 0060DD + + + + DST<-- ->C,DST Циклический сдвиг вправо
44. RORB 1060DD + + + + DST<-- ->C,DST Циклический сдвиг байта вправо
45. ROL 0061DD + + + + DST<--C, DST<- Циклический сдвиг влево
46. ROLB 1061DD + + + + DST<--C, DST<- Циклический сдвиг байта влево
47. ASR 0062DD + + + + DST<--DST/2 Арифметический сдвиг вправо
48. ASRB 1062DD + + + + DST<--DST/2 Арифметический сдвиг байта вправо
49. ASL 0063DD + + + + DST<--DST*2 Арифметический сдвиг влево
50. ASLB 1063DD + + + + DST<--DST*2 Арифметический сдвиг байта влево
51. SXT 0067DD - + 0 - 0, если N=0;
-1, если N=1.
Расширение знака
52. MTPS 1064SS + + + + ССП <--SRC Запись ССП
Таблица (продолжение)
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
53. MFPS 1067DD + + 0 - DST <--ССП Чтение ССП
Команды связи адресных пространств
54. MFPI 0065SS + + 0 - УС!<--SRC Пересылка из предыдущего пространства
55. MFPD 1065SS
56. MTPI 0066DD + + 0 - DST<--УС^ Пересылка в предыдущее пространство
57. MTPD 1066DD
Двухадресные команды
58. MOV 01SSDD + + 0 - DST<--SRC Пересылка
59. MOVB 11SSDD + + 0 - DST<--SRC Пересылка байта
60. CMP 02SSDD + + + + SRC-DST Сравнение
61. CMPB 12SSDD + + + + SRC-DST Сравнение байта
62. BIT 03SSDD + + 0 - SRC/\DST Проверка разрядов
63. BITB 13SSDD + + 0 - SRC/\DST Проверка разрядов байта
64. BIC 04SSDD + + 0 - DST<--SRC/\DST Очистка разрядов
65. BICB 14SSDD + + 0 - DST<--SRC/\DST Очистка разрядов байта
66. BIS 05SSDD + + 0 - DST<--SRC\/DST Логическое "или"
67. BISB 15SSDD + + 0 - DST<--SRC\/DST [нрзб.] сдвиг байта
68. XOR 074RDD + + 0 - DST<--R × DST Исключающее "или"
69. ADD 06SSDD + + + + DST<--SRC+DST Сложение
70. SUB 16SSDD + + + + DST<--DST-SRC Вычитание
71. MUL 070RSS + + 0 + R<--R*SRC Умножение
72. DIV 071RSS + + + + R<--R/SRC Деление
73. ASH 072RSS + + + + Арифметический сдвиг
74. ASHC 073RSS + + + + Арифметический сдвиг
Команды ветвления
75. BR 0004XXX - - - - СК<--СК+(2*XXX) Ветвление безусловное
76. BNE 0010XXX Z=0 СК<--СК+(2*XXX) Ветвление, если <> 0
77. BEQ 0014XXX Z=1 СК<--СК+(2*XXX) Ветвление, если = 0
78. BGE 0020XXX N×V=0 СК<--СК+(2*XXX) Ветвление, если >= 0
79. BLT 0024XXX N×V=1 СК<--СК+(2*XXX) Ветвление, если < 0
80. BGT 0030XXX Z\/(N×V)=0 СК<--СК+(2*XXX) Ветвление, если > 0
81. BLE 0034XXX Z\/(N×V)=1 СК<--СК+(2*XXX) Ветвление, если <= 0
82. SOB 077RNN Z=0 СК<--СК-(2*NN) Вычитание единицы и ветвление (если <>0)
83. BPL 1000XXX N=0 СК<--СК+(2*XXX) Ветвление, если плюс
84. BMI 1004XXX N=1 СК<--СК+(2*XXX) Ветвление, если минус
85. BHI 1010XXX Z\/C=0 СК<--СК+(2*XXX) Ветвление, если больше
86. BLOS 1014XXX Z\/C=1 СК<--СК+(2*XXX) Ветвление, если меньше
87. BVC 1020XXX V=0 СК<--СК+(2*XXX) Ветвление, если нет переполнения
Таблица (продолжение)
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
88. BVS 1024XXX V=1 СК<--СК+(2*XXX) Ветвление, если переполнение
89. BCC 1030XXX C=0 СК<--СК+(2*XXX) Ветвление, если нет переноса
90. BHIS 1030XXX C=0 СК<--СК+(2*XXX) Ветвление, если больше или равно
91. BCS 1034XXX C=1 СК<--СК+(2*XXX) Ветвление, если перенос
92. BLO 1034XXX C=1 СК<--СК+(2*XXX) Ветвление, если меньше
Команды с плавающей запятой
93. CFCC 170000 C<--CE;V<--VE;
Z<--ZE;N<--NE.
Копирование признаков ПЗ
94. SETF 170001 РАТ<--0 Установка режима одинарной точности
95. SETI 170002 РАДЧ<--0 Установка режима короткого числа
96. SETD 170011 РАТ<--1 Установка режима двойной точности
97. SETL 170012 РАДЧ<--1 Установк режима длинного числа
98. LDFPS 1701SS РС ПЗ<--SRC Загрузка слова состояния программы ПЗ
99. STFPS 1702DD DST<--РС ПЗ Запись слова состояния программы ПЗ
100. STST 1703DD DST<--РОШ ПЗ
DST+2<--УАОШ ПЗ
Запись состояния исключения ПЗ
101. CLRF 1704FDD FDST<--0 Очистка с одинарной/двойной точностью
102. CLRD
103. TSTF 1705FDD FDST<--FDST Проверка с одинарной/двойной точностью
104. TSTD
105. ABSF 1706FDD FDST<-- -FDST,
если FDST<0
FDST<--0, если порядок FDST=0
Вычитание абсолютного значения с одинарной/двойной точностью
106. ABSD
107. NEGF 1707FDD FDST<-- -FDST,
если порядок FDST/=/0, в противном случае FDST<--0
Изменение знака числа с одинарной/двойной точностью
108. NEGD
109. MULF 1710AFSS AC<--AC X FSRC Умножение с одинарной/двойной точностью
110. MULD
111. MODF 1714AFSS AC V 1<--целая часть (AC X FSRC) AC<--дробная часть
AC X FSRC-AC V 1,
если /AC X FSRC/>= самого малого положительного числа или ПРРА=1 ; в противном случае AC<--0
Умножение и целочисленное преадставление с одинарной/двойной точностью
112. MODD
Таблица (продолжение)
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
113. ADDF 1720AFSS AC<--AC+FSRC, если /AC/+FSRC)>=самого малого положительного числа; в противном случае AC<--0 Сложение с одинарной/двойной точностью
114. ADDD
115. LDF 1724AFSS AC<--FSRC Загрузка с одинарной/двойной точностью
116. LDD
117. SUBF 1730AFSS AC<--AC-FSRC, если /AC-FSRC/)=самого малого положительного числа; в противном случае AC<--0 Вычитание с одинарной/двойной точностью
118. SUBD
119. SMPF 1734AFSS FSRC-AC Сравнение с одинарной/двойной точностью
120. SMPD
121. STF 1740AFDD FDST<--AC Запись с одинарной/двойной точностью
122. STD
123. DIVF 1744AFSS AC<--AC/FSRC, если /AC:FSRC)=самого малого положительного числа; в противном случае AC<--0 Деление с одинарной/двойной точностью
124. DIVD
125. STEXP 1764ASS DST<--(порядок AC)-200 Запись порядка
126. STCFI
127. STCFL
128. STCDI
129. STCDL
1754ADD DST<--C(XJ)AC, где C(XJ) определяет преобразование, если результат может быть представлен 16 разрядами (короткое целое число) или 32 разрядами (длинное целое число); в противном случае DST<--0 Запись с преобразованием числа с одинарной/двойной точностью в короткое или в длинное число
130. STCFD
131. STCDF
1760AFDD FDST<--C(F,DVD,F)AC, где C определяет преобразование Запись с преобразованием числа с одинарной точностью в число с двойной точностью и числа с двойной точностью в число с одинарной точностью
132. LDEXP 1764ASS знак AC<--знак AC
порядок AC<--SRC+200
мантисса AC<--мантисса AC
Загрузка порядка
133. LDCIF 1770ASS AC<--C(JX)SRC, где Загрузка и преобразо-
Таблица (продолжение)
Команда Признаки Операция Наименование команды
№ Мнемоника Код N Z V C
134. LDCID
135. LDCLF
136. LDCLD
C(JX) определяет преобразование вание короткого или длинного числа в число с одинарной или двойной точностью
137. LDCDF
138. LDCFD
1774AFSS AC<--C(F,DVD,F)FSRC Загрузка и преобразование числа с двойной точностью в число с одинарной точностью и числа с одинарной точностью в число с двойной точностью.

Примечание.

1) + - признак изменяется по результату операции.

2) - - признак не изменяется.

3) 0 - признак очищается.

4) 1 - признак устанавливается.

5) XXX - восьмиразрядное смещение.

6) NN - шестиразрядное смещение.

7) × - исключающее "или".

8) УС^ - извлечение из стека.

9) УС! - пересылка в стек.

10) SS - поле источника (6 разрядов).

11) DD - поле приемника (6 разрядов).

12) R - программный регистр (3 разряда), от 0 до 7.

Приложение 3. Особенности в выполнении команд ВК МС0585

Ниже приведена таблица, в которой указаны особенности в выполнении команд ВК МС0585 в сравнении с ЭВМ "Электроника 60М" и "Электроника 79".

Таблица. Особенности в выполнении команд ВК МС0585
Действие МС0585 60М 79
1. OPR %R,(R)+; OPR %R,-(R); OPR %R, @(R)+; OPR %R, @-(R) с использованием одного и того же регистра в качестве источника и приемника:
- содержимое регистра увеличивается (уменьшается) на 2 перед выборкой операнда источника; X
- содержимое регистра не меняется перед выборкой операнда источника. X X
2. OPR PC,X(R); OPR PC, @X(R); OPR PC, @A; OPR PC, A:
- операнд приемника выбирается с использованием PC+4; X
- операнд приемника выбирается с использованием PC+2. X X
3. JMP %R или JSR REG, %R вызывают прерывание по вектору с адресом:
- 10 ; X X
- 4 . X
4. Адреса регистров R0...7 (177700 - 177717)
- являются действительными в режиме пульта и не действительны в программном режиме (вызывают ошибку обращения к магистрали); X
- не действительны. X X
5. Отличия системы команд:
- MFPT; X
- FADD, FSUB, FMUL, FDIV; X
- MFPI, MFPD, MTPI, MTPD; X X
- SPL. X
6. Выполнение команды RESET при отказе питания:
- отказ питания не воспринимается до завершения команды RESET; X X
- выполнение команды RESET немедленно прекращается. X
7. Если при выполнении команды Т-разряд установлен и возникает прерывание, то прежде обслуживается прерывание по Т-разряду. X X
Если при выполнении команды Т-разряд установлен и возникает прерывание, то прежде обслуживается прерывание. X
Таблица (продолжение)
Действие МС0585 60М 79
8.
Команда WAIT прерывается по Т-разряду. X
Команда WAIT по Т-разряду не прерывается. X X
9. Если при обращении по несуществующему/нечетному адресу возникает двойная ошибка, т.е. прерывание выполняется с обращением по несуществующему/нечетному адресу через указатель стека, тогда:
- происходит останов ЭВМ; X
- выполняется повторное прерывание через адрес вектора прерывания. Стек формируется в ячейках 0/2. X X
10.
Один набор РОН - 8 регистров. X X
Двойной набор РОН - 16 регистров. X
11.
Адрес регистра состояния процессора (177776) отсутствует, чтение/запись РСП производятся командами MFPS/MTPS. X
Обращение к РСП только по адресу, команды MFPS/MTPS отсутствуют. X
Обращение к РСП производится как по адресу, так и командами MFPS/MTPS. X
12.
Четыре уровня векторных прерываний. X
Один уровень векторных прерываний. X X
13.
Есть прерывание по переполнению стека. X X
Нет прерывания по переполнению стека. X
14. При обращении по нечетному адресу:
- возникает прерывание с адресом вектора 4; X
- прерывание не возникает. X X
15. Внешние прерывания:
- не отвергают выполнение команд расширенной арифметики; X X
- отвергают выполнение команд расширенной арифметики. X
16. Коды команд 75040...75377:
- вызывают внутреннее прерывание по адресу вектора 10, как резервные команды; X X
- могут использоваться в качестве микропрограммной реализации команд пользователя. X
17. Коды команд 170000...177777:
- используются для представления команд плавающей запятой; X X
- могут использоваться в качестве микропрограммной реализации команд пользователя. X
18. Команды CLR и SXT в качестве последнего канального
Таблица (продолжение)
Действие МС0585 60М 79
18. (продолжение) цикла выполняют:
- цикл вывод; X
- цикл ввод-пауза-вывод. X X
19. Команды плавающей запятой:
- отвергаются при возникновении внешнего прерывания; X
- не отвергаются при возникновении внешнего прерывания. X
20. Команды расширенной арифметики (ASH,ASHC,MUL,DIV,XOR) при выборе операнда источника выполняют цикл:
- ввод; X X
- ввод-пауза-вывод. X
21. Коды команд 210...217:
- вызывают прерывания по вектору с адресом 10; X X
- используются для отладки. X
22. Команда HALT в режиме пользователя вызывает прерывание по адресу:
- 4;
-10.
X [?] X [?]
23. Разряд 00 РОС[?]:
- не используется; X
- используется. X
24. Доступ к разряду 07 РОС[?]:
- не выполняется; X
- выполняется. X
25. Прерывание от диспетчера памяти по разряду 12 РС0:
- не выполняется ; X
- выполняется. X
26. Обращение к пространству данных по разрядам 02-00 РС3:
- не выполняется; X
- выполняется. X
27. Режимы работы:
- системный и пользователь; X
- системный, супервизор, пользователь. X
28. Регистр РС2 используется для записи:
- команд; X
- команд и векторов. X