Программирование на Ассемблере
В этом разделе мы рассмотрим некоторые базовые алгоритмы, которые,
несомненно, помогут Вам на практике. Хотя все примеры из этого раздела
написаны для ассемблера AssemPro, они без труда переносятся на другие
системы (см. предыдущий раздел).
Все приводимые ниже алгоритмы оформлены как подпрограммы, так что их можно
практически без измениний использовать в других программах. Однако мы
все же рекомендуем Вам \"поиграть\" с этими подпрограммами в отладчике, чтобы
лучше понять идеи алгоритмов (в системе SEKA Вы можете использовать команду
\"j Program_Name\" для запуска подпрограммы; результаты обычно возвращаются
на регистрах или в памяти).
Начнем с самого простого примера: сложение чисел в таблице. 4.1. Суммирование таблиц (массивов). Предположим, что Вам нужно получить сумму чисел, записанных в памяти. Пусть
у нас имеется пять 16-битных чисел, сумму которых требуется поместить в D0.
Вот самый простой способ это сделать: ;(4.1A)
adding1: clr.l D0 ;обнуление D0 (на всякий случай)
move table,D0 ;первый элемент - в D0
add table+2,D0 ;прибавить второй элемент
add table+4,D0 ;прибавить третий элемент
add table+6,D0 ;прибавить четвертый элемент
add table+8,D0 ;прибавить пятый элемент
rts ;возврат
table: dc.w 2,4,6,8,10
end Войдите в отладчик, запустите эту программу (если Вы используете ассемблер
SEKA, наберите \"j adding1\") и убедитесь, что в D0 действительно окажется
сумма чисел таблицы table. Приведенный пример работает только с фиксированными адресами. Но вспоминая
различные методы адресации процессора мы сможем написать более компактный
алгоритм, который к тому же будет способен суммировать разные таблицы.
Для этого мы поместим адрес таблицы в один из адресных регистров (например,
в A0) с помощью команды move.l. Тогда, используя этот регистр как базовый
указатель, мы сможем применять косвенную адресацию со смещением для доступа
к элементам таблицы: ;(4.1B)
adding1: clr.l D0 ;обнуляем D0
move.l #table,A0 ;адрес таблицы - в A0
move (A0),D0 ;первый элемент - в D0
add 2(A0),D0 ;прибавляем второй элемент
add 4(A0),D0 ;прибавляем третий элемент
add 6(A0),D0 ;прибавляем четвертый элемент
add 8(A0),D0 ;прибавляем пятый элемент
rts ;возврат из подпрограммы
table: dc.w 2,4,6,8,10 end Оттранслируйте эту программу и войдите в отладчик.
|