8. from_Integer_to_Long_integer
8. from_Integer_to_Long_integer Формат: ITD Описание. Содержимое ACCU1_L рассматривается как целое число со знаком Integer, оно преобразуется в длинное целое со знаком Long integer, то есть выполняется расширение знаковым битом. ACCU2 не изменяется.
9. Смена_знака_для_Long_integer Формат: NEGD Описание. Содержимое ACCU1 рассматривается как длинное целое число со знаком Long integer, оно умножается на -1, то есть выполняется смена знака, результат сохраняется в ACCU1. В процессоре умножение на -1 реализуется путем инверсии и прибавлением 1. ACCU2 не изменяется.
Содержание Команды_преобразования Содержание Замечание. После выполнения команды результат будет сохранен в ACCU1, ниже показана зависимость установки флагов от значения результата.
10. Смена_знака_для_Integer Формат: NEGI Описание. Содержимое ACCU1_L рассматривается как целое число со знаком Integer, оно умножается на -1, то есть выполняется смена знака, результат сохраняется в ACCU1_L. ACCU2 и ACCU1_H без изменений.
См. замечание для предыдущей команды с той разницей, что нижняя граница теперь равна -32768, а верхняя +32767.
11. Смена_знака_для_Real Формат: NEGR Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой, оно умножается на -1, результат сохраняется в ACCU1. ACCU2 не изменяется.
Пример: L МD 2 // Пусть, например, МD2 = 1. 5E+02 NEGR T MD 2 // Теперь MD2 = -1. 5E+02 Содержание Команды_преобразования Содержание 12. Округление_до_ближайшего_целого Формат: RND Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой Real, оно преобразуется в Long integer путем округления до ближайшего целого. Причем, если исходное число не умещается в формате Long integer, то это рассматривается как ошибка, и производится установка битов OV и OS. В том случае, если значение исходного числа оказывается ровно по середине между двумя целыми числами, то число округляется до четного числа. ACCU2 не изменяется.
13. Округление_до_большего_целого Формат: RND+ Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой, оно преобразуется в Long integer путем округления до ближайшего большего целого. Причем, если исходное число не умещается в формате Long integer, то это рассматривается как ошибка, и производится установка битов OV и OS. ACCU2 не изменяется.
14. Округление_до_меньшего_целого
Формат: RND- Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой, оно преобразуется в Long integer путем округления до ближайшего меньшего целого. Причем, если исходное число не умещается в формате Long integer, то это рассматривается как ошибка, и производится установка битов OV и OS. ACCU2 не изменяются.
Содержание Команды_преобразования Содержание 15. Отбрасывание_дробной_части Формат: TRUNC Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой, оно преобразуется в Long integer путем отбрасывания дробной части. Причем, если исходное число не умещается в формате Long integer, то это рассматривается как ошибка, и производится установка битов OV и OS. ACCU2 не изменяется.
16. Обмен_байтами_в_двойном_слове Формат: CAD Описание. Осуществляется обмен байтами в ACCU1 по следующей схеме:
ACCU2 не изменяется.
17. Обмен_байтами_в_слове Формат: CAW Описание. Осуществляется обмен байтами в ACCU1_L. ACCU2 и ACCU1_H не изменяются.
Содержание Содержание Счетчики Есть 7 команд для работы со счетчиками: 8 Установить_начальное_значение_счетчика 8 Сброс_счетчика 8 Очистить_флаг_детектирования_фронта
8 Подсчет_на_увеличение 8 Подсчет_на_уменьшение 8 Прочитать_текущее_значение_счетчика 8 Прочитать_текущее_значение_счетчика_в BCD формате Содержание Счетчики Содержание 1. Установить_начальное_значение_счетчика Формат: S < счетчик> Описание. Команда загружает из ACCU1_L стартовое значение в указанный счетчик, если в бите RLO имел место переход от 0 к 1. Значение в ACCU1_L должно быть в BCD формате и принадлежать отрезку [0…999].
Пример: A I 2. 3 // Входной бит I 2. 3 выбран в качестве условия, по // которому будет загружаться счетчик C1 L C#350 // Начальное значение S C1 // Загрузить начальное значение в счетчик Замечание. Счетчики создаются программным способом операционной системой CPU (не путайте с Функциональными Счетными Модулями). Число счетчиков зависит от модели CPU – на старших моделях счетчиков больше. 2. Сброс_счетчика Формат: R < счетчик> Описание. Команда R < счетчик> сбрасывает текущее значение указанного счетчика в нуль, если бит RLO=1.
Пример: A I 2. 3 // Условие сброса R C3 // Сброс, если условие выполняется 3. Очистить_флаг_детектирования_фронта Формат: FR < счетчик> Описание. Когда имеет место переход RLO от 0 к 1, команда FR < счетчик> очищает флаг обнаружения фронта, который используется для установки и счета адресуемого счетчика. Данная команда при нормальной установке или нормальном счете не требуется. Она применяется в тех случаях, когда необходимо загрузить, либо выполнить счет без учета переходов от 0 к 1 в битах, которые отвечают за такое управление (при условии, что эти биты находятся в состоянии 1).
Содержание
Счетчики Содержание Пример: A I 2. 0 //В бите I2. 0 реализуется условие для //выполнения команды FR FR C3 //Очистить флаг детектирования фронта для //выбранного счетчика C3, если в бите I2. 0 имеет //место положительный фронт. 4. Подсчет_на_увеличение Формат: CU < счетчик> Описание. Команда CU < счетчик> увеличивает значение выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и значение самого счетчика меньше 999. Когда значение счетчика достигает верхнего предела 999, он останавливается. Дальнейшие переходы в RLO не имеют никакого влияния, и флаг переполнения OV не установлен.
Пример: A I 2. 1 // В бите I2. 1 реализуется условие для увеличения // значения счетчика на 1. Если в этом бите имеет место переход от 0 к 1, // то счетчик увеличивает свое значение. Естественно, бит RLO является // посредником между битом I2. 1 и счетчиком C3 CU C3 // Счетчик увеличивает свое значение на 1, // если условие выполняется. 5. Подсчет_на_уменьшение Формат: CD < счетчик> Описание. Команда CD < счетчик> уменьшает значение выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и значение самого счетчика больше нуля. Когда значение счетчика достигает нижнего предела (т. е. нуля), он останавливается. Дальнейшие переходы в RLO не имеют никакого влияния, и флаг переполнения OV не установлен.
Пример: L 9 // Начальное значение A I 0. 1 // Если выполняется условие загрузки счетчика, то S C1 // загрузить счетчик начальным значением A I 0. 0 // Если выполняется условие декремента счетчика, CD C1 // то вычесть 1 из текущего значения AN C1 // Значение счетчика равно нулю? = Q 0. 0 // Q0. 0 = 1, если значение счетчика - нуль Содержание Счетчики Содержание 6. Прочитать_текущее_значение_счетчика Формат: L < счетчик> Описание. Команда загружает текущее значение указанного счетчика в двоичном формате (Integer) в ACCU1_L. Не забывайте, что содержимое ACCU1 предварительно сохраняется в ACCU2.
Пример:
L C3 // Загрузить в ACCU1_L значение счетчика в // двоичном формате 7. Прочитать_текущее_значение_счетчика_в BCD формате Формат: LC < счетчик> Описание. Команда загружает текущее значение указанного счетчика в двоично-десятичном формате (BCD) в ACCU1_L. Не забывайте, что содержимое ACCU1 предварительно сохраняется в ACCU2.
Пример: LC C3 // Загрузить в ACCU1_L значение счетчика // в BCD формате Содержание Содержание Команды_для_работы_с_блоками_данных Шесть команд данной группы не зависят и не воздействуют на регистр флагов. Эти команды дают пользователю возможность работать с блоками данных: 8 Обменять_содержимое_DB_и_DI 8 Открыть_блок_данных 8 Прочитать_длину_глобального_блока 8 Прочитать_длину_связанного_блока 8 Прочитать_номер_глобального_блока 8 Прочитать_номер_связанного_блока Содержание Команды_для_работы_с_блоками_данных Содержание 1. Обменять_содержимое_DB_и_DI Формат: CDB Описание. Меняет содержимое регистров DB и DI между собой. 2. Открыть_блок_данных Формат: OPN < идентификатор блока данных> Описание. Сделать открытым для работы указанный блок данных, ранее открытый блок данных автоматически закрывается. Пример: OPN DB 10 // Открыть DB10 как глобальный блок данных L DBW 35 // 35-ое слово из глобального блока данных T MW 22 OPN DI 20 L DIB 12 // 12-ый байт из связанного блока данных T DBB 37 // И передать его в 37-ой байт глобального DB OPN DB 15 // Открыть DB15 как глобальный блок данных // DB10 автоматически закрывается L DBB10 // Загрузить 10-ый байт из глобального DB15 3. Прочитать_длину_глобального_блока Формат: LDBLG Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается длина текущего глобального блока данных в байтах. 4. Прочитать_длину_связанного_блока Формат: LDILG Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается длина текущего связанного блока данных в байтах. 5. Прочитать_номер_глобального_блока Формат: LDBNO Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается номер текущего глобального блока данных. 6. Прочитать_номер_связанного_блока Формат: LDINO Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается номер текущего связанного блока данных. Содержание Содержание Команды_переходов 18 команд, образующих данную группу, дают пользователю полный набор инструментов для написания программ с условными ветвлениями: 8 Если_установлен_BR 8 Если_сброшен_BR 8 Сохранение_RLO_и_переход_при_установленном RLO 8 Сохранение_RLO_и_переход_при_сброшенном RLO 8 Если_установлен_RLO 8 Если_сброшен_RLO 8 Если_установлен_OV 8 Если_установлен_OS 8 Если_меньше_нуля 8 Если_меньше_или_равно_нулю 8 Если_равно_нулю 8 Если_не_равно_нулю 8 Если_больше_или_равно_нулю 8 Если_больше_нуля 8 Если_ошибка 8 Безусловный_переход 8 Организация_цикла 8 Переход_по_значению_ACCU1 Содержание Команды_переходов Содержание 1. Если_установлен_BR Формат: JBI < метка> Описание. Выполняется переход на указанную метку, если установлен флаг BR.
2. Если_сброшен_BR Формат: JNBI < метка> Описание. Выполняется переход на указанную метку, если сброшен флаг BR.
3. Сохранение_RLO_и_переход_при_установленном RLO Формат: JCB < метка> Описание. Первым действием RLO копируется в BR, затем выполняется переход на указанную метку, если RLO=1
4. Сохранение_RLO_и_переход_при_сброшенном RLO Формат: JNB < метка> Описание. Первым действием RLO копируется в BR, затем выполняется переход на указанную метку, если RLO=0
5. Если_установлен_RLO Формат: JC < метка> Описание. Выполняется переход на указанную метку, если установлен флаг RLO.
Содержание Команды_переходов Содержание 6. Если_сброшен_RLO Формат: JCN < метка> Описание. Выполняется переход на указанную метку, если сброшен флаг RLO.
7. Если_установлен_OV Формат: JO < метка> Описание. Выполняется переход на указанную метку, если установлен флаг OV.
8. Если_установлен_OS Формат: JOS < метка> Описание. Выполняется переход на указанную метку, если установлен флаг OS.
Замечание. Почему команда №7 'JO' не сбрасывает бит OV, а команда 'JOS' сбрасывает бит OS? 9. Если_меньше_нуля Формат: JM < метка> Описание. Если результат предыдущей арифметической команды оказался меньше нуля, то выполняется переход на указанную метку.
Замечание. CC1=0, CC0=1 ® результат меньше нуля. 10. Если_меньше_или_равно_нулю Формат: JMZ < метка> Описание. Если результат предыдущей арифметической команды оказался меньше или равен нулю, то выполняется переход на указанную метку.
Замечание. CC1=0, CC0=0 ® результат равен нулю. Содержание Команды_переходов Содержание 11. Если_равно_нулю Формат: JZ < метка> Описание. Если результат предыдущей арифметической команды оказался равен нулю, то выполняется переход на указанную метку.
12. Если_не_равно_нулю Формат: JN < метка> Описание. Если результат предыдущей арифметической команды оказался отличен от нуля, то выполняется переход на указанную метку.
Замечание: СС1=1, СС0=0 ® результат больше нуля. 13. Если_больше_или_равно_нулю Формат: JPZ < метка> Описание. Если результат предыдущей арифметической команды оказался больше или равен нулю, то выполняется переход на указанную метку.
14. Если_больше_нуля Формат: JP < метка> Описание. Если результат предыдущей арифметической команды оказался больше нуля, то выполняется переход на указанную метку.
15. Если_ошибка Формат: JUO < метка> Описание. Если в результате выполнения предыдущей арифметической команды возникла ошибка (например, деление на нуль), то выполняется переход на указанную метку.
Замечание. СС1=1, СС0=1 ® арифметическая ошибка. Содержание Команды_переходов Содержание 16. Безусловный_переход Формат: JU < метка> Описание. Выполняется переход на указанную метку без всяких условий.
17. Организация_цикла Формат: LOOP < метка> Описание. Вычитание 1 из ACCU1_L и если значение ACCU1_L после вычитания еще не равно нулю, то переход (обычно это переход назад, что тем самым позволяет организовать программный цикл).
18. Переход_по_значению_ACCU1 Формат: JL < метка>
Описание. После команды JL должны стоять команды безусловного перехода JU (но не более 255 команд). Метка в команде JL помечает строку программы, перед которой завершается список команд JU. В самом списке команд JU не разрешается использовать другие команды. Берется текущее значение ACCU1_LL и проводится такая связь: 1. Если ACCU1_LL=0, то выполняется первая команда JU после команды JL (первая в списке); 2. Если ACCU1_LL=1, то выполняется вторая команда JU; 3. И т. д. ; 4. Наконец, если значение ACCU1_LL больше чем количество команд JU в списке, то ни одна из команд JU не выполняется, а осуществляется переход на метку, указанную в самой команде JL. Итак, при выполнении команды JL либо будет выполнена одна команда JU, либо будет выполнен переход на метку, указанную в самой команде JL. Содержание Команды_загрузки_и_передачи Содержание Данная группа представлена 15 командами: 8 Загрузка_ACCU1_значением_операнда 8 Загрузка_ACCU1_содержимым_STW 8 Загрузка_AR1_значением_из_ACCU1 8 Загрузка_AR1_значением_из_AR2 8 Загрузка_AR1_значением_операнда 8 Загрузка_AR2_значением_из_ACCU1 8 Загрузка_AR2_значением_операнда 8 Обмен_содержимого_AR1_и_AR2 8 Запись_из_ACCU1_в_операнд 8 Запись_из_ACCU1_в_STW 8 Запись_из_AR1_в_ACCU1 8 Запись_из_AR1_в_AR2 8 Запись_из_AR1_в_операнд 8 Запись_из_AR2_в_ACCU1 8 Запись_из_AR2_в_адресуемый_операнд Содержание Команды_загрузки_и_передачи Содержание 1. Загрузка_ACCU1_значением_операнда Формат: L < операнд> Описание. Сначала содержимое ACCU1 копируется в ACCU2. Затем содержимое адресуемого операнда заносится в ACCU1. Возможными операндами являются байт, слово, двойное слово из таких областей, как I, Q, PI, M, L, DB, DI.
Примеры: L IB 10 // Загрузить байт #10 из области входов L MB 120 // Загрузить байт #120 из области меркеров L DBD 8 // Загрузить двойное слово #8 из текущего // глобального блока данных L DIW 15 // Загрузить слово #15 из текущего связанного // блока данных L LD 252 // Загрузить двойное слово #252 из // локального стека Замечание. Если была загрузка байта, то он загрузится в ACCU1_LL, адресуемое слово загрузится в ACCU1_L, при этом старшие незадействованные разряды ACCU1 будут установлены в 0. 2. Загрузка_ACCU1_содержимым_STW Формат: LSTW Описание: ACCU1: = Слово Состояния;
Замечание. После выполнения данной команды ACCU1 выглядит следующим образом:
3. Загрузка_AR1_значением_из_ACCU1 Формат: LAR1 Описание. AR1: = ACCU1;
Содержание Команды_загрузки_и_передачи Содержание 4. Загрузка_AR1_значением_из_AR2 Формат: LAR1 AR2 Описание. AR1: = AR2;
5. Загрузка_AR1_значением_операнда Формат: LAR1 < D> Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M.
Пример: LAR1 DBD 20 LAR1 LD 180 LAR1 MD 24 LAR1 P#M100. 0 // Загрузить указатель на 100-ый адрес // из области меркеров 6. Загрузка_AR2_значением_из_ACCU1 Формат: LAR2 Описание. AR2: = ACCU1;
7. Загрузка_AR2_значением_операнда Формат: LAR2 < D> Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M.
Содержание Команды_загрузки_и_передачи Содержание 8. Обмен_содержимого_AR1_и_AR2 Формат: CAR Описание. Содержимое регистров AR1 и AR2 меняется местами.
9. Запись_из_ACCU1_в_операнд Формат: T < операнд> Описание. Копирование ACCU1 в адресуемый байт, слово или двойное слово. Данная команда зависит от MCR ресурса. Если MCR ресурс активен и бит MA = 1 (вершина стека MCR ресурса), то содержимое аккумулятора копируется в адресуемый операнд (число копируемых байтов из аккумулятора зависит от размера адресуемого операнда, см. пример). Если бит MA = 0, то в адресуемый операнд запишутся нули. Если же MCR ресурс выключен, то содержимое аккумулятора копируется в адресуемый операнд. Операнды могут быть из следующих областей: I, Q, PQ, M, L, DB.
Пример: T QB 10 // QB10: =ACCU1_LL; T M
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|