Читайте также:
|
|
Описание управляющих команд начнем с команд условного перехода. Эти команды используют только относительный способ адресации, поэтому для них будем использовать условное обозначение адреса перехода rel.
Для каждого условия существует пара команд, одна из которых осуществляет передачу управления при его соблюдении, а другая - при несоблюдении. В поле комментариев приводятся расшифровки мнемоники этих команд. Условием передачи управления может быть равенство или неравенство нулю содержимого регистра аккумулятора:
JZ rel;Jump if Zero
JNZ rel;Jump if No Zero
Можно также использовать в качестве условия перехода равенство бита переносаединице или нулю:
JC rel;Jumpif Carry
JNC rel;Jump if Not Carry
Существуют команды, которые используют в качестве условия перехода равенство единице или нулю содержимого любого бита в функциональном регистре или адресуемого бита в ОЗУ:
JB flag,rel;Jump if Bit
JNB flag,rel;Jump if No Bit
Команда передачи управления по равенству бита единице имеет вариант
с очисткой содержимого этого бита:
JBC flag,rel;Jump if Bit and Clear
Команды с взаимоисключающими условиями позволяют обойти ограничения, связанные со способом адресации. Если адрес команды, на которую нужно передать управление, отличается от адреса следующей команды на большую величину (положительную или отрицательную), то можно использовать пару команд, первая из которых при соблюдении обратного условия передает управление через одну строку исходного текста, а вторая является командой безусловного перехода с абсолютной или дальней адресацией.
Перечисленные команды осуществляют переход в зависимости от результатов предыдущих вычислений. Однако есть управляющие команды, которые сами осуществляют вычисления для получения условий передачи управления. Мнемокод первой из таких команд - CJNE (Compare and Jump if Not Equal означает «сравнить и перейти, если не равно»). Это единственная команда микроконтроллера, имеющая 3 операнда. Ее четыре разновидности отличаются способами адресации источника и приемника:
CJNE A,dat8,rel
CJNE A,#dat8,rel
CJNE Rn,#dat8, rel
CJNE @Ri,#dat8,rel
Команда вычисляет разность первого и второго операндов, но результат вычитания никуда не записывается, за исключением бита переноса. Передача управления по укачанному адресу осуществляется при неравенстве операндов. При сравнении положительных чисел бит переноса устанавливается в "1", если первый операнд меньше второго. Если по адресу перехода записать команду передачи управления по содержимому бита переноса, то в результате одного сравнения можно выполнить три разные блока программы.
Другая команда - DJNZ (Decrement and Jump if Not Zero означает «уменьшить и перейти, если не равно нулю») уменьшает содержимое первого операнда на единицу, если операнд не равен 0, то управление передается по указанномуадресу:
DJNZ Rn,rel
DJNZ dat8,rel
Эта команда удобна для программирования цикла по счетчику. Перед началом цикла по адресу приемника надо записать число, равное количеству повторений цикла. Если во втором операнде записать адрес начала цикла и не изменять содержимое первого операнда другими командами в цикле, то заданный участок программы будет повторен заданное количество раз.
Перейдем к командам безусловного перехода JuMP без возврата, Они используют адресацию всех трех дальностей:
SJMP rel
JUMP adr11
LJMP adr16
Цифры в условных обозначениях операндов последних двух команд указывают на количество разрядов адресной части их кодов.
Команда безусловного перехода с индексной адресацией позволяет изменять адрес перехода по содержимому накопителя:
JMP @A+DPTR
При помощи этой команды можно осуществлять переходы по любому из 256 адресов относительно содержимого регистра указателя. Поскольку адрес передачи управления зависит от содержимого накопителя, этот вариант команды безусловной передачи управления, по сути дела, не является таковым. Эта команда может использоваться как переключатель, если в заданной области программы записать команды безусловного перехода на некоторые блоки программы. Так как эти команды будут занимать более одного байта, рассматриваемая команда может использоваться для передачи управления не более чем по 128 адресам.
Адрес перехода или метка, на которую нужно перейти обозначается в программе с помощью двоеточия, например:
……………
rel: DEC R1
JNZ rel
…………..
Дата добавления: 2015-07-20; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Группа арифметических команд | | | Директивы ассемблера ASM-51 |