Лабораторные МС 68HC11 (1086185), страница 2
Текст из файла (страница 2)
Команды пересылки данных.1. ВведениеВ этой лабораторной работе изучаются:• методы адресации,• группа команд пересылки данных.2. Методы адресацииМикроконтроллеры семейства M68HC11 имеют следующие типы адресации: неявная,непосредственная, прямая, расширенная, индексная и относительная.Рассмотрим каждый из видов адресации подробнее.Неявная адресация используется в том случае, когда в качестве операндов используютсялибо регистры (например, COMA, CLI), либо фиксированная ячейка памяти (SWI). Другимисловами можно сказать, что неявная адресация не требует отдельного битового поля для указания операнда.
В большинстве случаев такие команды однобайтные.4353COMACOMBИсключение составляют команды, взаимодействующие с регистром Y:18 3518 3ATYSABYВ случае использования непосредственной адресации операнд (или один из операндов)включен непосредственно в код команды. Длина таких команд может составлять от двух дочетырех байт. При записи команд, использующих непосредственную адресацию операндпредворяется символом “решетка” (‘#’).86 03LDAACE 80 00LDX18 8C 56 78 CPY#3#32768#$5678Прямая адресация используется для доступа к данным, расположенным в первых256 байтах памяти.
При этом младший байт адреса операнда расположен непосредственно закодом команды. Применение этой группы команд позволяет сократить объем программы, атакже сократить время выполнения на выборке операнда из памяти.96 3FDA FFLDAAORAB63$FFИспользование расширенной адресации позволяет осуществить доступ к любой ячейкепамяти в пределах адресного пространства контроллера. При этом два байта, следующие непосредственно за кодом команды, представляют собой абсолютный адрес операнда.B6 40 007E 78 12LDAAJMP$4000$7812Методы адресации.
Команды пересылки даных.7Лабораторная работа №2Как правило, ассемблер автоматически выбирает наиболее оптимальный из двух вышеописанных методов адресации.Для доступа к массивам данных удобно использовать индексную адресацию. В микроконтроллерах семейства M68HC11 используется так называемая индексная адресация с8-разрядным смещением. При этом в индексный регистр X или Y заносится 16-разрядный адрес, а следующий за кодом команды байт содержит 8-разрядное смещение. Абсолютный адрес при этом вычисляется простым суммированием содержимого индексного регистра с байтом смещения.A6 0718 AD 00LDAAJSR$07,X0,YКоманды работы со стеком так же принято относить к командам с индексной адресацией.3237PULAPSHBЭти команды используют индексную адресацию без смещения.Относительная адресация используется в командах передачи управления.
При этом абсолютный адрес перехода вычисляется путем сложения содержимого программного счетчикасо смещением, представляющим собой 8-разрядное знаковое число. Таким образом, используя относительную адресацию можно осуществить переход на адрес, лежащий в пределах от-128 до +127, относительно адреса следующего за командой перехода.8D 0024 FFBSRBCC*+$2*-125Заметим, что для наглядности здесь мы использовали символ “звездочка” (‘*’), который заменяется ассемблером на адрес текущей команды.
Программы, использующие только относительную и неявную адресацию, принято называть позиционно-независимыми программами.Это объясняется тем, что при перемещении кода из одной области памяти в другую работоспособность программы сохраняется.3. Команды пересылки данныхПростейшими командами являются команды пересылки данных.
Список этих командприведен в таблице 2.1. Рассмотрим каждую из команд подробнее на простых примерах.Команды TSTA, TSTB и TST служат для установки регистра статуса в соответствии сTSTATSTBTST*LDAA**LDAB**LDD**LDX**LDY**LDS**CLRACLRBCLR*STAA***STAB***STD***STX***STY***STS***Таблица 2.1. Команды пересылки данных.TABPSHATBAPULATAPPSHBTPAPULBTSXPSHXTXSPULXTSYPSHYTYSPULYXGDXXGDYПримечания:*- Команды, использующие расширенную и индексную адресацию**- Команды, использующие непосредственную, прямую, расширенную и индексную адресацию***- Команды, использующие прямую, расширенную и индексную адресациюМетоды адресации.
Команды пересылки даных.8TSTA, TSTB, TST (opr)S X H I- - - -N Z V C? ? 0 0LDAA (opr), LDAB (opr),LDD (opr), LDS (opr),LDX (opr), LDY (opr)S X H I- - - -N Z V C? ? 0 -Лабораторная работа №2содержимым регистра А, В или ячейки памяти соответственно.Далее результат может быть использован в командах условногоперехода. Занесите в регистр A значение $00 и выполните впошаговом режиме команду TSTA. Теперь посмотрите на содержимое регистра статуса: должен быть установлен флаг нуля(Z) и сброшены флаг отрицательного результата (M), переноса(C) и переполнения (V). Проведите подобный опыт при другихзначениях регистра A, обращая на различное состояние регистра статуса.Рассмотрим команды загрузки в регистр содержимогоячейки памяти.
Загрузите в память EVB следующую программу:cpuorgldab6811$c800$56; определение типа микроконтроллера; начальный адрес программы; загрузить в регистр B содержимое; ячейки $56, используя прямую; адресациюldy$c800; загрузить в регистр Y данные,; расположенные по адресу $c000; (предыдущую команду)ldx#$1f00; установить регистр X на базовый; адрес PRU MC68HC24ldaa $03,x; считать информацию с переключателейВыполните ее в пошаговом режиме, обращая внимание на состояние регистра статуса. Здесьпредставлены все виды адресации, используемые в этой группе команд.Работа команд очистки регистров A и B и ячейки памятиCLRA, CLRB, CLR (opr)может быть проиллюстрирована на примере следующей простой программы:S X H I N Z V C- - - - 0 1 0 0cpuorgclrbldx6811$c800; определить тип микроконтроллера; начальный адрес программы; очистить регистр B#$1f00; установить регистр X на базовый; адрес PRU MC68HC24clr$04,x; погасить светодиодыПредварительно занесите в порт B микросхемы эмулятора портов (ячейка памяти $1f04) какое-нибудь число, например $AA, затем выполните программу в пошаговом режиме.
Обратите внимание, что при завершении программы в регистре B будет находиться значение $00,а светодиоды погаснут.Теперь рассмотрим работу команд модификации ячеекSTAA (opr), STAB (opr),памяти.Для этого введем следующую программу:STD (opr), STS (opr),STX (opr), STY (opr)S X H I- - - -N Z V C? ? 0 cpuorgldd6811$c800#$AA55ldx#$1f00;;;;;определить тип микроконтроллераначальный адрес программыустановить в регистре D значение$AA55установить регистр X на базовыйМетоды адресации. Команды пересылки даных.9Лабораторная работа №2; адрес PRU MC68HC24clr$04,x; погасить светодиодыstaa $04,x; зажечь все четные светодиодыstab $04,x; зажечь все нечетные светодиоды,; погасив четныеldaa $03,x; считать информацию с переключателейstaa $04,x; отобразить состояние переключателей; на светодиодахTAB, TBAРаботу команд пересылки данных между регистрами A и Bлегко проследить на простом тесте: введите каждую из командS X H I N Z V Cи выполните в пошаговом режиме.
В результате выполнениякоманды TAB значение аккумулятора A будет присвоено акку- - - - ? ? 0 мулятору B, команда TBA имеет прямо противоположный эффект. Следует отметить, что регистр статуса принимает состояTPA, TSX, TSY, TXS,ние, подобное выполнению команд STAA, STAB.TYS, XGDX, XGDYКоманда TPA осуществляет перенос содержимого регистраCCR в аккумулятор A.
Это удобно, если после выполнеS X H I N Z V Cния какой-либо подпрограммы необходимо сохранить состоя- - - - - - - ние регистра статуса (см. также TAP).Группа команд работы с регистром стека имеет одну особенность: при переносе числаиз индексного регистра регистр стека получает на единицу меньшее значение, при обратнойпересылке происходит увеличение индексного регистра. Рассмотрим эти команды подробнее:cpu6811org$c800; начальный адрес программыldx#$220; занести в регистр X адрес,; следующий за границами внутреннего; ОЗУ, плюс некоторое смещение ($20)xgdx; обмен содержимого регистров X и Dclrb; очистить младший байт регистра Dxgdx; X = $200txs; SP = $1fftsy; Y = $200Обмен содержимого индексного регистра и регистра D, как правило, используется приарифметических операциях (так как арифметические команды работы с регистром D болееразвиты) или в случае необходимости 8-разрядного доступа к содержимому индексного регистра, что может быть полезно, например, для организации кольцевого буфера.Команда TAP осуществляет перенос значения регистра ATAPв соответствующие биты регистра статуса CCR.
При этом содержимое регистра A остается неизменным. Флаг X, служащийS X H I N Z V C*для маскирования прерывания XIRQ, в результате выполнения? ? ? ? ? ? ? ?*- значение может быть измеэтой команды может быть сброшен, но он не может быть устанено только из 1 в 0.новлен, если до выполнения команды флаг был сброшен.cpu6811org$c800; начальный адрес программыldaa #$47; занести в регистр А новое; содержимое регистра статусаtap; установить новое значение регистра; статуса: заметьте, что флаг X; не будет установленМетоды адресации. Команды пересылки даных.10Лабораторная работа №2Команды работы со стеком как правило используются вPSHA, PSHB, PSHX,подпрограммах для того, чтобы сохранить значение одного илиPSHY, PULA, PULB,более регистров.