Программирование на Ассемблере
Можете также написать программу для вычитания из первого
элемента таблицы всех последующих. Например, для таблицы table: dc.w 50,8,4,6 у Вас должен получится результат 50-8-4-6 = 32 ($20). 4.2. Сортировка таблиц (массивов). Продолжим работать с таблицами. В этом примере нам понадобится не только
читать данные из таблиц, но и изменять их так, чтобы в результате получить
отсортированную по возрастанию таблицу.
Для начала выберем алгоритм сортировки. Рассмотрим самый простой метод -
метод \"пузырька\":
Сначала сравниваем первый элемент со вторым. Если второй элемент больше, то
переходим к следующему шагу: сравниваем второй элемент с третьим, итд.
Если на каждом шаге предыдущий элемент меньше следующего, то таблица уже
отсортирована (сортировка не нужна).
Если же на каком-то шаге второй элемент меньше первого, то меняем их
местами и устанавливаем специальный флаг. Дойдя до конца таблицы, будем
проверять этот флаг: если он установлен, то таблица возможно еще не
отсортирована и нужно сделать еще один проход. Иначе - сортировка
закончена. Теперь напишем программу, реализующую этот метод. Для начала определим
переменные, которые нам потребуются. Это, во-первых, указатель на таблицу
(A0), а также счетчик (D0) и флаг завершения (D1). Так как после каждого
прохода сортировки значения A0 и D0 меняются, нам понадобятся переменные
для хранения их первоначальных значений (будем использовать A1 и D2). Для
организации цикла будем использовать команду DBRA.
Итак, начнем собственно написание программы. Предположим, что перед вызовом
подпрограммы сортировки в A1 уже записан адрес таблицы, а в D2 - число
элементов. ;(4.2A) заголовочная часть подпрограммы сортировки
sort: move.l A1,A0 ;дублируем указатель на начало таблицы
move D2,D0 ;дублируем счетчик элементов
subq #2,D0 ;корректируем значение счетчика
moveq #0,D1 ;очищаем флаг завершения table: dc.w 3,6,8,9,5 end На этом подготовка к сортировке закончена: указатель и счетчик установлены,
флаг завершения очищен.
|