- •Внутренняя архитектура.Методы адресации. Команды пересылки данных. Команды передачи управления.
- •2.1. Теоретическая часть.
- •2.1.1. Архитектура центрального процессора.
- •2.1.2. Карта памяти. Назначение регистров.
- •Регистр конфигурации (option).
- •Регистры данных портов (dRn) и установки направления передачи данных (ddRn).
- •Регистры управления (scr), состояния (ssr) и данных (sdr) порта последовательного периферийного интерфейса spi.
- •Регистры сброса (coprst) и управления сбросом (copcr).
- •2.1.3. Методы адресации.
- •2.1.4. Команды пересылки данных.
- •2.1.5. Команды передачи управления.
- •2.2.1. Исследование работы команд пересылки данных.
- •Команды загрузки регистров а и х данными из памяти.
- •Команды модификации памяти.
- •Команды межрегистровой пересылки.
- •Команды условного перехода.
- •Команды работы с подпрограммами.
- •Команда установки указателя стека в исходное состояние.
- •2.3. Контрольные вопросы.
- •2.4. Задания.
Команды условного перехода.
1. Проиллюстрируем работу команд BRAèBRNпростыми примерами:
à) 0100 BRA $0109 в результате теста?1=1происходит безусловный переход
Выполните трассировку программы. Убедитесь, что переход происходит. Кстати, заметьте, что команда BRA, как и большинство команд классаBRANCH, занимает в памяти2байта.
á) 0100 BRN $0109 в результате теста?0=1переход не происходит
Выполните трассировку программы. Убедитесь, что переход не происходит. Команда BRNне производит никаких действий, поэтому может быть использована для резервирования места в памяти (выполнение командыBRNзанимает меньше машинного времени, чем двух командNOP).
2. Для демонстрации работы команд тестирования битов BRCLRèBRSETвведем две короткие программы:
à) 0100 BRCLR #3,*$50,$0109 тестируется бит3ячейки памяти$0050 на равенство нулю.
Занесите в ячейку $0050значение$00. Выполните программу, убедитесь, что вPCзанесено значение$0109(т.е. переход произошел). Заметьте, что флаг переноса сброшен. Теперь занесите в ячейку$0050значение$08. Выполните программу и убедитесь, что переход не произошел (т.е.PCзагружен адресом следующей команды-$0103). Заметьте, что флаг переноса установлен.
á) 0100 BRSET #3,*$50,$0109 тестируется бит3ячейки памяти$0050 на равенство единице
Повторите действия п.2а. Убедитесь, что действие этой команды противоположно действию команды BRCLR, т.е. переход произойдет во втором случае, и не произойдет в первом. Флаг переноса в этом случае устанавливаеся аналогично. Заметьте, что командыBRCLR è BRSETзанимают в памяти3байта.
3. Для изучения работы команд условного перехода BHI è BLS введем две короткие программы:
à) 0100 BHI $0109 тестируются флагиZèCíà
одновременное равенство нулю
Установите флаг переноса (C=$E9). Произведите трассировку программы. Убедитесь, что переход не произошел. Повторите опыт, устанавливая флагиZèCв различных комбинациях (C={$EA, $EB}). Убедитесь, что переход опять не происходит. Теперь сбросьте оба флага (C=$E8). Выполните программу еще раз, убедитесь, что переход произошел.
á) 0100 BLS $0109 тестируются флагиZ è Cна равенство единице хотя бы одного из них
Повторите действия из опыта 3а. Убедитесь, что в первых трех случаях переход происходит, а в четвертом нет.
4. Изучите работу команд условного перехода BHS/BCCèBLO/BCSна простых примерах:
à) 0100 BHS $0109 тестируется флагCна равенство нулю
Обратите внимание:восстановленная дизассемблером команда будет выглядеть какBCC $0109. Это происходит потому, что в ассемблере фирмы "Motorola" (а также некоторых других фирм) командыBHSèBCCимеют одинаковый код (но дизассемблер отдает предпочтение мнемоникеBCC). То же относится и к командамBLOèBCS). Сбросьте флаг переноса (C=$E8). Протрассируйте программу. Убедитесь, что переход произошел. Повторите опыт, устанавив флагC (C=$E9). Убедитесь, что переход не произошел.
á) 0100 BLO $0109 тестируется флагCна равенство единице
Повторяя действия п.4а, убедитесь, что действие команд BLO/BCSпротивоположно действию командBHS/BCC.
5. На простых примерах покажем работу команд условного перехода BNE и BEQ:
à) 0100 BNE $0109 тестируется флагZна равенство нулю
Установите флаг нуля (C=$EA). Выполните программу. Убедитесь, что переход не произошел. Теперь сбросьте флаг (C=$E8). Выполните программу еще раз, убедитесь, что переход произошел.
á) 0100 BEQ $0109 тестируется флагZна равенство единице
Сбросьте флаг нуля. Выполните программу. Убедитесь, что переход не произошел. Установив флаг, повторно выполните программу и убедитесь, что переход произошел.
6. Рассмотрим работу команд условного перехода BHCC è BHCS:
à) 0100 BHCC $0109 тестируется флагÍна равенство нулю
Сбросьте флаг H. Выполнив программу, убедитесь, что переход произошел. Установите флаг (C=$F8), выполните программу еще раз. Убедитесь, что на этот раз переход не произошел.
á) 0100 BHCS $0109 тестируется флагÍ на равенство единице
Повторите действия п.6а. Убедитесь, что действие этой команды противоположно действию команды BHCC, т.е. переход произойдет во втором случае, и не произойдет в первом.
7. Для иллюстрации работы команд условного перехода BPLèBMIвыполните две элементарных программы:
à) 0100 BPL $0109 тестируется флагNна равенство нулю
Установите флаг N(C=$EC). Выполните пример. Убедитесь, что вPCзанесено значение$0102, т.е. переход не произошел. Теперь сбросьте флаг (C=$E8). Выполните программу еще раз, убедитесь, что переход произошел.
á) 0100 BMI $0109 тестируется флагNна равенство единице
Убедитесь, что переход произойдет при установленном флаге Nи не произойдет при сброшеном.
8. Проиллюстрируем работу команд BMCèBMSпростыми примерами:
à) 0100 BMC $0109 тестируется флагIна равенство нулю
Протрассируйте программу с установленным (C=$E8) и сброшенным (C=$E0) флагом маскирования прерываний. Убедитесь, что переход происходит в том случае, когда флаг сброшен.
á) 0100 BMS $0109 тестируется флагIна равенство единице
Повторите действия п.8а. Убедитесь, что переход произойдет в том случае, когда флаг установлен.