Логические команды и операции сдвига



Данную группу образуют 15 команд, которые выполняют операции логического И, ИЛИ, исключающего ИЛИ, различные операции сдвига, операции взятия обратного и дополнительного кода. Следует обратить внимание на специальные команды установки признаков без изменения содержимого тестируемых регистров и ячеек памяти (TST и BIT). Все логические команды модифицируют флаги в регистре признаков. Типы инструкций данной группы приведены в табл. 1.4.и 1.5.

Табл.1.4. Логические команды.

Мнемокод

Операция

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

Способ адресации

Влияние на признаки

V H I N Z C
AND AND #opr AND opr AND opr AND opr,X AND opr,X AND ,X AND opr,SP AND opr,SP   Поразрядное логическое И над содержимым аккумулятора АСС и байтом данных М. Результат поместить в АСС.   A (A) & (M)   IMM DIR EXT IX2 IX1 IX SP1 SP2   0   -   -   b   b   -
ORA ORA #opr ORA opr ORA opr ORA opr,X ORA opr,X ORA ,X ORA opr,SP ORA opr,SP   Поразрядное логическое ИЛИ над содержимым аккумулятора АСС и байтом данных М. Результат поместить в АСС.   A (A) Ú (M)   IMM DIR EXT IX2 IX1 IX SP1 SP2   0   -   -   b   b   -
 
EOR

EOR #opr

EOR opr

EOR opr

EOR opr,X

EOR opr,X

EOR ,X

EOR opr,SP

EOR opr,SP

  Поразрядное исключающее ИЛИ над содержимым аккумулятора АСС и байтом данных. Результат поместить в АСС.   A (A M)   IMM DIR EXT IX2 IX1 IX SP1 SP2   0   -   -   b   b   -
COM COM opr COMA COMX COM opr,X COM ,X COM opr,SP   Инверсия содержимого аккумулятора АСС, или регистра Х, или ячейки памяти М.   M ( )=$FF-(M) A ( )=$FF-(M) X ( )=$FF-(M) M ( )=$FF-(M) M ( )=$FF-(M) M ( )=$FF-(M)   DIR INH INH IX1 IX SP1   0   -   -   b   b   1
NEG NEG opr NEGA NEGX NEG opr,X NEG ,X NEG opr,SP   Получение дополнительного кода содержимого аккумулятора АСС, или регистра Х, или ячейки памяти М.   M -(M)=$00-(M) A -(A)=$00-(A) X -(X)=$00-(X) M -(M)=$00-(M) M -(M)=$00-(M)   DIR INH INH IX1 IX SP1   b   -   -   b   b   b
CLR CLR opr CLRA CLRX CLRH CLR opr,X CLR ,X CLR opr,SP   Очистить (установить в 0) аккумулятор АСС, или регистр Х, или регистр Н, или ячейку памяти М.   M $00 A $00 X $00 H $00 M $00 M $00 M $00   DIR INH INH INH IX1 IX SP1   0   -   -   0   1   -
BIT BIT #opr BIT opr BIT opr BIT opr,X BIT opr,X BIT ,X BIT opr,SP BIT opr,SP   Выполняет операцию поразрядного логического И над содержимым аккумулятора АСС и байтом памяти М. Результат операции никуда не записывается. По результату операции устанавливаются признаки N и Z.     (A) & (M)   IMM DIR EXT IX2 IX1 IX SP1 SP2   0   -   -   b   b   -
TST TST opr TSTA TSTX TST opr,X TST ,X TST opr,SP   Устанавливает признаки N и Z по содержимому аккумулятора АСС, или регистра Х, или ячейки памяти М. Содержимое последних не изменяется.     (A) - $00 (X) - $00 (M) - $00   DIR INH INH IX1 IX SP1   0   -   -   b   b   -
NSA Поменять местами тетрады (полубайты) аккумулятора АСС. A (A[3:0]:A[7:4]) INH - - - - - -

 

Табл.1.5. Команды сдвигов.

Мнемокод

Операция

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

Способ адресации

Влияние на признаки

