Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LH05-2N.DOC
Скачиваний:
21
Добавлен:
11.03.2015
Размер:
100.35 Кб
Скачать

200 Lda #44h ; Загрузить в a число 44h

201

202 STA 0F0h ; Переслать число из A в память по адресу 0F0h

203

204 LDA #31h ; Загрузить в A число 31h

205

206 STA 0E0h ; Переслать число из A в память по адресу 0E0h

207

1.4. Группа команд условных и безусловных переходов.

Приведенный фрагмент программы (пример 4) имеет линейную структуру, т.е. программа не содержит ветвлений. На языке ассемблера линейный характер программы проявляется в том, что каждая последующая инструкция расположена в пространстве памяти микроконтроллера вслед за предыдущей. Каждая инструкция в примере 4 занимает два байта, поэтому абсолютные адреса двух последующих инструкций отличаются на 2. Микроконтроллер осуществляет выборку линейной последовательности команд путем автоматического (без применения специальных команд) увеличения счетчика адреса PC. Однако даже в линейных программах бывает необходимо выполнить переход к инструкции, адрес которой не равен(PC)+1. Для выполнения переходов по произвольно заданному программистом адресу используются команды безусловного перехода.

В программах с ветвлением после анализа какого либо условия должен быть осуществлен переход к выполнению одной их двух инструкций. Следовательно одна из них будет расположена в памяти программ по следующему абсолютному адресу, адрес другой должен определить программист.

В примере 5 оператор ветвления выделен цветом. В зависимости от результатов выполнения оператора dec 0e0h, который формирует условие ( устанавливает триггерZ при равенстве 0 счетчика циклов), будет выполнен переход к адресу 206 или 210.

Пример 5.

Программа с ветвлением

200 ldx #0f0h ; Загрузить регистр X числом 0F0h

202 lda #05h ; Загрузить аккумулятор A числом 5

204 sta 0e0h ; Записать содержимое A в ячейку ОЗУ с адресом 0E0h

206 loop: lda 200h,x ; Считать данные из ПЗУ

209 sta ,x ; Записать данные в ОЗУ

20A incx ; увеличить на 1 смещение адреса

20C dec 0e0h ; уменьшить на 1 счетчик циклов

20E bne loop ; Перейти к метке loop, если не все циклы выполнены.

210 m1: jmp m1 ;

Для организации ветвления в программах используются команды условных переходов. Команды условного перехода (ветвления - Branch) анализируют один флаг в регистре признаков, или комбинацию флагов. Регистр признаков центрального процессора содержит следующие флаги условий (см. лаб. раб.1 ):

  • C - флаг переноса (Carry Flag).

  • Z - флаг нулевого результата (Zero Flag).

  • N - флаг отрицательного результата (Negative Flag).

  • H - флаг дополнительного переноса (Halt - Carry Flag).

  • I - глобальная маска прерывания.

Перед использованием любой команды условного перехода разработчик программы должен позаботиться о том, чтобы необходимые флаги в регистре признаков были установлены предшествующей командой. Не все команды влияют на формирование того или иного признака (за примером обратитесь к табл. 2). Наиболее часто перед командами условного перехода для формирования признаков используются арифметические и логические команды. Сравнение двух беззнаковых операндов удобно производить командой CMP (Сравнение). Эта команда не изменяет операндов, но устанавливает признаки переносаCи нулевого результата Zпо правилам, которые иллюстрирует табл. 3.

Таблица 3. Правила формирования признаков C и Z командой CMP.

Соотношение операндов

C

Z

Условие, используемое для команды

условного перехода

R=opr

0

1

Z=1

R¹opr

X

0

Z=0

R<opr

1

0

C=1

R£opr

1/0 *

0/1 *

C+Z=1

R>opr

0

0

C+Z=0

R³opr

0

0/1 **

C=0

*- первый символ приR<opr, второй приR=opr.

** - первый символ при R>opr, второй приR=opr.

Типы инструкций условного и безусловного переходов приведены в табл. 4.

Таблица 4. Команды условного и безусловного перехода.

Мнемокод

Выполняемое действие

Полное название

JMP

JMP opr

JMP opr

JMP ,x

JMP opr,x

JMP opr,x

Безусловный переход по адресу, указанному в ячейке памяти, ОЗУ или ПЗУ. Адрес ячейки задан используемым в команде способом адресации.

Unconditional IMP

BRA

Безусловный переход по адресу, код смещения которого указан во втором байте команды.

{PC <--- PC + 0002 + Rel}

Смещение Rel задает второй байт команды.

Branch Always

BRN

{PC <--- PC +002}

Перейти к следующей команде. Эквивалентна двум инструкциям NOP. Полезна для режимов отладки в абсолютном коде для замены инструкций условного перехода без изменения абсолютных адресов.

Branch Newer

BCS

