
- •Введение
- •1. Краткие теоретические сведения по ассемблеру мп к1801вм1
- •1.1. Регистровая модель
- •1.2. Адресное пространство
- •1.3. Методы адресации
- •1.3.1. Методы прямой адресации
- •1.3.2. Методы косвенной адресации
- •1.3.3. Методы адресации, использующие в качестве рон r7
- •2. Алгоритмы сортировки
- •2.1. Оценка алгоритма сортировки
- •2.2. Классификация алгоритмов сортировки
- •2.3. Сортировка пузырьком
- •3. Определение четности чисел
- •3.1. Определение чисел кратных двум
- •3.2. Определение числа единиц в числе
- •4. Определение кратности любому числу
- •5. Определение модуля числа
- •6. Многословное умножение
- •Заключение
- •Приложения Приложение 1. Оформление отчета по курсовой работе
- •Результаты работы программы
- •Приложение 2. Список команд
- •Приложение 3. Эмулятор Ersatz-11
2.2. Классификация алгоритмов сортировки
• Устойчивость (stability) — устойчивая сортировка не меняет взаимного расположения равных элементов.
• Естественность поведения — эффективность метода при обработке уже упорядоченных, или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.
• Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях. Для специальных случаев (типов данных) существуют более эффективные алгоритмы.
Ещё одним важным свойством алгоритма является его сфера применения. Здесь основных типов упорядочения два:
• Внутренняя сортировка оперирует массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Данные обычно упорядочиваются на том же месте, без дополнительных затрат.
В современных архитектурах персональных компьютеров широко применяется подкачка и кэширование памяти. Алгоритм сортировки должен хорошо сочетаться с применяемыми алгоритмами кэширования и подкачки.
• Внешняя сортировка оперирует с запоминающими устройствами большого объёма, но с доступом не произвольным, а последовательным (упорядочение файлов), т. е. в данный момент мы 'видим' только один элемент, а затраты на перемотку по сравнению с памятью неоправданно велики. Это накладывает некоторые дополнительные ограничения на алгоритм и приводит к специальным методам упорядочения, обычно использующим дополнительное дисковое пространство. Кроме того, доступ к данным на носителе производится намного медленнее, чем операции с оперативной памятью.
Доступ к носителю осуществляется последовательным образом: в каждый момент времени можно считать или записать только элемент, следующий за текущим.
Объём данных не позволяет им разместиться в ОЗУ.
Также алгоритмы классифицируются по:
• потребности в дополнительной памяти или её отсутствии
• потребности в знаниях о структуре данных, выходящих за рамки операции сравнения, или отсутствии таковой
2.3. Сортировка пузырьком
Сортировка простыми обменами, сортировка пузырьком (англ. bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов.
Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяются более эффективные алгоритмы сортировки. В то же время метод сортировки обменами лежит в основе некоторых более совершенных алгоритмов, таких как шейкерная сортировка, сортировка Шелла и быстрая сортировка.
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При проходе алгоритма элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма (Рис. 7).
Рис. 7. Вариант алгоритма пузырьковой сортировки по возрастанию
Можно показать, что для сортировки требуется сделать не более n−1 итераций внешнего цикла, поэтому в некоторых реализациях внешний цикл всегда выполняется ровно n−1 или n раз, и не отслеживается, были ли обмены или нет на каждой итерации.
Алгоритм можно немного улучшить следующими способами:
• Внутренний цикл можно выполнять для j = 1,2,...,n − i, где i — номер итерации внешнего цикла (нумерация с единицы), так как на i-й итерации последние i элементов массива уже будут правильно упорядочены.
• Внутренний цикл можно модифицировать так, чтобы он поочерёдно просматривал массив то с начала, то с конца. Модифицированный таким образом алгоритм называется сортировкой перемешиванием или шейкерной сортировкой.
Применимо к ассемблеру можно сделать следующее улучшение – изменение счетчика путем изначального выставления его в N и последующим декрементом на каждом шаге. Контроль окончаия движения по массиву осуществляется по флагу нулевого результата – если он активируется, следовательно конец массива достигнут.
Допустим, задан массив из 5 двухбайтовых чисел, располагающихся в памяти МП, начальный адрес массива 2000.
Адрес |
Метка |
Мнемокод |
Комментарий |
1000 |
|
MOV R7, R1 |
R1 - true/false переменная; R1 = true |
1002 |
LBL1 |
TST R1 |
Проверить наличие перестановок |
|
|
BEQ END |
Если не было остановиться |
|
|
MOV #2000, R0 |
R0 – установить начало массива |
|
|
CLR R1 |
R1 = false |
1014 |
NEXT |
CMP R0, #2010 |
Проверить конец массива |
|
|
BEQ LBL1 |
Если все, проверить перестановки |
|
|
CMP (R0)+, (R0) |
Сравнить соседние элементы |
|
|
BLOS NEXT |
Далее, если первый меньше или равен |
|
|
MOV (R0), 1776 |
Иначе поменять их местами |
|
|
MOV –(R0), 1774 |
|
|
|
MOV 1776, (R0)+ |
|
|
|
MOV 1774, (R0) |
|
|
|
INC R1 |
R1 = true |
|
|
BR NEXT |
Продолжить сортировать |
1052 |
END |
HALT |
Остановиться |
Представленная программа имеет несколько минусов:
1. Программа корректно выполняет беззнаковую сортировку. Это значит, что 2-байтовое число 1777778 (-18) > 18.
2. Алгоритм перестановки занимает 2 дополнительные ячейки памяти для хранения переставляемых чисел.
Их устранение оставляем на совести читателя. Обращаем внимание, что минус №1 является существенным и, при сдаче курсовой работы, где должна осуществляться сортировка с учетом знака числа, использование данной программы без доработки будет приводить к неверным результатам.