V H I N Z C
ASL ASL opr ASLA ASLX ASL opr,X ASL ,X ASL opr,SP   Арифметический сдвиг влево содержимого аккумулятора ACC, или регистра Х, или байта памяти М. В бит b0 загружается 0, бит b7 загружается в бит переноса С.       DIR INH INH IX1 IX SP1   b   -   -   b   b   b
ASR ASR opr ASRA ASRX ASR opr,X ASR opr,X ASR opr,SP   Арифметический сдвиг вправо содержимого аккумулятора АCC, или регистра Х, или байта памяти М. Бит b7 не изменяется, бит b0 загружается в бит переноса С.       DIR INH INH IX1 IX SP1   b   -   -   b   b   b
LSL LSL opr LSLA LSLX LSL opr,X LSL ,X LSL opr,SP Логический сдвиг влево содержимого аккумулятора АCC, или регистра Х, или байта памяти М. В бит b0 загружается 0, бит b7 загружается в бит переноса С. (аналог ASL)       DIR INH INH IX1 IX SP1   b   -   -   b   b   b
LSR LSR opr LSRA LSRX LSR opr,X LSR ,X LSR opr,SP   Логический сдвиг вправо содержимого аккумулятора АCC, или регистра Х, или байта памяти М. В бит b7 загружается 0, бит b0 загружается в бит переноса С.       DIR INH INH IX1 IX SP1   b   -   -   0   b   b
ROL ROL opr ROLA ROLX ROL opr,X ROL ,X ROL opr,SP   Циклический сдвиг влево содержимого аккумулятора АCC, или регистра Х, или байта памяти М через бит переноса С.       DIR INH INH IX1 IX SP1   b   -   -   b   b   b
ROR ROR opr RORA RORX ROR opr,X ROR ,X ROR opr,SP   Циклический сдвиг вправо содержимого аккумулятора АCC, или регистра Х, или байта памяти М через бит переноса С.       DIR INH INH IX1 IX SP1   b   -   -   b   b   b

 

Команды битового процессора

Данную группу образуют 6 команд (табл. 1.6). Совокупность этих команд называют битовым процессором. Наличие команд битового процессора позволяет существенно сократить управляющие программы по объему кода и времени выполнения. Обратите внимание, что команды BSET и BCLR действуют только на ячейки памяти с однобайтовыми адресами $00¸$FF и не действуют на регистры центрального процессора. Следует правильно указывать операнды в командах BSET и BCL:

BSET 3,$35  ;Установить в 1 бит D3 в ячейке памяти с адресом $35.

BSET 0,$FF ;Установить в 1 бит D0 в ячейке памяти с адресом $FF.

BCLR 3,$35 ;Сбросить (установить в 0) бит D3 в ячейке памяти с адресом $35.

Команды условного перехода по значениям отдельных битов BRSET и BRCLR могут быть отнесены как к группе команд битового процессора, так и к группе команд управления. Поэтому последние приведены в следующем разделе.

 

Табл.1.6. Команды битового процессора.

Мнемокод

Операция

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

Способ адресации

Влияние на признаки

V H I N Z C
BSET BSET n, opr   Установить в 1 бит с номером n в байте данных. Данные могут располагаться в ячейке ОЗУ или регистре специальных функций. В команде используется только прямая адресация. Диапазон адресов байтов данных $00¸$FF.   Mn 1   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   -
BCLR BCLR n, opr   Установить в 0 (очистить) бит с номером n в байте данных. Данные могут располагаться в ячейке ОЗУ или регистре специальных функций. В команде используется только прямая адресация. Диапазон адресов байтов данных $00¸$FF.   Mn 0   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   -
SEC Установить в 1 бит переноса С. C 1 INH - - - - - 1
CLC Установить в 0 бит переноса С. C 0 INH - - - - - 0
SEI Установить в 1 глобальную маску прерываний I. Запретить прерывания. I 1 INH - - 1 - - -
CLI Установить в 0 глобальную маску прерываний I. Разрешить прерывания. I 0 INH - - 0 - - -

 

Команды передачи управления

Группа команд передачи управления является самой многочисленной группой. Она содержит 40 инструкций, которые делятся на две подгруппы:

  • Команды условных и безусловных переходов (табл.1.7):
  • Команды вызова подпрограмм и обслуживания прерываний (табл.1.8).