Перейти по метке, если бит переноса С установлен. Иначе перейти к следующей команде. Условие: C = 1.

Branch if Carry Bit Set

BCC

Перейти по метке, если бит переноса С сброшен. Иначе перейти к следующей команде. Условие : C = 0.

Branch if Carry Bit Clear

BLO

Перейти по метке, если r < m. Иначе перейти к следующей команде. Условие: C = 1.

Branch if Lower

BHS

Перейти по метке, если r ³m. Иначе перейти к следующей команде. Условие: C = 0.

Branch if Higher or Same

BEQ

Перейти по метке, если r = m. Иначе перейти к следующей команде. Условие : Z = 1

Branch if Equal

BNE

Перейти по метке, если r ¹m. Иначе перейти к следующей команде. Условие : Z = 0

Branch if not Equal

BHI

Перейти по метке, если r > m. Иначе перейти к следующей команде. Условие: C + Z = 0.

Branch if Higher

BLS

Перейти по метке, если r £m. Иначе перейти к следующей команде. Условие: C + Z = 1.

Branch if Lower or Same

BPL

Перейти по метке, если бит знака установлен в 0, т.е число положительное. Иначе перейти к следующей команде. Условие: N = 0.

Branch if Plus

BMI

Перейти по метке, если бит знака установлен в 1, т.е число отрицательное. Иначе перейти к следующей команде. Условие: N = 1.

Branch if Minus

BNCS

Перейти по метке, если бит дополнительного переноса установлен. Иначе перейти к следующей команде. Условие : H = 1

Branch if Half-Carry Bit Set

BNCC

Перйти по метке, если бит дополнительного переноса сброшен. Иначе перейти к следующей команде. Условие : H = 0

Branch if Half Carry Bit Clear

BIH

Перейти по метке, если на входе /Vpp высокий логический уровень. Иначе перейти к следующей команде. Условие:/Vpp = 1.

Branch if Pin High

BIL

Перейти по метке, если на входе /Vpp низкий логический уровень. Иначе перейти к следующей команде. Условие:/Vpp = 0.

Branch if Pin Low

BMS

Перейти по метке, если бит маски I установлен. Иначе перейти к следующей команде. Условие: I = 1.

Branch if Interrupt Mask Set

BMC

Перейти по метке, если бит маски I сброшен. Иначе перейти к следующей команде. Условие: I = 0.

Branch if Interrupt Mask Clear

BRSET n

Перейти по указанному адресу, если бит n в байте данных установлен. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов 00 ¸0FFh.

Branch if Bit Set

BRCLR n

Перейти по указанному адресу, если бит n в байте данных равен 0. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов 00 ¸0FFh.

Branch if Bit Clear

Примечание:

r - регистр А или Х

m - содержимое ячейки памяти.

Команда JMP носит название “Длинный безусловный переход “. Команда изменяет содержимое счетчика адреса PC: PC¬Эффективный адрес.

Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации (см. табл. 5).

Остальные команды табл.5 являются командами условного перехода. Первый байт команд условного перехода содержит код операции, а второй - смещение адреса следующей команды относительно адреса текущей команды в целочисленном формате со знаком (Rel). Диапазон возможных кодов смещения: от -128 до +128.

Если условие, заданное типом используемой команды условного перехода выполняется, то адрес следующей команды центральный процессор вычисляет путем сложения текущего адреса с кодом смещения: PC ¬(PC)+0002+Rel. Если условие не выполняется, то микроконтроллер переходит к выполнению следующей команды: PC¬(PC)+0002.

Например команда BEQ Rel (Переход, если равно).

Команда тестирует состояние бита Z регистра условий. Если бит Z установлен, возникает переход PC¬(PC)+0002+Rel. Следуя после сравнения, команда BEQ вызовет переход, если аргументы равны. Если аргументы не равны, то происходит переход к следующей по порядку команде: PC¬(PC)+0002. Регистр условий не изменяется.

Аналогичным образом работают все команды условного перехода.

Следует обратить внимание на две команды BRA и BRN, которые имеют формат команд условного перехода, но выполняют безусловный переход.

Команда BRA - команда перехода по условию ?1=1, которое выполнено всегда. Поэтому команда осуществляет переход по адресу: PC ¬(PC)+0002+Rel.

Команда BRN - команда перехода по условию ?1=0, которое не выполняется никогда. Команда используется как двухбайтовый вариант команды NOP (нет операции) при отладке программ, когда нужно отменить действие команды условного перехода, и выполняется за 3 цикла. Действие этой команды противоположно действию команды BRA.

В исходном тексте программ адрес перехода может быть задан абсолютным значением, но чаще задается символом или выражением, которое может быть вычислено программой Ассемблера. Программа Ассемблер вычисляет смещение Rel из абсолютного адреса перехода и текущего значения программного счетчика PC.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]