46866 (607962), страница 3

Файл №607962 46866 (Ассемблер) 3 страница46866 (607962) страница 32016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

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

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

ПРИЛОЖЕНИЕ 1

Блок-схема алгоритма

ПРИЛОЖЕНИЕ 2

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

ret

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

include cls.prc

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

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

SelectFunction:

;1.1.Вывод строки меню

mov DX,OFFSET FSelMsg

mov AH,9h

int 21h

;1.2.Выбор функции

mov FuncNum,0

call input10 ;Считываем номер пункта меню

mov FuncNum,AL ;Сохраняем номер выбранной функции

ExitSF: ret

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

;Подпрограмма ввода числа

input10:

push BX ;Сохраняем регистры

push DX

push CX

mov DX,0 ;Обнуляем регистр хранения результата

InputChar:

clc

mov AH,0Ch

mov AL,1

int 21h ;Считываем символ с эхом

cmp AL,13d

je ExitI10 ;Если его код 13 ? конец ввода

cmp AL,'0'

jb ErrInput ;Если код меньше кода символа 0 ошибка ввода

cmp AL,'9'

jg ErrInput ;Если код больше кода символа 9 ошибка ввода

clc

sub AX,30h ;Получаем из кода символа число

mov CX,0

mov CL,AL

mov AX,DX

mov BX,10

mul BX ;Умножаем на 10 уже накопленный результат

add AX,CX ;Прибавляем считанное число

mov DX,AX ;Сохраняем результат

jmp InputChar

ErrInput:

Stc ;В случае ошибки ввода устанавливаем флаг

ExitI10:

mov AX,DX ;Переносим результат в регистр возврата

pop CX

pop DX

pop BX ;Восстанавливаем регистры

ret

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

;Установка указателя на сегмент переменных

SetDATSeg:

push AX

mov AX,_Data

mov DS,AX

pop AX

ret

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

;Установка указателя на проверочный массив

SetArrSeg proc

push AX

mov AX,DataSeg

mov ES,AX

pop AX

ret

SetArrSeg endp

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

; Процедура вычисления CRC16

;ES - сегмент массива

;DX - адрес начала массива

;BX - длина блока данных

;AX - результат вычислений

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

CalcCRC proc

push CX ;\

push BX ;- сохранение регистров

push DI ;/

push DX

mov DI,DX ;Загрузка индекса начала массива

mov DX,8

mov CX,BX ;Установка счётчика цикла

shl CX,1 ;\

shl CX,1 ;- CX=CX*8

shl CX,1 ;/

mov AX,65535 ;Очистка регистра результата

mov BX,ES:[DI]

CRNext: loop CRNextTest ;Цикл по словам массива

pop DX

pop DI ;\

pop BX ;-восстановление регистров

pop CX ;/

ret

CRNextTest:

push AX

mov AX,BX

and AX,1b

jz Shift

pop AX

xor AL,31h

push AX

Shift: mov AX,DX

jz NewWord

shr BX,1

dec DX

jmp EndShift

NewWord:

mov DX,8

inc DI

mov BX,ES:[DI]

EndShift:

pop AX

jmp CRNext

CalcCRC endp

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

END

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

ЗАКЛЮЧЕНИЕ

Ассемблер является символическим аналогом машинного языка. По этой причине программа, написанная на ассемблере, должна отражать все особенности архитектуры микропроцессора: организацию памяти, способы адресации операндов, правила использования регистров и т. д. Из-за необходимости учета подобных особенностей ассемблер уникален для каждого типа микропроцессоров.

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

СПИСОК ЛИТЕРАТУРЫ:

  1. Финогенов К.Г. Основы языка Ассемблера. – М.: Радио и связь,2000.

  2. Юров В. Assembler. Специальный справочник. – СПб.: Питер, 2001.

  3. Юров В. Assembler. Практикум. – СПб.: Питер, 2001.

  4. Юров В., Хорошенко В. Assembler – Учебный курс.- СПб.: Питер, 2000.

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

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

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

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