Центральный процессор CPU08 может использовать три команды безусловного перехода: традиционную трехбайтовую команду JMP и две двухбайтовых команды BRA и BRN. Команда JMP отличается расширенным набором способов задания адреса перехода. Этот адрес может быть, в том числе, определен одним из способов индексной адресации, что позволяет разместить изменяемый в ходе выполнения программы адрес в одной из ячеек ОЗУ. Двухбайтовая команда BRA реализует безусловный переход в пределах смещения -128¸+127 относительно текущего адреса. Эта команда позволяет более экономно расходовать память. Команда BRN аналогична команде NOP, но имеет двухбайтовый формат. Значение смещения, которое указано во втором байте команды, смысла не имеет. Эта команда полезна для режимов отладки программного обеспечения в абсолютном коде. Она позволяет заменить инструкцию ветвления на инструкциюNOP без изменения байта смещения rel в формате команды условного перехода.

Группа команд ветвления чрезвычайно широка. Кроме переходов по традиционным условиям C, Z, N, H, реализованы переходы по комбинациям флагов C и Z для сравнения операндов в прямом коде без знака, а также по комбинациям флагов C, Z, и V для сравнения операндов в дополнительном коде со знаком.

Особое внимание следует обратить на команды CBEQ и DBNZ:

CBEQopr,rel ;Сравнить содержимое аккумулятора ACC с содержимым прямоадресуемой

;ячейки памяти и перейти по метке, если они равны.

CBEQx+,rel         ;Сравнить содержимое аккумулятора ACC с содержимым ячейки памяти,

; адрес которой содержится в индексном регистре, и перейти по метке, если

; они равны. Содержимоеиндексного регистра H:X увеличивается на 1

;после выполнения сравнения.

DBNZX ,rel          ;Уменьшить на 1 содержимое ячейки памяти, адрес которой указан в

;индексном регистреH:X, и перейти по метке, если результат не равен 0.

DBNZArel            ;Уменьшить на 1 содержимое аккумулятора ACC, и перейти по метке,

;если результат не равен 0.

Команды CBEQ и DBNZ имеют достаточно широкий набор способов адресации.

 


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

Мнемокод

Операция

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

Способ адресации

Влияние на признаки

V H I N Z C

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

JMP JMP opr JMP opr JMP opr,X JMP opr,X JMP ,X Безусловный переход по адресу, указанному в ячейке памяти (ОЗУ или ПЗУ). Адрес ячейки задан используемым в команде способом адресации.     PC Jump Address   DIR EXT IX2 IX1 IX   -   -   -   -   -   -
BRA BRA rel Безусловный переход по адресу, код смещения которого указан во втором байте команды.   PC (PC) + $0002 + rel   REL   -   -   -   -   -   -
BRN BRN rel Перейти к следующей команде. Эквивалентна двум инструкциям NOP. Полезна в режиме отладки в абсолютном коде для замены инструкций условного перехода без изменения абсолютных адресов.   PC (PC) + $0002   REL   -   -   -   -   -   -
NOP Пустая операция. Счетчик команд PC увеличивается на 1. Другие регистры не изменяются.   None   INH   -   -   -   -   -   -

Командыветвления

