- •Микропроцессор мс68000
- •Команда dBcc
- •Команда Scc
- •Команды nop и stop
- •Управляющие структуры
- •Практическая часть.
- •Команды безусловной передачи управления .
- •Команды условного перехода.
- •Команды условного перехода с декрементом в регистре Dn
- •Команды работы с подпрограммами
- •Контрольные вопросы и задания.
Лабораторная
работа N3. Команды переходов.
Микропроцессор мс68000
Лабораторный практикум
Лабораторная работа N3
Команды переходов
Теоретическая часть
Команды переходов.
Рассмотрим как выполняется программа, не содержащая команд перехода. Перед выполнением программы в счетчик команд РС (Program counter) заносится адрес команды, с которой должно начаться выполнение программы. Затем вырабатывается сигнал "Пуск". По адресу, содержащемуся в РС, происходит выборка команды и автоматическое увеличение содержимого РС на длину команды, после чего команда выполняется. Так как счетчик команд уже содержит адрес следующей команды, то она выбирается и процесс повторяется так, как было описано выше. Процессор будет выполнять команды до тех пор, пока не встретится команда останова STOP или команда, возвращающая управление монитору операционной системы. Команды переходов нарушают линейную последовательность исполнения команд посредством загрузки необходимого адреса перехода в PC.
Существуют два типа команд переходов: безусловные и условные. Первые передают управление по указанному адресу, а вторые - передают управление по указанному адресу только при выполнении некоторого условия. Если условие не выполняется, то команда условного перехода игнорируется и выполняется следующая за ней команда.
Команда JMP (Jump) обеспечивает безусловный переход по определ¸нному адресу. Для нее допустимы следующие режимы адресации:
JMP (An) ARI
JMP d16(An) ARI with displacement
JMP d8(An,Xn) ARI with index
JMP xxx.WAbsolute short
JMP xxx.LAbsolute long
JMP d16(PC) PC with displacement
JMP d8(PC,Xn) PC with index
Как пример, иллюстрирующий гибкость команды JMP, предположим, что таблица переходов определяется следующим образом:
ORG $20000
TABLE DC.L LABEL1
DC.L LABEL2
DC.L LABEL3 при этом при выполнении команд
MOVEA.L TABLE(A1),A0
JMP (A0) осуществляется переход на один из тр¸х адресов, в зависимости от содержимого регистра A1: LABEL1, когда A1=0; LABEL2 когда A1=4; LABEL3, когда A1=8.
.
Команда BRA (branch) также является командой безусловного перехода, однако для нее допустима лишь относительная адресация (PC with dicplacement). Это означает, что управление от текущей команды BRA может быть передано лишь в диапазоне от -32768 до +32767 байтов. Программист в команде BRA указывает метку, а ассемблер сам расчитывает необходимое смещение, которое находится либо в самой команде, либо в следующем слове. Таким образом команда BRA может иметь два формата - короткий и длинный.
Короткий формат выглядит так:
-
15
0
0 1 1 0 0 0 0 0
8-bit displacement
Соответственно длинный формат:
-
15 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
16-bit displacement
в операционном слове содержит нули на месте 8-битового смещения, а в следующем (дополнительном) слове - 16-битовое смещение. Отсюда становится ясно, что смещение короткого формата находится в диапазоне от -128 до -1 и от +1 до +127 (исключается нулевое значение), а длинный формат - от -32768 до +32767.
Программист путем указания суффикса .S в команде BRA может принудительно заставить использовать короткий формат, но в этом случае на него ложится ответственность за возможность реализации перехода. Ассемблер при трансляции команды перехода BRA <label> поступает следующим образом: если переход выполняется назад, то в зависимости от расстояния перехода ассемблер сам формирует короткий или длинный формат; в случае перехода вперед ассемблер всегда выбирает длинный формат (на момент трансляции команды ему еще неизвестен адрес перехода).
Итересно отметить, что при передаче управления следующей команде (не конструктивный переход), даже при указании короткого формата ассемблер генерирует длинную форму команды BRA.
Рассмотрим теперь команды условного прехода. Все они имеют единый формат Bcc<label> , ãäåññ(Condition Code) - код условия, и используют относительный способ адресации. Относительный способ адресации обеспечивает позиционную независимость команд типа Branch. При сравнении операндов возможны всего шесть операций отношения:
= равно
# не равно
> больше
> = больше или равно
< меньше
<= меньше или равно
Операции отношения = и # реализуют две следующие команды условного перехода:
Отношение Команда Проверяемое условие
= BEQ (Equal) Z=1
# BNE (Not Equal) Z=0
Эти команды могут быть использованы как для знаковых, так и беззнаковых арифметических операций. Остальные отношения реализуются по разному для знаковых и беззнаковых чисел. Так для чисел со знаком используются следующие команды условной передачи управления:
Отношение Команда Проверяемое условие
> BGT (Greater Than ) Z+(NÅV)=0
>= BGE (Greater than or Equel to) NÅV=0
< BLT (Less Than) NÅV=1
<= BLE (Less than or Equel to) Z+(NÅV)=1
Для чисел без знака перечисленные отношения реализуются следующими командами условного перехода:
Отношение Команда Проверяемое условие
> BHI (Higher then ) C+Z=0
>= BCC (Higher or same ( Carry Clear)) C=0
< BCS (Lower ( Carry Set) ) C=1
<= BLS (Lower thàn or Same as) C+Z=1
Следует заметить, что все восемь приведенных команд выполняют правильные переходы и в случаях переполнения разрядной сетки. На практике, условные команды перехода BEQ, BNE, BGT, BGE, BLT, BLE используют при работе с данными, а команды BEQ, BNE, BHI, BCC, BCS, BLS - при работе садресами.
Команды условного перехода, выполняющие передачу управления в зависимости от состояния флагов N,Z,V,C , называют простыми условными переходами.
Обратите внимание, что ранее рассмотренные команды BCC и BCS проверяют флаг C, а команды BEQ и BNE - флаг Z. Таким образом, осталось добавить к перечисленным командам еще четыре, которые проверяют состояние битов N и V:
Команда Проверяемое условие
BPL (PLus) N=0
BMI (MInus) N=1
BVC (oVerflow Clear) V=0
BVS (oVerflow Set) V=1
Рассмотренный набор из 14 команд условного перехода является необходимым минимумом для многих типов микропроцессоров.
Для иллюстрации использования команд условного и безусловного перехода, рассмотрим блок-схему, приведенную на рис. 1. Предположим, что переменные A и B содержат 16-битовые знаковые целые числа. Тогда требуемая последовательность команд может быть реализована следующим образом:
Рис. 1. Пример логической блок-схемы.
MOVE.W AA,D0
CMP.W BB,D0
BGT.S CHECKB
TST.W D0
BGE.S INCA
BRA.S ZEROA
INCA ADDQ.W #1,AA
BRA.S NEXT
CHECKB CMPI.W #-5,BB
BLE.S ZEROA
SUBQ.W #1,AA
BRA.S NEXT
ZEROA CLR.W AA
NEXT .
.
.
В этой программе в командах передачи управления вперед использован суффикс .S , так как расстояние перехода не превышает 128 байт. Такой прием приводит к экономии памяти (вместо двухсловных команд перехода генерируются однословные), а также к некоторому ускорению выполнения программы.