- •Курсовая работа
- •Часть I. Разработка гипотетической машины.
- •1.Цель работы Целью данной курсовой работы является изучение стандартных макросредств ассемблера ibm pc.
- •2.Задание
- •3.Введение
- •4.Постановка задачи
- •5.Разработка алгоритма
- •Задачи удаления лишних знаков препинания и определения длины каждого слова не являются сложными и их можно реализовать не разбивая их на подзадачи.
- •BeginProg – Инициализация программы. Здесь производится привязка сегментных регистров к соответствующим сегментам.
- •6.Алгоритм
- •7.Результаты
- •8.Листинг программы
- •Часть II. Самостоятельная работа
- •Основные понятия и определения.
- •Описание типов и экземпляров объектов
- •Скрытые поля и методы.
- •Как сказано выше приватные поля и методы должны располагатся после общедоступных. Директива public позволяет, если это удобно, расположить их наоборот.
- •Наследование и переопределение .
- •Статические и виртуальные методы.
- •Виртуальные методы и полиморфизм.
- •Совместимость объектных типов.
- •Преимущества и недостатки виртуальных методов.
- •Заключение
- •Литература
4.Постановка задачи
Решая задачу с помощью макросов сами макросы поместим в отдельный файл. Каждый макрос назовем так , чтобы его название было понятным , читаемым и выражало бы его функцию. Т.к. некоторые макросы используем неоднократно , а также названия некоторых меток в различных макросах повторяются , то все метки в каждом макросе обявим локальными с помощью LOCAL.
Далее , чтобы каждый макрос выполнял свою функцию и не искажал другой информации , будем сохранять перед выполнением макроса регистры , которые используются в данном макросе , а после завершения работы макроса восстанавливать их. Для этого удобно написать 2-а макроса , которые осуществляют сохранение и восстановление группы регистров в стек.
Поставленую задачу можно разбить на подзадачи и таким образом решить задачу будет более проще. Далее можно разбить подзадачи на еще более мелкие подзадачи, до тех пор пока их можно будет относительно легко решить.
Разобьем задачу на 3-и общие подзадачи:
Ввод строки
Обработка строки
Вывод строки
Первую и третью подзадачи решить относительно просто. А вторую задачу надо будет разбить на еще более простые подзадачи. Эти задачи должны будут выполнять сортуровку слов, удаление лишних знаков препинания, определение и запись количества символов в словах. Т.о. разбили 2-ую подзадачу еще на три подзадачи.
Конечно же потребуется разбить и эти подзадачи на более мелкие, но это рассмотрим уже при разработке алгоритма.
Важным является представление строки в данной гипотетической маштне. Мы будем представлять ее в следующем виде:
Первый байт – длина строки в байтах.
Второй и последующие байты – сама строка.
Последниий байт – символ “$” как призна конца предложения.
Строка состоит максимум из 250 символов.
Не менее важным является организация трех регистров общего назначения.
Их можно определить в сегменте данных как некие переменные размером 8 бит, т.е.
один байт. Следует отметить, что эти регистры будут использоваться в командах гипотетической машины. Так очень интенсивно исполшьзуется регистр R0. Например в него будет заноситься максимальная длина слова, также он будет использоваться в других целях.
Также необходимо создать три обязательные команды, однако их будет не достаточно для решения поставленой задачи. Далее создадим еще несколько команд для решения поставленой задачи.
Задача поставлена и оговорены важные моменты. Теперь можно перейти к разработке алгоритма.
5.Разработка алгоритма
Для начала реализуем 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. Вывод строки.
Также реализуем при помощи стандартной функции DOS.
3. Обработка строки.
Эта подзадача является самой главной и сложной. С ходу ее не решить, поэтому мы
разбиваем ее на подзадачи. Основными функциями обработки являются:
Сортировка слов
Удаление лишних знаков препинания
Запись в конец каждого слова значения его длины
