Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Lab_moto / 2.doc
Скачиваний:
13
Добавлен:
16.04.2013
Размер:
265.73 Кб
Скачать

Команды условного перехода.

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на равенство "1"

Повторяя действия п.4а, убедитесь, что действия команды BLO/BCSпротивоположно действию командыBHS/BCC.

5. На простых примерах покажем работу команд условного перехода BNE и BEQ:

а) 0100 BNE $0109 тестируется флагZна равенство нулю

Установите флаг нуля (C=$EA). Выполните программу. Убедитесь, что переход не произошел. Теперь сбросьте флаг (C=$E8). Выполните программу еще раз, убедитесь, что переход произошел.

б) 0100 BEQ $0109 тестируется флагZна равенство "1"

Сбросьте флаг нуля. Выполните программу. Убедитесь, что переход не произошел. Установив флаг, повторно выполните программу и убедитесь, что переход произошел.

6. Рассмотрим работу команд условного перехода BHCC и BHCS:

а) 0100 BHCC $0109 тестируется флагНна равенство нулю

Сбросьте флаг H. Выполнив программу, убедитесь, что переход произошел. Установите флаг (C=$F8), выполните программу еще раз. Убедитесь, что на этот раз переход не произошел.

б) 0100 BHCS $0109 тестируется флагН на равенство "1"

Повторите действия п.6а. Убедитесь, что действие этой команды противоположно действию команды BHCC, т.е. переход произойдет во втором случае, а не произойдет в первом.

7. Для иллюстрации работы команд условного перехода BPLиBMIвыполните две элементарных программы:

а) 0100 BPL $0109 тестируется флагNна равенство нулю

Установите флаг N(C=$EC). Выполните пример. Убедитесь, что вPCзанесено значение$0102, т.е. переход не произошел. Теперь сбросьте флаг (C=$E8). Выполните программу еще раз, убедитесь, что переход произошел.

б) 0100 BMI $0109 тестируется флагNна равенство "1"

Убедитесь, что переход произойдет при установленном флаге Nи не произойдет при сброшенном.

8. Проиллюстрируем работу команд BMCиBMSпростыми примерами:

а) 0100 BMC $0109 тестируется флагIна равенство "0"

Протрассируйте программу с установленным (C=$E8) и снятым (C=$E0) флагом маскирования прерываний. Убедитесь, что переход происходит в том случае, когда флаг сброшен.

б) 0100 BMS $0109 тестируется флагIна равенство "1"

Повторите действия п.8а. Убедитесь, что переход произойдет в том случае, когда флаг установлен.

Соседние файлы в папке Lab_moto