BCS BCS rel Перейти по метке, если бит переноса С установлен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (С) = 1     REL     -     -     -     -     -     -
BCC BCCrel Перейти по метке, если бит переноса С сброшен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (С) = 0     REL     -     -     -     -     -     -
BEQ BEQ rel Перейти по метке, если r = m. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (Z) = 1   REL   -   -   -   -   -   -
BNE BNE rel Перейти по метке, если r ¹ m. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel,  если (Z) = 0   REL   -   -   -   -   -   -
BHCS BHCS rel Перейти по метке, если бит дополнительного переноса H установлен. Иначе перейти к следующей команде.     PC (PC) + $0002 + rel,  если (H) = 1     REL     -     -     -     -     -     -
BHCC BHCC rel Перейти по метке, если бит дополнительного переноса H сброшен. Иначе перейти к следующей команде.   PC (PC) + $0002 + rel, если (H)=0     REL     -     -     -     -     -     -
CBEQ CBEQ opr,rel   CBEQA #opr,rel   CBEQX #opr,rel   CBEQ opr,X+,rel   CBEQ X+,rel   CBEQ opr,SP,rel   Сравнить содержимое аккумулятора ACC или регистра Х с содержимым ячейки памяти M (или константой) и перейти по метке, если равны.   PC (PC)+$0003+rel,  если (A)- (M)=$00 PC (PC)+$0003+rel,  если (A)- (M)=$00 PC (PC)+$0003+rel,  если (X)- (M)=$00 PC (PC)+$0003+rel,  если (A)-(M)=$00 PC (PC)+$0002+rel,  если (A)-(M)=$00 PC (PC)+$0004+rel,  если (A)-(M)=$00   DIR   IMM   IMM   IX1+   IX+   SP1   -   -   -   -   -   -
DBNZ DBNZ opr,rel DBNZA rel DBNZX rel DBNZopr,X,rel DBNZX,rel DBNZ opr,SP,rel   Вычесть единицу из содержимого ячейки памяти M, или аккумулятора ACC, или регистра X и перейти по метке, если результат не равен 0. A(A)-$01 или M(M)-$01 или X(X)-$01, PC(PC)+$0003+rel если (result)¹0 для DBNZDIR и IX1 PC(PC)+$0002+rel если (result)¹0 для DBNZA, DBNZX и IX PC(PC)+$0004+rel если (result) ¹0 для DBNZ SP1   DIR INH INH IX1 IX SP1   -   -   -   -   -   -
BIH BIH rel Перейти по метке, если на входе  высокий логический уровень. Иначе перейти к следующей команде.     PC(PC) + $0002 + rel, если =1     REL     -     -     -     -     -     -
BIL BIL rel Перейти по метке, если на входе низкий логический уровень. Иначе перейти к следующей команде.     PC(PC) + $0002 + rel, если =0     REL     -     -     -     -     -     -
BMS BMS rel Перейти по метке, если бит маски I установлен. Иначе перейти к следующей команде. Условие: I = 1.   PC(PC) + $0002 + rel, если (I)=1     REL     -     -     -     -     -     -
BMC BMC rel Перейти по метке, если бит маски I сброшен. Иначе перейти к следующей команде. Условие: I = 0.   PC(PC) + $0002 + rel, если (I)=0     REL     -     -     -     -     -     -
BRSET BRSET n, opr, rel Перейти по указанному адресу, если бит n в байте данных установлен. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов $00 ¸$FF.   PC (PC) + $0003 + rel, если (Mn) = 1   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   b
BRCLR BRCLR n, opr, rel Перейти по указанному адресу, если бит n в байте данных равен 0. Иначе перейти к следующей команде. Для указания байта данных используется только прямая адресация. Диапазон адресов $00 ¸$FF.   PC (PC) + $0003 + rel, если (Mn) = 0   DIR (b0) DIR (b1) DIR (b2) DIR (b3) DIR (b4) DIR (b5) DIR (b6) DIR (b7)   -   -   -   -   -   b

 

Команды ветвления при сравнении чисел без знака

BHI BHI rel Перейти по метке, если r > m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C) & (Z) =0   REL   -   -   -   -   -   -
BHS BHS rel Перейти по метке, если r ³ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C)=0   REL   -   -   -   -   -   -
BLO BLO rel Перейти по метке, если r < m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (C)=1   REL   -   -   -   -   -   -
BLS BLS rel Перейти по метке, если r £ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel (C) Ú (Z) =1   REL   -   -   -   -   -   -

Команды ветвления при сравнении чисел со знаком

BPL BPL rel Перейти по метке, если бит знака установлен в 0, т.е число положительное. Иначе перейти к следующей команде.     PC (PC) +$0002 + rel, если (N) =0     REL     -     -     -     -     -     -
BMI BMI rel Перейти по метке, если бит знака установлен в 1, т.е число отрицательное. Иначе перейти к следующей команде.     PC (PC) +$0002 + rel, если (N) =1     REL     -     -     -     -     -     -
 
 
BGE

BGE rel

Перейти по метке, если r ³ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (N Å V)=0   REL   -   -   -   -   -   -
BGT BGT rel Перейти по метке, если r > m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (Z) & (N Å V)=0   REL   -   -   -   -   -   -
 
 
BLE

BLE rel

