Amiga. Вычислительная техника
Меню сайта
Главная
Amiga
Amiga Corporation
Модельный ряд
История развития
Аппаратная платформа
Операционные системы
Эмуляция
AMIGA # 1
Программирование на Ассемблере
Организация процессоров
Методы защиты информации
Компьютерные новеллы
Боятся ли компьютеры адского пламени?
Виртуальная реальность
Корпоративные сети
Телекоммуникационные сети
Архитектура ЭВМ
ЕС ЭВМ
Рождение ЭВМ
Компьютер
Гарвардская архитектура
Современные высокопроизводительные компьютеры
Дорога в будущее
Vista
Инфоpматика
ЭВМ
Операционные системы
Linux
Windows
Освой компьютер
Макинтош
Набор текста
Поколения
Компьютерная грамотность
Устройство компьютера
Железо
Графика
Звук
Ремонт
Сети
Программирование
Информационные технологии
Криптография
Микроэлектроника
Истории
 
 

Программирование на Ассемблере


Теперь поясним смысл команды subq. Как мы уже
говорили (см. п. 2.4), счетчик для DBRA должен быть на единицу меньше, чем
число итераций цикла. А так как нам нужно N-1 итераций для N чисел
(последний элемент не с чем сравнивать), то корректируем счетчик так, чтобы
перед началом цикла его содержимое было N-2.
Теперь напишем собственно цикл сравнений. Сравнение двух слов в памяти
выглядит примерно так:
loop: move 2(A0),D3 ;следующее слово - в D3

cmp (A0),D3 ;сравниваем с текущим
Здесь мы вынуждены использовать дополнительный регистр (D3), так как CMP не
допускает адресации обоих операндов в памяти.
Если второй операнд больше или равен первому, то обмен не нужен:
bcc.s noswap ;ветвление, если больше или равно
Иначе нужно поменять местами текущий элемент со следующим (к сожалению,
нельзя использовать EXG, так как эта команда работает только с регистрами):
doswap: move (A0),D1 ;сохраняем первый элемент

move 2(A0),(А0) ;копируем второй элемент на место

;первого

move D1,2(A0) ;копируем первый элемент на место

;второго

moveq #1,D1 ;устанавливаем флаг
noswap:
Теперь инкрементируем указатель и повторяем тело цикла, пока счетчик не
станет равным нулю:
addq.l #2,A0 ;счетчик + 2

dbra D0,loop ;цикл
И наконец, проверяем флаг завершения и повторяем цикл сортировки, если он
установлен:
tst D1 ;флаг = 0?

bne.s sort ;нет - повторить

rts ;да - конец
Вот и все. Приведем полный листинг программы сортировки:
;(4.2B)
run: move.l #table,A1 ;указатель на таблицу

moveq #5,D2 ;число элементов

bsr.s sort

 

 

© 2010 Amigo. All Rights Reserved
Создание сайтов ЕкатеринбургШаблоны сайтовПоиск товаров - справочник цен, каталог магазинов, прайс-листыБесплатные шаблоны дизайна компьютерных сайтов
Hosted by uCoz