2. Опис програмної моделі

Пропозиції, складові програму, можуть являти собою синтаксичну конструкцію, що відповідає команді, макрокоманді, Директиві або коментарю. Для того щоб транслятор асемблера міг розпізнати їх, вони повинні формуватися за певними синтаксичним правилам.

Пропозиції асемблера формуються з лексем, що представляють собою синтаксично нероздільні послідовності припустимих символів мови мають сенс для транслятора. Лексемами є:

• ідентифікатори - послідовності припустимих символів, що використовуються для позначення таких об'єктів програми, як коди операцій, імена змінних і назви міток. Правило запису ідентифікаторів полягає в наступному. Ідентифікатор може складатися з одного або декількох символів. В якості символів можна використовувати букви латинського алфавіту, цифри і деякі спеціальні знаки - _,?, $, @.

• ланцюжка символів - послідовності символів, укладені в одинарні або подвійні лапки;

• цілі числа в одному з наступних систем числення: двійковій, десятковій, шістнадцятковій. Ототожнення чисел при записі їх у програмах на асемблері виробляється за певними правилами. Десяткові числа не вимагають для свого ототожнення зазначення будь-яких додаткових символів.

Практично кожне речення містить опис об'єкта, над якою або за допомогою якого виконується певна дія. Ці об'єкти називаються операндами. Їх можна визначити так: операнди - це об'єкти (деякі значення, регістри або комірки пам'яті), на які діють інструкції чи директиви, або це об'єкти, які визначають або уточнюють дію інструкцій або директив.

Операнди можуть комбінуватися з арифметичними, логічними, побітовим і атрибутивними операторами для розрахунку деякого значення або визначення комірки пам'яті, на яку буде впливати дана команда або директива.

Розглянемо класифікацію операндів, підтримуваних транслятором асемблера.

Постійні або безпосередні операнди - число, рядок, ім'я або вираз, мають деяке фіксоване значення. Ім'я не повинно бути переміщуваним, тобто залежати від адреси завантаження програми в па ¬ м'яти.

Адресні операнди - задають фізичне розташування операнда в пам'яті за допомогою вказівки двох складових адреси: сегмента і зсувів (рис. 2.2).

Рис. 2.2. - Синтаксис опису адресних операндів

Переміщувані операнди - будь-які символьні імена, що представляють деякі адреси пам'яті. Ці адреси можуть позначати місце розташування в пам'яті деякої інструкції (якщо операнд - мітка) або даних (якщо операнд - ім'я області пам'яті в сегменті даних). Переміщувані операнди відрізняються від адресних тим, що вони не прив'язані до конкретного адресою фізичної пам'яті. Сегментна складова адреси переміщуваного операнда невідома і буде визначена після завантаження програми в пам'ять для виконання.

Зчитувач адреси - специфічний вид операнда. Він позначається знаком $. Специфіка цього операнда в тому, що коли транслятор асемблера зустрічає у вихідній програмі цей символ, то він підставляє замість нього поточне значення лічильника адреси. Значення лічильника адреси, або як його іноді називають лічильник розміщення.

Базовий і індексний операнди. Цей тип операндів використовується для реалізації непрямої базової, непрямої індексної адресації або їх комбінацій і розширень.

Операнди є елементарними компонентами, з яких формується частина машинної команди, що позначає об'єкти, над якими виконується операція. У більш загальному випадку операнди можуть входити як складові частини в більш складні утворення, звані виразами. Вирази являють собою комбінації операндів та операторів, що розглядаються як єдине ціле. Результатом обчислення виразу може бути адреса деякої комірки пам'яті або деяке константне (абсолютне) значення. У табл. 2.2 наведено підтримувані мовою асемблера оператори і перераховані їх пріоритети.

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

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

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.

Блок-схема алгоритму наведена в додатку 2.



Информация о работе «Розробка на мові асемблера алгоритму контролю на парність масиву даних»
Раздел: Промышленность, производство
Количество знаков с пробелами: 27398
Количество таблиц: 0
Количество изображений: 2

Похожие работы

Скачать
206879
0
16

... . Механізм переривань забезпечує ефективна взаємодія пристроїв уведення-висновку з мікропроцесором. Переривання цікавлять нас тому, що обробка переривань - це прерогатива програмування на мові асемблера. У високорівневих мовах відсутні засоби роботи з перериваннями на машинному рівні. Переривання звичайно викликаються зовнішніми пристроями. Переривання сигналізує мікропроцесору, щоб він призупинив ...

Скачать
162235
26
50

... ./ “_____”_________2009р. Виконавець Студент групи x  /xxxxxx./ “_____”____________2009р. Харків 2009 ЗАТВЕРДЖЕНО xxx.03077-01 12 01-1-ЛЗ ВІРТУАЛЬНИЙ ВИМІРЮВАЛЬНИЙ КОМПЛЕКС НА БАЗІ УЧБОВОГО ЛАБОРАТОРНОГО СТЕНДУ EV8031 Текст програми xxxxx.03077-01 12 01-1 Аркушів _48_ Харків 2009 ЗМІСТ 1 ТЕКСТ ПРОГРАМНОГО ЗАБЕСПЕЧЕННЯ ...

0 комментариев


Наверх