Курсовая работа: Ассемблер 2

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

Индексный оператор [ ] . Скобки тоже являются оператором, и транслятор их наличие воспринимает, как указание сложить значе­ние выражение_1 за этими скобками с выражение_2, заключенным в скобки.

Оператор переопределения типа ptr применяется для переопределения или уточнения имя типа метки или переменной, определяемых выражением. Тип может принимать одно из следующих значений: byte, word, dword, qword, tbyte, noar, far. Оператор ptr позволяет непосредственно в команде переопределить тип и выполнить команду.

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

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

Оператор получения сегментной составляющей адреса выражения seg возвра­щает физический адрес сегмента для выражения, в качестве кото­рого могут выступать метка, переменная, имя сегмента, имя группы или неко­торое символическое имя.

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


3. ОПИСАНИЕ АЛГОРИТМА

Алгоритм реализует вычисление CRC8 делением заданного массива данных на образующий полином x8 +x5 +x4 +1. Деление выполнено последовательным вычитанием по модулю 2 полинома из исходной последовательности.

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

Подробнее о том как выполняется деление при вычислении CRC смотри в прилагаемых источниках.

Для процедуры вычисления исходные данные передаются через регистры. Сегментный регистр ES должен содержать сегмент в котором расположен массив, регистр DX – смещение начала массива внутри сегмента, BX – длина массива. Результат накапливается в аккумуляторе AL.

Перед началом вычислений инициируем AX значением FFFFh. В регистр CX заносим длину массива и умножаем её на 8. Таким образом этот регистр хранит количество разрядов в массиве и используется как счётчик циклов командой loop. Дополнять исходную последовательность (проверяемый массив) нулями нет необходимости, т.к. количество разрядов кратно степени образующего многочлена.

Смещение переносим в регистр DI.

В BX заносим первое слово массива.

Проверяем младший разряд BX. Если он равен нулю – выполняем сдвиг слова на один разряд вправо, если нет – выполняем сложение с образующим многочленом по модулю 2, а затем выполняем сдвиг.

Сдвиг по разрядам выполняется следующим образом. В DX хранится количество сдвигов оставшееся до конца слова (удобнее подсчитывать не количество выполненных сдвигов, а от количества разрядов в слове до 0). Если в DX – 0, то нужно в DX записать 8, а в BX загрузить следующее слово массива, иначе – просто сдвигаем BX вправо на разряд и уменьшаем DX на 1.

Повторяем суммирование.

После окончания процедуры аккумулятор AX содержит вычисленное для массива значение CRC8.

Для сохранения результата его переносим в переменную result.

Для проверки целостности массива нужно повторить вычисление контрольной суммы и сравнить со значением в result.

Блок-схема алгоритма приведена в приложении 1.


4. ОПИСАНИЕ ПРОГРАММЫ

Алгоритм определения CRC реализован в процедуре CalcCRC. Перед вызовом этой процедуры необходимо в регистры записать начальные данные - сегментный регистр ES должен содержать сегмент в котором расположен массив, регистр DX – смещение начала массива внутри сегмента, BX – длина массива.

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

Для вычисления CRC, вызывается процедура CalcCRC, а результат выполнения сохраняется в переменной result.

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

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

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


К-во Просмотров: 862
Бесплатно скачать Курсовая работа: Ассемблер 2