Motorola 6800 (пример 9)

Поскольку в МП Motorola 6800 имеются возможности индексации, получение нужного элемента таблицы может показаться простым. Очевидное решение состоит в том, чтобш поместить базовый адрес таблицы в индексный регистр, а индекс использовать в качестве смещения. Тогда с помощью индексной адресации можно выбрать нужный элемент. Однако этот способ не годится, так как смещение задается как постоянная величина в памяти программ (в ПЗУ) и не йо'жет изменяться в зависимости от значения возводимой в квадрат величины. Базовый адрес и индекс также нельзя поменять местами, так как обычно базовый адрес имеет длину 16 бит, а для представления смещения отводится 8 бит. Решение является не очень изящным. При достаточно короткой таблице можно поместить базовый адрес в индексный регистр и увеличивать его на единицу число раз, равное значению индекса или исходного числа. Если считать, что индекс находится в ячейке 40, получается следующая программа:

Очевидно, подобный метод оказывается очень медленным из-за длинных таблиц. Вместо этого можно переслать через память значение индекса и старшие 8 бит базового адреса в индексный регистр и использовать младшие 8 бит базового адреса в качестве смещения. В МП Motorola 6800 нет возможности непосредственно пересылать данные между аккумуляторами и индексным регистром. Пусть BASEU и BASEL обозначают соответственно восемь старших и восемь младшйх разрядов базового адреса таблицы. Программа имеет следующий вид:

Ассемблер может вычислить BASEU и BASEL из следующих выражений:

BASEU EQU BASE/256 BUPP EQU BASE * 256 BASEL EQU BASE — BUPP

Величина BASE/256 — это старшие 8 бит величины BASE (так как деление на 256 равноценно сдвигу на 8 бит вправ#, поскольку 256* = 28). Величина ВиРР имеет те же значения старших 8 бит, что и BASE, при этом младшие 8 бит равны нулю. Вычитание BUPP из BASJE дает величину BASEL, т. е. младшие 8 бит величины BASE.

Программа выборки квадратов из таблицы с использованием второго способа адресации, ддя,МП Motorola 6800 имеет вид:

Motorola 6800 пример .9 

Следует обратить внимание на то, что в индексном регистре содержится 8-битный индекс и 8 бит базового адреса

В программе использованы следующие псевдокоманды:

TEMP RMB 2

* Эта "команда резервирует две ячейки -ммятй я яр«т*еыв»**г метку TEMP адресу йервой-ячейки. Никакие величины и яч^шш пъ посылаются.

SQTAB FCB 0, 1, 4„ 9, 16, 25,.36, 49

• Эта команда размещает таблицу квадратов в памяти и Приписывает метку SQTAB адресу первой ячейки этой таблицы.

На рис. 5.36 приведена программа после ассемблирования. Следует обратить внимание на то, как таблица квадратов размещена в памяти. Не нужно забывать о том, что элементы таблицы закодированы шестнадцатиричными числами. На рис. 5.37 представлена трасса программы доступак таблице.



 



Переезд недорого -квартирный транспортные услуги нанять газель для переезда.