Защита информации в системах дистанционного обучения с монопольным доступомРефераты >> Программирование и компьютеры >> Защита информации в системах дистанционного обучения с монопольным доступом
EO_MOV, EO_XCHG, // Пересылка данных
EO_PUSH, EO_POP, // Работа со стеком
EO_XOR, EO_AND, EO_OR, EO_NOT, // Логические операции
EO_ADD, EO_SUB, EO_MUL, EO_DIV, EO_NEG, // Арифметические операции
EO_INC, EO_DEC,
EO_TEST, EO_CMP, // Операции сравнения
// (влияют на флаги)
EO_JMP, EO_CALL, EO_RET, // Операторы безусловного перехода
EO_JZ, EO_JNZ, EO_JA, EO_JNA, // Условные переходы
};
В таблице 1 приведена информация по этим инструкциям и перечислены их аргументы.
Таблица 1. Описание инструкций виртуальной машины.
Название |
Действие |
EO_EXIT_0 EO_EXIT_1 EO_EXIT_2 |
Команды завершения работы. После ее выполнения виртуальная машина остановится, и управление будет передано выше. Данные инструкции аргументов не имеют. |
EO_TEST_TIME_0 EO_TEST_TIME_1 |
Команды контроля времени. Имеют один аргумент - последний доступный день использования. |
EO_MOV |
Команда пересылки данных. Имеет два аргумента – источник и получатель. |
EO_XCHG |
Данная команда обменивает значения двух регистров или ячеек памяти, переданных в двух аргументах. |
EO_PUSH |
Сохраняет переданный аргумент в стеке. |
EO_POP |
Снимает значение с вершины стека и помещает в указанную ячейку памяти или регистр. |
EO_XOR |
Логическая операция XOR. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
Продолжение таблицы 1. Описание инструкций виртуальной машины.
Название |
Действие |
EO_AND |
Логическая операция AND. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_OR |
Логическая операция OR. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_NOT |
Логическая операция NOT. Имеет один аргумент. Результат помещается в ячейку памяти или регистр, переданный в качестве аргумента. |
EO_ADD |
Арифметическая операция сложения. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_SUB |
Арифметическая операция вычитания. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_MUL |
Арифметическая операция умножения. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_DIV |
Арифметическая операция деления. Имеет два аргумента. Результат помещается в ячейку памяти или регистр, переданный в качестве первого аргумента. |
EO_NEG |
Арифметическая операция изменения знака. Имеет один аргумент. Результат помещается в ячейку памяти или регистр, переданный в качестве аргумента. |
EO_INC |
Увеличивает значение ячейки памяти или регистра на единицу, передаваемой в единственном аргументе. |
EO_DEC |
Уменьшает значение ячейки памяти или регистра на единицу, передаваемой в единственном аргументе. |
EO_TEST |
Операция сравнения двух аргументов на равенство. Если аргументы равны, то флаг ZERO выставляется в true, в противном случае в false. |
EO_CMP |
Операция сравнения двух аргументов. Если аргументы равны, то флаг ZERO выставляется в true, в противном случае в false. Если первый аргумент меньше второго, то флаг ABOVE выставляется в true, в противном случае в false. |
Продолжение таблицы 1. Описание инструкций виртуальной машины.
Название |
Действие |
EO_JMP |
Данная инструкция осуществляет безусловный переход по адресу, указанному в качестве аргумента. |
EO_CALL |
Данная инструкция осуществляет вызов функции по адресу, указанному в качестве аргумента. |
EO_RET |
Данная инструкция возвращает управление предыдущей функции. Аргументов нет. |
EO_JZ |
Условный переход по адресу, указанному в качестве аргумента. Условием является ZERO == true. |
EO_JNZ |
Условный переход по адресу, указанному в качестве аргумента. Условием является ZERO == false. |
EO_JA |
Условный переход по адресу, указанному в качестве аргумента. Условием является ABOVE == true. |
EO_JNA |
Условием является ABOVE == false. |
Отметим, что аргументы могут быть следующих типов:
EOP_REG – Регистр
EOP_REF_REG – Память по адресу в регистре.
EOP_VAR – Переменная.
EOP_REF_VAR – Память по адресу в переменной.
EOP_CONST – Константное значение.
EOP_RAND – Случайное число.
Перечисленные типы объявлены в файле p_enums.h.
Для примера, приведем как будет выгладить код сложения регистра N 1 с константой 0x12345: