Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

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

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка гипотетической машины при помощи макросредств ассемблера. Разработка алгоритма для реализации обязательных команд: сравнения двух символьных строк; их обмена; определения длины слова. Основные функции обработки строки, листинг программы.
Краткое сожержание материала:

5

Размещено на

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Ижевский государственный технический университет имени М.Т. Калашникова

Кафедра "Вычислительная техника"

Курсовая работа

по курсу "Технологии программирования"

на тему: "Моделирование программы гипотетической машины с помощью макросредств"

Разработал

студент группы 4-36-1

Васильев А.С.

Принял

к.т.н., доцент кафедры ВТ

Гафаров Р.М.

Ижевск 2012

Оглавление

Разработка гипотетической машины

Введение

1. Постановка задачи

2. Разработка алгоритма

3. Алгоритм

4. Результаты

5. Листинг программы

Вывод

Литература

Разработка гипотетической машины

Цель работы

Целью данной курсовой работы является изучение стандартных макросредств ассемблера.

Задание

Разработать гипотетическую машину при помощи макросредств ассемблера.

Параметры машины:

1. Формат слова: fw=24 бит

2. Число регистров общего назначения: Nr=3

3. Формат команд ГМ: Fk = {S1,S2; S,I}

4. Количество операндов в команде: Nop=2

5. Команды ГМ для обязательной реализации:

k1: команда сравнения 2-х символьных строк на >,=,<;

k2: команда обмена символьными строками;

k3: команда подсчета количества символов в символьной строке, ограниченной пробелами или знаками препинания.

6. Решить задачу на гипотетической машине:

Расставить слова в символьном массиве в алфавитном порядке, убрав знаки препинания и разделив слова запятыми. После каждого слова поместить в скобках его длину. Сортировку производить в исходном массиве.

Введение

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

1) Плохое понимание исходного текста программы, особенно по прошествии некоторого времени;

2) Повторяемость незначительных или значительных участков программы;

3) Необходимость включения в каждую программу некоторых участков кода используемых в других программах.

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

Одним из этих средств являются макросредства. Под макросредствами понимают средства автоматизации программирования. Одним из принципов автоматизации является использование макросредств, когда пользуются одним и тем же текстом.

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

Все это позволяет соединить скорость выполнения ассемблерной программы с мощностью языка высокого уровня.

1. Постановка задачи

Решая задачу с помощью макросов сами макросы поместим в отдельный файл. Каждый макрос назовем так, чтобы его название было понятным, читаемым и выражало бы его функцию. Т.к. некоторые макросы используем неоднократно, а также названия некоторых меток в различных макросах повторяются, то все метки в каждом макросе объявим локальными с помощью LOCAL.

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

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

Разобьем задачу на 3-и общие подзадачи:

1. Ввод строки

2. Обработка строки

3. Вывод строки

Первую и третью подзадачи решить относительно просто. А вторую задачу надо будет разбить на еще более простые подзадачи. Эти задачи должны будут выполнять сортировку слов, удаление лишних знаков препинания, определение и запись количества символов в словах. Т.о. разбили 2-ую подзадачу еще на три подзадачи.

Конечно же потребуется разбить и эти подзадачи на более мелкие, но это рассмотрим уже при разработке алгоритма.

Важным является представление строки в данной гипотетической машине. Мы будем представлять ее в следующем виде:

Первый байт - длина строки в байтах.

Второй и последующие байты - сама строка.

Последний байт - символ "$" как признак конца предложения.

Строка состоит максимум из 250 символов.

Не менее важным является организация трех регистров общего назначения.

Их можно определить в сегменте данных как некие переменные размером 8 бит, т.е. один байт. Следует отметить, что эти регистры будут использоваться в командах гипотетической машины. Так очень интенсивно используется регистр R0. Например в него будет заноситься максимальная длина слова, также он будет использоваться в других целях.

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

Задача поставлена и оговорены важные моменты. Теперь можно перейти к разработке алгоритма.

2. Разработка алгоритма

Для начала реализуем 3-и обязательные команды.

1. Сравнить 2-е символьные строки. Макрос CompareWords String1, String2.

Реализовать её можно при помощи команды CMPS (Сравнение двух цепочек), которая по сути выполняет заданную команду. Остаётся только определить адреса сравниваемых элементов и их длину, что не представляет труда.

Адреса определим при помощи загрузки в регистр SI эффективного адреса строки и прибавлением к нему смещения относительно начала строки. Это будет адрес первого слова. Аналогично загрузим в DI адрес второго слова.

Т.к. мы сравниваем цепочку байт, то будем использовать команду CMPSB.

Далее остается проверить флаги стандартным образом и перейти на соответствующую метку.

2. Обмен двух символьных строк. Макрос ChangeWords String1, String2.

Обмен в данном макросе реализован с помощью команды XCHG, которая обменивает 2-а операнда (в нашем случае байта). Так как нам необходимо обменять символьные строки, то естественно надо произвести обмен N байтов, где N - длина строк. В данной гипотетической машине число N будет браться из регистра R0. После определения адресов String1, String2 (определение адресов строк здесь и далее будем осуществлять аналогично описанному в предыдущей команде), числа обмениваемых символов приступаем непосредственно к обмену путем зацикливания команды XCHG на R0 раз. Выбор R0 не означает, что нам придется каждый раз записывать туда значение длины, просто команда определения длины слова будет записывать в этот регистр значение длины. Поэтому удобно использовать команду обмена после команды определения длины слова, которая будет описана ниже.

3. Определение длины слова. Макрос WriteLenWords.

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

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

Как описали в постановке задачи всю задачу мы разбили на подзадачи. Рассмотрим каждую подзадачу в отдельности.

1. Ввод строки.

Ввод реализуем при помощи стандартной функции DOS ввода предложений. После ввода строки приведем ее к стандартному виду гипотетической машины. Для этого в конец предложения запишем символ "$", а в начало - длину получившейся строки.

2. Вывод строки.

Другие файлы:

Эквалайзер с RLC режекторным фильтром
Построение модели с помощью программы OrCAD Capture. Моделирование схемы с помощью программы PSpice. График амплитудно-частотной характеристики Ku(f)....

Моделирование электронного расширителя стереобазы с помощью программного пакета OrCAD 9.2
Моделирование электрической принципиальной схемы расширителя стереобазы с помощью программы PSpice. Амплитудно-частотные характеристики выходных стере...

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

Моделирование систем
Моделирование движения пешехода и составление блок-схемы программы. Построение изображения выходного сигнала в MathCAD и нормирование переходной харак...

Моделирование
МОДЕЛИРОВАНИЕ - МЕТОД ИССЛЕДОВАНИЯ ТВОРЧЕСТВА§ 1.1. Моделирование на вычислительной машинеМоделирование, или имитация объекта исследования. Выявление...