126091 (690871), страница 2

Файл №690871 126091 (Розробка на мові асемблера алгоритму контролю на парність масиву даних) 2 страница126091 (690871) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 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.





4. Відладка та випробування розробленого програмного забезпечення

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

Програма виконує наступні операції на вибір користувача: обчислення CRC масиву і запис результату в змінну, перевірка цілісності масиву - повторне обчислення CRC і порівняння обчисленого значення з записаним, спотворення масиву - оборотне зміна одного біта перевірочного масиву.

Для обчислення CRC, викликається процедура CalcCRC, а результат виконання зберігається у змінній result.

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

Спотворення масиву використовується для тестування програми і демонстрації роботи.

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





Висновок

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

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





Література

1. Абель П. Основи программирования/ Пер. с англ. Ю. В. Сальниковая.- М.: Висш. Шк. 1992г. - 447с.: ил.

2. А. Жуков, А. Авдохин «Assembler».-Спб: БХВ - Петербург, 2002..

3. Архитектура ввода-вывода персональных ЭВМ IBM РС Под редакцией Ю. С. Лукача (C) Инженерно-техническое бюро, 1990

4. В. Юров «Assembler» Практикум.-Спб.:Питер, 2001.

5. В. Юров «Assembler» Учебник.-Спб.:Питер, 2001.

6. Зубков С. В. Ассемблер для Dos, Windows и Unix - «Питер», в 2004 г.

7. Ирвин, Кип. Язык Ассемблера для процессоров Intel, 3-е издание: Пер. с англ. - М.: Издательский дом «Вильямс», 2002.-616с.: ил. - Парал. Тит. Англ.

8. Использование Turbo Assembler при разработке программ / Сост. А. А. Чекатков.-Киев:Диалектика,1995.-228с





Додаток А

Текст програми

MODEL SMALL

;*************************************************

; Сегмент стека

;*************************************************

_Stack SEGMENT WORD 'STACK'

DB 200h DUP (?)

_Stack ENDS

;*************************************************

; Сегмент тестового масиву

;*************************************************

DataSeg SEGMENT WORD 'DATA'

TestTab DB 32 DUP (\

00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, \

08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, \

00h, 01h, 02h, 03h, 04h, 05h, 06h, 07h, \

08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh \

)

DataSeg ENDS

;*************************************************

; Сегмент змінних

;*************************************************

_Data SEGMENT WORD 'DATA'

;*************************************************

FSelMsg DB 13,10, 'Виберіть дію:', 13,10, \

13,10, '1-Визначити CRC ', 13,10, \

'2-Перевірити масив ', 13,10, \

'3-Спотворити масив ', 13,10, \

'4-Вихід ', 13,10, \

'$'

ByeStr DB 13,10, 'Для продовження натисніть будь-яку клавішу. $'

ErrorString DB 13,10, 'Помилка введення', 13,10, '$'

ErrorResult DB 13,10, 'Дані спотворені. CRC8 порушена. ', 13,10,' $ '

;*************************************************

BegSeg DW (?); Сегмент перевірочного масиву

BegOffs DW (?); Початок перевірочного масиву

Result DW (?); Результат обчислення

FuncNum DB (?); Обрана операція

_Data ENDS

;*************************************************

; Сегмент програми

;*************************************************

. CODE

;*************************************************

call cls; Очищення екрану

call SetDATSeg; Завантаження адреси сегмента змінних

call SetArrSeg; Установлення покажчика сегмента масиву

; Головне меню

Mnu: call SelectFunction; Вибір операції

call cls; Очищення екрану

mov AL, FuncNum;

Mnu1: cmp AL, 1; Визначення парності

jne Mnu2

; Установка параметрів

mov DX, OFFSET TestTab; Зміщення початку масиву

mov BX, 30; Розмір перевіряється блоку даних

; Call TestOdd

call CalcCRC

mov Result, AX; Збереження результату

;*******************************

Mnu2: cmp AL, 2; Визначити парність і порівняти з перед.

jne Mnu3

mov DX, OFFSET TestTab; Зміщення початку масиву

mov BX, 30; Розмір блоку даних

call CalcCRC

cmp Result, AX

je Mnu2End

; Результат не співпав. Дані спотворені. Видати повідомлення про помилку

mov DX, OFFSET ErrorResult

mov AH, 9h

int 21h; Висновок повідомлення про помилку

mov DX, OFFSET ByeStr; Висновок запрошення

mov AH, 9h

int 21h

mov AH, 0Ch

mov AL, 01h

int 21h; Очікування натискання будь-якої клавіші

Mnu2End:

call cls

jmp Mnu

;*******************************

Mnu3: cmp AL, 3; Спотворення масива (перший байт)

jne Mnu4

mov DI, OFFSET TestTab

mov AX, ES: [DI]

xor AX, 1; Інвертуємо молодший біт

mov ES: [DI], AX

;*******************************

Mnu4: cmp AL, 4; Вихід з програми

jne Mnu

;*******************************

jmp Exit

; Завершення програми

; Exit:

; Призупинити перед виходом

mov DX, OFFSET ByeStr;? Натисніть клавішу??

mov AH, 9h

int 21h

mov AH, 0Ch

mov AL, 01h

int 21h

Exit:; Вихід

mov AH, 4Ch

int 21h

;*************************************************

; Друк нового рядка

NewStr:

mov AH, 02h

mov DL, 0Dh

int 21h

mov DL, 0Ah

int 21h

Характеристики

Тип файла
Документ
Размер
2,21 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6989
Авторов
на СтудИзбе
262
Средний доход
с одного платного файла
Обучение Подробнее
{user_main_secret_data}