Моделирование размышлений - это в частности "принятие решений".
То есть сравнивание и переход к одному или к другому действию.
Правильно ли я понимаю, что ни одной команды условного перехода ещё нет?
Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » Проект "Виртуальные машины" » Команды переходов (условных и безусловных)
Моделирование размышлений - это в частности "принятие решений".
То есть сравнивание и переход к одному или к другому действию.
Правильно ли я понимаю, что ни одной команды условного перехода ещё нет?
Почему же нет? Есть. Только сделаны немного шире. Есть несколько команд условного выполнения последующей команды. Последующая команда может быть любой: в том числе и командой перехода.
Условные команды:
регистр - регистр
ВЕН -выполнить, если не равно (р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)
Начал формировать описание (спецификацией пока назвать трудно) ВМ. Посмотреть можно тут
Правильно ли я понимаю, что ни одной команды условного перехода ещё нет?
Команды ВЕ... можно назвать неявными командами условного перехода на 1 команду вперед. Именно таким образом они реализованы в коде ВМ.
Начал формировать описание (спецификацией пока назвать трудно) ВМ. Посмотреть можно тут
Markdown не очень удачный формат для документации. Не совместим с бумагой.
Хорошо бы .pdf из TeX... (для редактирования сделать по отдельному репозиторию на каждый документ).
регистр - регистр
ВЕН -выполнить, если не равно (р1 !=р2)
ВЕР - выполнить, если равно (р1 == р2)
ВЕБ - выполнить, если больше (р1 > р2)
ВЕМ - выполнить, если меньше (р1 < р2)
регистр - число
ВЕНЧ -выполнить, если не равно (р1 !=ч)
ВЕРЧ - выполнить, если равно(р1 == ч)
ВЕБЧ - выполнить, если больше (р1 > ч)
ВЕМЧ - выполнить, если меньше (р1 < ч)
Думаю, что нужно добавить команду:
ВЕ - выполнить, если не 0 (р1 !=0)
Можно проще.
Зарезервировать булевый регистр, который будет пользоваться
для команды перехода.
И сделать две команды:
1) абсолютный_переход_если_регистр_да АДРЕС
2) абсолютный_переход_если_регистр_нет АДРЕС
где адрес (абсолютный) это число или регистр.
да значит регистр это любое ненулевое число (больше нуля).
нет это ноль или отрицательное число.
и еще две:
3) относительный_переход_если_регистр_да СМЕЩЕНИЕ
4) относительный_переход_если_регистр_нет СМЕЩЕНИЕ
Можно проще.
Зарезервировать булевый регистр, который будет пользоваться
для команды перехода.
И сделать две команды:
1) абсолютный_переход_если_регистр_да АДРЕС
2) абсолютный_переход_если_регистр_нет АДРЕС
где адрес (абсолютный) это число или регистр.
да значит регистр это любое ненулевое число (больше нуля).
нет это ноль или отрицательное число.
и еще две:
3) относительный_переход_если_регистр_да СМЕЩЕНИЕ
4) относительный_переход_если_регистр_нет СМЕЩЕНИЕ
Нечто подобное сделано уже. Есть команды:
ЕР - если равно (рк = 1, если р1 == р2, иначе рк = 0)
аналогично ЕН, ЕБ, ЕМ, Е0 и Е. То есть любой регистр может быть таким булевым регистром.
Был еще вариант сделать аналог флагового регистра процессора, но тут возникают проблемы с быстродействием.
Окончательный вариант еще не выбран.
Отредактировано Евгений (2023-04-10 08:55:06)
Вы здесь » Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ) » Проект "Виртуальные машины" » Команды переходов (условных и безусловных)