Моделирование программы гипотетической машины с помощью макросредств - Программирование, компьютеры и кибернетика курсовая работа

Моделирование программы гипотетической машины с помощью макросредств - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Моделирование программы гипотетической машины с помощью макросредств

Разработка гипотетической машины при помощи макросредств ассемблера. Разработка алгоритма для реализации обязательных команд: сравнения двух символьных строк; их обмена; определения длины слова. Основные функции обработки строки, листинг программы.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Министерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Ижевский государственный технический университет имени М.Т. Калашникова
по курсу "Технологии программирования"
на тему: "Моделирование программы гипотетической машины с помощью макросредств"
Таким образом, программирование на языке Ассемблера может быть значительно облегчено, если иметь возможность создавать "стенограмму" часто используемых операторов. Ассемблер обеспечивает эту возможность через макросредства. Макро представляют собой "суперкоманды", которые разгружают ассемблер от части лишней и часто повторяющейся работы по обработке ассемблерной программы. При помощи макросов программисты определяют блоки ассемблерных операторов, а затем, используя конкретные ссылки, указывают ассемблеру на включение соответствующих блоков в ассемблерную программу.
Все это позволяет соединить скорость выполнения ассемблерной программы с мощностью языка высокого уровня.
Решая задачу с помощью макросов сами макросы поместим в отдельный файл. Каждый макрос назовем так, чтобы его название было понятным, читаемым и выражало бы его функцию. Т.к. некоторые макросы используем неоднократно, а также названия некоторых меток в различных макросах повторяются, то все метки в каждом макросе объявим локальными с помощью LOCAL.
Далее, чтобы каждый макрос выполнял свою функцию и не искажал другой информации, будем сохранять перед выполнением макроса регистры, которые используются в данном макросе, а после завершения работы макроса восстанавливать их. Для этого удобно написать 2-а макроса, которые осуществляют сохранение и восстановление группы регистров в стек.
Поставленную задачу можно разбить на подзадачи и таким образом решить задачу будет более проще. Далее можно разбить подзадачи на еще более мелкие подзадачи, до тех пор пока их можно будет относительно легко решить.
Разобьем задачу на 3-и общие подзадачи:
Первую и третью подзадачи решить относительно просто. А вторую задачу надо будет разбить на еще более простые подзадачи. Эти задачи должны будут выполнять сортировку слов, удаление лишних знаков препинания, определение и запись количества символов в словах. Т.о. разбили 2-ую подзадачу еще на три подзадачи.
Конечно же потребуется разбить и эти подзадачи на более мелкие, но это рассмотрим уже при разработке алгоритма.
Важным является представление строки в данной гипотетической машине. Мы будем представлять ее в следующем виде:
Первый байт - длина строки в байтах.
Второй и последующие байты - сама строка.
Последний байт - символ "$" как признак конца предложения.
Строка состоит максимум из 250 символов.
Не менее важным является организация трех регистров общего назначения.
Их можно определить в сегменте данных как некие переменные размером 8 бит, т.е. один байт. Следует отметить, что эти регистры будут использоваться в командах гипотетической машины. Так очень интенсивно используется регистр R0. Например в него будет заноситься максимальная длина слова, также он будет использоваться в других целях.
Также необходимо создать три обязательные команды, однако их будет не достаточно для решения поставленной задачи. Далее создадим еще несколько команд для решения поставленной задачи.
Задача поставлена и оговорены важные моменты. Теперь можно перейти к разработке алгоритма.
apple,melon astrachansky,african banana,armenian peachs are fruits.
african[007],apple[005],are[003],armenian[008],astrachansky[012],banana[006],fruits[006],melon[005],peachs[006],
По результатам видно, что программа работает правильно.
;///////////////////////////////////////////////////////////////////////////////////////////
;//Сортировка слов с определением их длины и удалением знаков препинания.
;///////////////////////////////////////////////////////////////////////////////////////////
INCLUDE Macros.inc ;Включение файла макросов
InitRealComputer ; настройка на реальную ЭВМ
; две предыдущие макрокоманды обеспечивают выполнение программы ГМ на реальной ЭВМ
CODE SEGMENT ;Начало кодового сегмента
WriteString MessageIn ;Вывод строки приглашения
ReadString MyString ;Ввод строки для обработки
DeleteSign ;Удаление "лишних" знаков препинания
FindMaxLen ;Поиск слова с MAX длиной
ToOneSize ;Приведение всех слов к одному размеру
WriteLenWords ;Определение длины каждого слова
;и запись этого значения в конец слова
DeleteSign ;Удаление "лишних" знаков препинания
;после приведения слов к одному размеру
WriteString MessageOut ;Вывод строки сообщения об окончании обработки.
Writestring MyString ;Вывод обработанной строки
DATA SEGMENT ;Начало сегмента данных
MessageIn db 15, 'Введите строку:', '$' ;Сообщение-'Приглашение'
MessageOut db 20, 'Обработанная строка:', '$' ;Сообщение-'Строка обработана'
MyString db 249 dup (0), '$' ;Строка для обработки
P1 db 0h ;Первый указатель на слово
P2 db 0h ;Второй указатель на слово
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\ Листинг макро библиотеки для файла Course.asm ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
fw = 24 ; разрядность слова ГМ; fw = 8..255
EndLine EQU 10,13,'$' ; код перевода строки при выводе
EndSTR EQU ' ','$' ; признак конца строки
;--------------------------------------------------------------
;--------------------------------------------------------------
STACKsection MACRO n ; описание стека
;--------------------------------------------------------------
DATAsection MACRO ; описание сегмента данных
;--------------------------------------------------------------
ENDdata MACRO ; описание конца сегмента данных
;--------------------------------------------------------------
CODEsection MACRO ; описание сегмента кода
;--------------------------------------------------------------
FINISH MACRO ; описание завершения программы
;--------------------------------------------------------------
ENDcode MACRO ; описание конца сегмента кода
;********Инициализация программы**********************************
assume cs:code,ds:data ;Привязка сегментных регистров
mov ds, ax ;В DS-адрес сегмета данных
;********Завершение программы************************************
;********Сортировка слов методом пузырька'**************************
Local Mbegin, MCMP, MNext, MExit, m0
pushreg < ax, bx > ;Сохранить старые значения регистров
mov al, R0 ;AL=R0 (В R0 длина максимального слова)
mov Flag, 1 ;установка флага обмена слов
mov P1, 1 ;Занесение в указатели адресов
MCMP: TestEnd P2 ;Указатель Р2 на конеце предложения?
je MBegin ;Да -'пузырек всплыл', продолжаем
CompareWords P1, P2 ; сравниваем слова
jbe MNext ; если меньше или равно, то продолжаем
ChangeWords bh, bl ; меняем слова местами
mov Flag, 1 ; Флаг обмена установить
popreg < bx, ax > ;Восстановление регистров
;********Проверка на конец предложения****************************
pushreg ;Сохранить старые значения регистров
lea si, MyString ;Загрузить адрес начала строки
mov bl, ofset ;Загрузить адрес элемента проверки
cmp byte ptr[si], '$' ;Cравнить элемент с признаком конца
popreg ;Восстановление регистров
;********Сдвиг строки вправо*************************************
mov bx, ofset ;С какого элемента сдвигать
lea di, MyString ;Адрес сдвигаемой строки
mov cl, byte ptr[si] ;Загрузка длины строки
mov byte ptr[si], cl ;Увеличиваем длину строки, т.к.сдвинем ее
add di, cx ;Вычисляем новые значения DI и SI
sub cx, bx ;Вычисляем кол-во сдвигаемых символов
push ds ;Cовмещение сегментых регистров
;******Приведение всех слов к одному "размеру"*********************
local tos0, tos1, tos2, tos3, tosend
inc cl ;считаем кол-во букв в текущ.слове
lodsb ;Загружаем в AL текущий символ
dec dh ;отслеживаем конец предложения
jz tosend ;если конец предлож-я то выход
cmp cl, dl ;если длина слова не равна max длине
jne TOS2 ;то вставляем символы ', '
inc si ;и продолжаем просмотр дальше
jne TOS1 ;то длина текущ.слова есть MAX и тогда
mov bx, si ;Вычисляем смещение откуда будем
mov ch, dl ;Вычисляем количество сдвигов
add si, cx ;И новое значение SI-указатель на строку
TOS3: ShiftRight bx ;сдвигаем СХ раз со смещ. ВХ
;******Поиск слова с максимальной длиной***************************
lea si, MyString ;Загрузка обрабатываемой строки
cmp al, '$' ;Если конец предложения
je MaxOrNo ;то проверяем на MAX длину
inc bl ;иначе инкреминтируем число букв в слове
loop Start ;продолжаем пока не конец предложения
cmp bl, bh ;сравниваем на MAX длину
jbe No ;если текущ.длина больше чем MAX'ая
xor bl, bl ;иначе очищаем счетчик букв
mov R0, bh ;Помещаем в R0 MAX значение
Add R0, 05h ;Прибавляем к Max значению 5(2 скобки и 3
;******Удаление "лишних" знаков препинания**************************
mov cl, byte ptr[si] ;Кол-во букв в строке
inc cl ;инкр.т.к.добавим один символ
mov byte ptr [di-1], ', ' ;запись в конец предложения ', '
mov byte ptr[di], '$' ;и признака конца предложения
cmp al, ' ' ; Поиск знаков препинания
;Удаление препинаний после первого и
cmp al, ' ' ;Поиск знаков препинания
cmp al, ' ' ;Поиск знаков препинания
mov byte ptr[di-1], ',' ;запись в конец слова ', '
;******Сравнение слов********************************************
CompareWords macro FirstWord, SecondWord
mov cl, FirstWord ;Вычисление начала первого
repe cmpsb ;продвигаемся по цепочке
;*****Обменять слова********************************************
mov al, byte ptr[si] ;загрузка обмениваемых символов
mov byte ptr[di], ah ;сохранение обменяных символов
loop mLoop ;продолжаем пока не конец слов
;*****Cчитывание строки с клавиатуры******************************
mov byte ptr[bx], 250 ;MAX число вводимых символов
mov ah, 0ah ;Фукция DOS ввода строки
;пропуск 1-го байта и запись в конец
lea bx, RdStr ;в bx загружаем адресс строки
inc byte ptr[bx+1] ;учитываем символ конца строки '$'
mov cl, [bx+1] ;заносим в счетчик количество символов
m1: mov al, [bx+1] ;сдвиг символов вправо на одну позицию
inc bx ;переход к следующей паре символов
mov al, '$' ;заносим в конец строки символ '$'
;Перевод строки путем вывода на экран последовательно 2-х символов
;13 - перевод строки и 10 возврат каретки
mov ah, 2h ;Функция DOS вывода символа
mov dl, 13 ;в dl загружается код символа
;****Вывод строки на экран*****************************************
mov ah, 09h ;Функция DOS вывода строки
int 21h ;вывести сообщение на экран
;Перевод строки путем вывода на экран последовательно 2-х символов
;13 - перевод строки и 10 возврат каретки
mov ah, 2h ;Функция DOS вывода символа
mov dl, 13 ;в dl загружается код символа
;******Вставка в конец слов значения их длин*************************
lea si, mystring ;Загружаем в SI адрес строки
lodsb ;загрузка текущего элемента строки
cmp al, '$' ;если конец предложения
cmp al, ', ' ;если нашли конец слова
jmp m3 ; иначе записываем в конец длину слова
mov byte ptr[si+5], ', ' ;знак запятой в строку
add si, 3 ;Встаем на последний символ числа длины
mov cx, 3 ;Число делений - 3 т.к.3 цифры
m4: xor ah, ah ;Очищаем остаток от деления
div bl ;Делим AL на 10 (AH-остаток, AL-число)
add ah, 30h ;Прибавляем к остатку код нуля'0'
mov byte ptr[si], ah ;Вставляем в строку полученный символ
dec si ;Сдвигаемся влево на один символ
loop m4 ;Повторяем деление три раза
m5: mov si, di ;si-ставим на следующее слово
add di, bx ;di-на следующее после si слово
;*****Занесение в стек нескольких регистров**************************
Irp Reg, ;подставить аргумент Reg из списка RegList
;*****Чтение из стека нескольких регистров************************
Irp Reg, ;подставить аргумент Reg из списка RegList
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
После выполнения работы можно сделать вывод, что использование макросредств значительно упрощает процесс программирования, потому что не приходится несколько раз переписывать один и тот же блок программы, на этом, в какой-то мере, можно сэкономить время. При помощи них можно симулировать работу ЭВМ, например в нашем случае, работу гипотетической машины со своими параметрами.
Однако при этом можно использовать и процедуры. В отличии от макросов они не увеличивают размеров программ, однако имеют низкое быстродействие.
Таким образом, при разработке такого рода лучше всего поступать так: большие фрагменты рекомендуется описывать как процедуры, а маленькие - как макросы.
1. Гафаров Р.М. Методические указания для выполнения курсовой работы "Моделирование программы гипотетической машины с помощью макросредств ассемблера" по курсу "Технология программирования", изд.:ИжГТУ, 2010г., 49с.
2. В.Н. Пильщиков "Программирование на языке ассемблера IBM PC" - М.: "Диалог-МИФИ",1998г.
3. Абель А.П. "Язык Ассемблера для IBM PC и Программирования" - М.:Высшая школа,1992г.
Результат нахождения количества отрицательных чисел. Листинг программы, задача которой - удаление всех знаков препинания в символьной строке. Приложение вывода списка очередности предоставления мест в общежитии. Форма для расчета валютных операций. отчет по практике [3,8 M], добавлен 15.06.2015
Разработка структурной схемы гипотетической ЭВМ, ее функциональной или принципиальной схемы и алгоритма работы конкретного блока, входящего в состав этой ЭВМ. Принципы работы и архитектура центрального процессора и памяти, система прерывания программ. курсовая работа [4,1 M], добавлен 25.03.2012
Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы. курсовая работа [446,0 K], добавлен 19.06.2014
Функциональный состав микро-ЭВМ, разработка системы команд. Описание взаимодействия всех блоков электронно-вычислительной машины при выполнении команд программы. Арифметико-логическое устройство, кэш-память процессора, функциональное моделирование. курсовая работа [981,4 K], добавлен 27.05.2013
Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения. курсовая работа [391,1 K], добавлен 30.09.2013
Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных. контрольная работа [150,4 K], добавлен 03.05.2014
Задачи трансляторов, характеристика их видов. Этапы и функции основных фаз процесса компиляции. Описание используемых директив и команд ассемблера, алгоритмов, таблиц. Листинг программы. Алгоритм работы программной реализации разрабатываемого компилятора. курсовая работа [1,3 M], добавлен 24.06.2013
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Моделирование программы гипотетической машины с помощью макросредств курсовая работа. Программирование, компьютеры и кибернетика.
Курсовая работа по теме Расчет службы эксплуатации и ремонта КИП и А, надежности САУ
Сочинение На Тему Максим Горький Мать Коротко
Реферат: Демократическая контрреволюция и белое движение в гражданской войне России
Сочинение По Каждому Направлению
Доклад по теме Реализация национальных проектов в Самарской области в 2008-2009гг.
Контрольная работа: Редактирование детской литературы. Скачать бесплатно и без регистрации
Контрольная работа: Становление Российского государства в XVI веке 4
Доклад по теме Реформы Петра Великого. Образование Российской Империи
Реферат: Розуміння глобальних подій світу у модерній і постмодерній перспективі
Курсовая работа по теме Автоматизация бухгалтерской (финансовой) отчетности
Доклад: Нетипичная личность в историческом пространстве или Эффект "белой вороны"
Дипломная работа: Связь агрессивности и самооценки
Курсовая Работа На Тему Совершенствование Процесса Управления Конфликтной Ситуацией
Основы систематизации и организации территории ландшафта. Экономическая оценка ландшафтов
Курсовая работа по теме Фінансовий контроль в системі казначейства та перспективи його розвитку
Реферат по теме Аналіз ігрової діяльності як засобу соціалізації особистості
Реферат На Тему Цистит
Учебное пособие: Методические указания по выполнению дипломной работы Специальность 280202. 65 Инженерная защита окружающей среды
Курсовая Работа На Тему Оценка Эффективности Использования Ресурсов Организации
Документальные Источники Информации Реферат
Геоинформационные системы - Программирование, компьютеры и кибернетика контрольная работа
Понятие государства и его сущность - Государство и право контрольная работа
Технический регламент табака - Маркетинг, реклама и торговля презентация


Report Page