Перейти по метке, если r £ m. Иначе перейти к следующей команде.   PC (PC) +$0002 + rel, если (Z)Ú (NÅV)=1   REL   -   -   -   -   -   -
BLT BLT rel Перейти по метке, если r < m. Иначе перейти к следующей команде.   PC (PC)+$0002 + rel, если (NÅV)=1   REL   -   -   -   -   -   -

 

Среди команд вызова подпрограмм и обслуживания прерываний следует выделить команду программного немаскируемого прерывания SWI. Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме прерывания по ходу выполнения прикладной программы и воспользоваться подпрограммой прерывания как обычной подпрограммой. Наличие в системе команд инструкции программного прерывания SWI предоставляет такую возможность. Эта команда автоматически загружает в стек регистры CCR, ACC, X и увеличенное на 1 содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $FFFD сегмента векторов прерывания. Этот адрес может быть начальным адресом подпрограммы прерывания, или же находиться внутри нее. При выходе из подпрограммы прерывания команда RTI восстановит содержимое регистров центрального процессора, и МК продолжит выполнение прикладной программы с команды, которая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы прерывания, который начинается с произвольно выбранной инструкции внутри подпрограммы прерывания, но заканчивается обязательно командой RTI.


Табл.1.8. Команды работы со стеком вызова подпрограмм и обслуживания прерываний

Мнемокод

Операция

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

Способ адресации

Влияние на признаки

V H I N Z C
JSR JSR opr JSR opr JSR opr,X JSR opr,X JSR ,X   Вызов подпрограммы. Адрес подпрограммы хранится в ячейке памяти (ОЗУ или ПЗУ). Адрес ячейки задан используемым в команде способом адресации.   PC = PC + n, где n = 1,2,3 в зависимости от способа адресации. (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 PC адрес подпрограммы   DIR EXT IX2 IX1 IX   -   -   -   -   -   -
BSR BSR rel   Вызов подпрограммы записанной по адресу, код смещения которого указан во втором байте команды.   PC = PC +$0002 (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 PC = PC + rel, где rel - код смещения   REL   -   -   -   -   -   -
SWI   Программное прерывание.  (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 (SP) X     SP = SP - 1 (SP) A     SP = SP - 1 (SP) CCR SP = SP - 1 I = 1, установка глобальной маски прерывания PCH ($FFFC) PCH ($FFFD) Счетчик команд загружается вектором программного прерывания из ячеек памяти $FFFC и $FFFD. PC = PC +$0001 (SP) PCL SP = SP - 1 (SP) PCH SP = SP - 1 (SP) X SP = SP - 1 (SP) A SP = SP - 1 (SP) CCR SP = SP - 1 I = 1, установкаглобальноймаскипрерывания PCH ($FFFC) PCH ($FFFD)   INH   -   -   1   -   -   -
RTS Возврат из подпрограммы. Адрес возврата загружается из стека в счетчик команд. SP = SP + 1, PCH (SP) SP = SP + 1, PCL (SP)   INH   -   -   -   -   -   -
RTI Возврат из прерывания. Восстанавливается содержимое регистров CPU и счетчика команд. SP = SP + 1 CCR (SP) SP = SP + 1 A (SP) SP = SP + 1 X (SP) SP = SP + 1 PCH (SP) SP = SP + 1 PCL (SP)   INH   b   b   b   b   b   b
RSP Установить регистр указатель стека в состояние $FF. SP $FF. INH - - - - - -
PSHA Загрузить аккумулятор ACC в стек Push (A); SP (SP) -$0001 INH - - - - - -
PSHH Загрузить старший байт индексного регистра H в стек Push (H); SP (SP) -$0001 INH - - - - - -
PSHX Загрузить младший байт индексного регистра X в стек Push (X); SP (SP) -$0001 INH - - - - - -
PULA Восстановить аккумулятор ACC из стека SP (SP+$0001); Pull (A) INH - - - - - -
PULH Восстановить старший байт индексного регистра H из стека SP (SP+$0001); Pull (H) INH - - - - - -
PULX Восстановить младший байт индексного регистра X из стека SP (SP+$0001); Pull (X) INH - - - - - -

 


Дата добавления: 2018-04-04; просмотров: 353; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!