ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Команды переходов (условных и безусловных)


Команды переходов (условных и безусловных)

Сообщений 1 страница 7 из 7

1

Моделирование размышлений - это в частности "принятие решений".
То есть сравнивание и переход к одному или к другому действию.

Правильно ли я понимаю, что ни одной команды условного перехода ещё нет?

0

2

Почему же нет? Есть. Только сделаны немного шире. Есть несколько команд условного выполнения последующей команды. Последующая команда может быть любой: в том числе и командой перехода.
Условные команды:
регистр - регистр
ВЕН -выполнить, если не равно  (р1 !=р2)
ВЕР - выполнить, если равно (р1 == р2)
ВЕБ - выполнить, если больше (р1 > р2)
ВЕМ - выполнить, если меньше (р1 < р2)
регистр - число
ВЕНЧ -выполнить, если не равно  (р1 !=ч)
ВЕРЧ - выполнить, если равно(р1 == ч)
ВЕБЧ - выполнить, если больше (р1 > ч)
ВЕМЧ - выполнить, если меньше (р1 < ч)
Думаю, что нужно добавить команду:
ВЕ - выполнить, если не 0 (р1 !=0)

Сами команды перехода доработаны еще не до конца. Сейчас есть две команды:
ПР - перейти по адресу в регистре р1
ПЧ - перейти на число команд вперед/назад ( ск += ч) ч - знаковое, ск - счетчик команд.
Вот здесь пример тестовой программы
Вот эти две строчки в ней, как раз и есть условный переход:

    // сравнить р3 и рч, если не равно, то выполнить след команду
    программа[7] = закодировать_команду_рр( ВЕН,  4, 3, 3, КМД_РР);    // если (р3 != р4) то выполнить след команду
    // переход вверх на две команды
    программа[8] = закодировать_команду_рч(-2, 3, 3, ПЧ);        // переход на 2 команды вверх

Есть некоторая недоработка в терминологии... В ВМ 32 регистра. Кратко они называются р0-р31.
Любой из этих регистров может использоваться в командах типа регистр-регистр и регистр-число.
Внутри команды регистры обозначаются следующим образом: рк - конечный регистр-приемник, в который помещается результат операции
р1- регистр-аргумент №1, р2 - регистр-аргумент №2. При этом обозначению р1 в команде может соответствовать любой из 32 РОН ВМ.

Перечень реализованных команд ВМ в файле opcode.rh

Отредактировано Евгений (2023-04-09 19:40:12)

0

3

Начал формировать описание (спецификацией пока назвать трудно) ВМ. Посмотреть можно тут

0

4

Лис написал(а):

Правильно ли я понимаю, что ни одной команды условного перехода ещё нет?

Команды ВЕ... можно назвать неявными командами условного перехода на 1 команду вперед. Именно таким образом они реализованы в коде ВМ.

0

5

Евгений написал(а):

Начал формировать описание (спецификацией пока назвать трудно) ВМ. Посмотреть можно тут

Markdown не очень удачный формат для документации. Не совместим с бумагой.
Хорошо бы .pdf из TeX... (для редактирования сделать по отдельному репозиторию на каждый документ).

0

6

Евгений написал(а):

регистр - регистр
ВЕН -выполнить, если не равно  (р1 !=р2)
ВЕР - выполнить, если равно (р1 == р2)
ВЕБ - выполнить, если больше (р1 > р2)
ВЕМ - выполнить, если меньше (р1 < р2)
регистр - число
ВЕНЧ -выполнить, если не равно  (р1 !=ч)
ВЕРЧ - выполнить, если равно(р1 == ч)
ВЕБЧ - выполнить, если больше (р1 > ч)
ВЕМЧ - выполнить, если меньше (р1 < ч)
Думаю, что нужно добавить команду:
ВЕ - выполнить, если не 0 (р1 !=0)

Можно проще.
Зарезервировать булевый регистр, который будет пользоваться
для команды перехода.
И сделать две команды:
1) абсолютный_переход_если_регистр_да  АДРЕС
2) абсолютный_переход_если_регистр_нет  АДРЕС
где адрес (абсолютный) это число или регистр.
да значит регистр это любое ненулевое число (больше нуля).
нет это ноль или отрицательное число.
и еще две:
3) относительный_переход_если_регистр_да  СМЕЩЕНИЕ
4) относительный_переход_если_регистр_нет  СМЕЩЕНИЕ

0

7

NuShaman написал(а):

Можно проще.
Зарезервировать булевый регистр, который будет пользоваться
для команды перехода.
И сделать две команды:
1) абсолютный_переход_если_регистр_да  АДРЕС
2) абсолютный_переход_если_регистр_нет  АДРЕС
где адрес (абсолютный) это число или регистр.
да значит регистр это любое ненулевое число (больше нуля).
нет это ноль или отрицательное число.
и еще две:
3) относительный_переход_если_регистр_да  СМЕЩЕНИЕ
4) относительный_переход_если_регистр_нет  СМЕЩЕНИЕ

Нечто подобное сделано уже. Есть команды:
ЕР - если равно (рк = 1, если р1 == р2, иначе рк = 0)
аналогично ЕН, ЕБ, ЕМ, Е0 и Е. То есть любой регистр может быть таким булевым регистром.
Был еще вариант сделать аналог флагового регистра процессора, но тут возникают проблемы с быстродействием.
Окончательный вариант еще не выбран.

Отредактировано Евгений (2023-04-10 08:55:06)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Команды переходов (условных и безусловных)