Арифметические и логические команды, битовые операции.



Однокристальная микроЭВМ

МС68НС705С8

Введение

Однокристальная микроЭВМ (далее ОЭВМ) МС68НС705С8 входит в серию М68НС05 относительно дешевых ОЭВМ, использующих КМОП-технологию, сочетающую малые размеры и высокое быстродействие с низким потреблением энергии и высокой устойчивостью к помехам.

Дополнительным преимуществом КМОП-структуры является то, что компоновка схемы полностью статична, т.е. ОЭВМ может работать при любой частоте синхронизации, меньшей, чем гарантированный максимум. Эта особенность может использоваться в целях экономии энергии, так как ее потребление возрастает с увеличением частоты синхронизации. Кроме того, для снижения потребления энергии используются еще два программно-управляемых режима работы с экономией энергии: Ожидание (WAIT) и Останов (STOP). Благодаря этим режимам ОЭВМ MC68HC705C8 находит особо широкое применение в автомобильной технике, а также в аппаратуре, питающейся от батарей.

Индекс "705С8" в названии говорит о принадлежности данной ОЭВМ к серии С, в которую входят микросхемы общего назначения с наиболее гибкими параметрами. Цифра 8 в названии говорит о том, что это наиболее быстродействующая версия, допускающая частоту внешней синхронизации 8 МГц. Цифры 705 говорят об отличии от базовой модели МС68НС05С8 в конфигурации памяти, состоящее в том, что в базовой модели предусмотрено 8К ПЗУ, а в ее модификации МС68НС705С8 ПЗУ заменено на ППЗУ с ультрафиолетовым стиранием либо однократно программируемым ППЗУ.

Кроме упомянутых ОЭВМ, серия М68НС05 включает в себя ОЭВМ с драйверами жидкокристалических, вакуумных и других дисплеев, ЦАП и АЦП, таймерами, ОЭВМ с различными конфигурациями памяти, быстродействием и другими отличительными особенностями.

 

СОДЕРЖАНИЕ

                                                                                                                               Страница

Введение......................................................................................................... 1

СОДЕРЖАНИЕ.............................................................................................. 2

1. Программная модель ОЭВМ МС68НС705С8......................................... 3

1.1 Внутренняя структура................................................................. 3

1.2 Память........................................................................................... 5

1.3 Регистры........................................................................................ 6

1.4. Режимы адресации...................................................................... 9

1.5. Набор команд............................................................................... 15

2. Аппаратные средства................................................................................. 28

2.1 Линии (порты) параллельного ввода-вывода........................... 28

2.2 Система прерываний................................................................... 29

2.3 Таймер и связанные с ним устройства....................................... 33

2.4 Последовательный интерфейс.................................................... 36

3. Специальные режимы работы.................................................................. 47

3.1 RESET............................................................................................ 47

3.2 Режимы с пониженным энергопотреблением.......................... 49

Приложение 1.

Расположение и назначение выводов МС68НС705С8.............................. 51

Приложение 2.

Типовая схема подключения МС68НС705С8............................................. 54

 

Программная модель ОЭВМ МС68НС705С8.

Внутренняя структура.

 

ОЭВМ имеет ряд отличительных особенностей в аппаратном и программном обеспечении, которые перечислены ниже:

Особенности аппаратного обеспечения:

КМОП-структура с высокой плотностью компоновки;

8-разрядная архитектура;

режимы малого потребления энергии (Ожидание, Останов, и режим сохранения данных);

24 двунаправленные линии ввода-вывода.

7 однонаправленных линий (только ввод).

2 линии ввода-вывода таймера.

тактовая частота при питании 5В - до 2.1 МГц, при питании 3В - до1 Мгц;

встроенный 16-битовый таймер;

последовательный интерфейс связи;

последовательный периферийный интерфейс;

программируемое ПЗУ с ультрафиолетовым стиранием, либо однократно программируемое ПЗУ;

возможность конфигурирования памяти;

система слежения за временем выполнения программы;

диспетчер тактовой частоты;

записанная в ПЗУ программа самозагрузки для программирования;

программируемый режим обнаружения внешних прерываний;

возможность прерываний от внешнего устройства, таймера и последовательного интерфейса;

начальная установка по включению и по внешнему сигналу;

одно питающее напряжение 3-6 В (режим сохранения данных при 2 В);

встроенный генератор тактовой частоты;

40-выводной корпус с двумя рядами выводов либо 44-выводной квадратный пластиковый корпус.

 

Особенности программного обеспечения:

совместимость снизу вверх в программном обеспечении с M146805 КМОП серией;

эффективный набор команд;

гибкость в управлении с помощью прерываний;

режимы индексной адресации для организации массивов и таблиц;

обмен с внешними устройствами, включенными в адресное пространство;

два режима низкого потребления энергии.

 

Внутренняя структура ОЭВМ представлена на рисунке 1-1. Блок центрального процессора содержит 8-битовое арифметико-логическое устройство (АЛУ), аккумулятор, индексный регистр, регистр признаков, указатель стека, программный счетчик и управляющую логику. На кристалле также расположены системы памяти: загрузочное ПЗУ, программируемое ПЗУ и ОЗУ.

В состав систем ввода-вывода входят асинхронный последовательный интерфейс связи (SCI), последовательный периферийный интерфейс (SPI) и 16-битовый программируемый таймер. Диспетчер синхронизации и таймер времени выполнения программы следят, соответственно, за наличием сигнала синхронизации на внутренней шине (в противном случае происходит RESET), а также за временем выполнения прикладной программы, которая должна периодически сбрасывать таймер, в противном случае система считает, что произошел сбой программы и формирует RESET. Тактовый генератор может функционировать как с использованием внешнего сигнала синхронизации, так и с помощью кварцевого резонатора. Схемы подключения для обоих случаев приведены в Приложении 2.

 

 

Рис. 1-1. Внутренняя структура ОЭВМ.

 

24 линии ввода-вывода объединены в порты А, В и С, которые могут быть запрограммированы либо на ввод, либо на вывод информации. 7 линий порта D работают только в режиме ввода информации, но могут программно переключаться на работу в режиме обслуживания последовательного интерфейса связи (Serial Communication Interface, далее SCI), либо в режиме последовательного периферийного интерфейса (Serial Periferal Interface, далее SPI).

Выводы TCAP и TCMP позволяют с помощью таймера реализовывать функции фиксации времени внешнего события (например, для измерения длительности внешнего импульса), и выполнения какой-либо операции в определенный момент времени (например, для формирования выходного сигнала в реальном времени).

Вывод Vpp используется для программирования ППЗУ, и при нормальной работе соединяется с выводом питания Vdd. Рассмотрим подробнее каждый из элементов ОЭВМ.

 

 

Память.

 

Память ОЭВМ MC68HC705C8 включает в себя от 176 до 304 байт ОЗУ, 240 байт ПЗУ и от 7600 до 7744 байт программируемого ПЗУ. МС68HC705C8 имеет 4 различных типа конфигурации памяти, как показано на рис. 1-2.

Рис. 1-2 Карта памяти ОЭВМ

 

Конфигурация задается записью в биты RAM0 и RAM1 регистра конфигурации OPTION, находящегося по адресу 1FDFH. При начальной установке эти биты сбрасываются. Состояние битов RAM0 и RAM1 определяет объем ОЗУ и ПЗУ, который может быть выбран из следующей таблицы:

 

RAM0 RAM1 ОЗУ байт ППЗУ байт
0 0 176 7744
1 0 208 7696
0 1 272 7648
1 1 304 7600

 

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

 

Регистры.

Как видно из структурной схемы, ОЭВМ содержит следующие регистры: 5 регистров ЦП, регистр конфигурации, программный регистр (регистр команд программирования). Назначение и структуру этих регистров мы рассмотрим в этом разделе. Кроме того, в состав ОЭВМ входят регистры портов, регистры таймера, последовательных интерфейсов и другие, все эти регистры будут рассмотрены в соответствующих разделах.

Регистр конфигурации ( OPTION ), имеющий адрес 1FDFH во встроенной памяти, используется для задания режима обнаружения внешних прерываний (IRQ), разрешения/запрета доступа к ППЗУ, а также конфигурации памяти.

 

                                                                                Регистр конфигурации

Назначение RAM0 RAM1 0 0 SEC - IRQ/ 0
Установка после RESET 0 0 0 0 * - 1 0

 

*бит SEC является ячейкой ППЗУ.

 

Ниже приводятся функции каждого бита регистра конфигурации.

RAM0-бит конфигурации памяти.

при RAM0=1 32 байта с адреса 0030H становятся равными 0. Адреса с 0020 по 002F резервируются. Таким образом, удаляется 48 байт ППЗУ, которые были расположены по этим адресам. Этот бит   может быть записан и прочитан в любой момент, таким образом, конфигурация памяти может быть изменена во время выполнения программы.

при RAM0=0 добавляется 48 байт ППЗУ по адресам 0020H-004FH.

RAM1-бит конфигурации памяти.

при RAM1=1 96 байт, начиная с адреса 0100H, становятся равными FFH. Бит может быть записан и прочитан в любой момент.

при RAM1=0-добавляется 96 байт ППЗУ c адреса 0100H.

SEC-бит блокировки загрузчика. Он показывает, откуда будет производиться начальная загрузка ОЭВМ: из ППЗУ либо из внешнего источника по последовательному интерфейсу.

при SEC=1 загрузчик блокирован. ОЭВМ работает в однокристальном режиме.

при SEC=0 загрузчик разблокирован, управление после RESET передается встроенной программе, осуществляющей начальную загрузку встроенной памяти из внешнего устройства по последовательному интерфейсу. Бит SEC физически расположен в ППЗУ и не изменяется при общем сбросе.

IRQ -режим обнаружения запросов на прерывание от внешних устройств.

при IRQ=1 вывод IRQ/ микропроцессора реагирует как на низкий уровень сигнала на этом выводе, так и на перепад из высокого уровня в низкий.

при IRQ=0 ОЭВМ реагирует только на перепад из высокого в низкий уровень на входе IRQ.

 

Регистр команд программирования (PROG), расположенный по адресу 001СН, используется для установки режима при программировании ППЗУ.

 

                                                        Регистр команд программирования

Назначение 0 0 0 0 0 LAT 0 PGM
Установка после RESET 0 0 0 0 0 0 0 0

 

LAT-бит определяет доступ к триггеру программирования ППЗУ.

при LAT=1-разрешен доступ к данным ППЗУ и адресной шине для программирования на следующем цикле записи байта.

при LAT=0-доступ запрещен.

Бит LAT может быть записан и прочитан.

PGM-разрешение/запрет программирования.

при PGM=1 напряжение программирования подается на ППЗУ.

при PGM=0 напряжение программирования отключено.

Если бит LAT сброшен, PGM не может быть установлен в 1.

 

Центральный процессор содержит 5 регистров, показанных на рис. 1-3. Регистры центрального процессора не являются частью карты памяти.

 

         

 

Рис. 3 Регистры ЦП.

 

Аккумулятор(A)-это 8-битный регистр общего назначения, в котором хранятся операнды, результаты арифметических операций, а также данные, с которыми производятся какие-либо операции. Аккумулятор также используется и для логических операций.

Индексный регистр (X)-используется либо при индексном режиме адресации, либо как вспомогательный аккумулятор. Этот регистр может быть загружен как непосредственно, так и из памяти, может быть сохранен в ячейке памяти или сравнен с ее содержимым.

Программный счетчик (PC)-это 13-битовый регистр, содержащий адрес команды, следующей за выполняемой, либо адрес операнда, входящего в код программы. Шина адреса MC68HC705C8 имеет разрядность 13 бит, что позволяет адресовать 8 Кб памяти.

Указатель стека (SP), как и программный счетчик, является 13-битным регистром, содержащим адрес следующей (свободной) ячейки стека. Во время начальной установки, либо при выполнении команды "Сброс указателя стека" (RSP), в указатель записывается адрес 00FFH. Затем это значение уменьшается по мере записи данных в стек. При обращении к памяти 7 старших бит указателя постоянно имеют значение 0000011В. Эти 7 бит добавляются к шести младшим битам для получения адреса от 00FFH до 00C0H. Подпрограммы и прерывания могут, таким образом, использовать до 64 ячеек памяти под стек. Если все ячейки заполнены, то указатель стека автоматически устанавливается в исходную позицию и записанная в стек информация теряется. Вызов подпрограммы использует 2 ячейки стека, прерывание-5 ячеек.

Регистр признаков (СС) содержит 5 флагов, устанавливающихся в зависимости от результата выполнения арифметических и других команд. Этими флагами являются: флаг полупереноса (Н), флаг отрицательного результата (N), флаг нулевого результата (Z), бит маски прерываний (I) и флаг переноса (С).

Флаг полупереноса(Н)-используется для операций с числами в двоично-десятичном коде и изменяется при операциях сложения (ADD) и сложения с флагом переноса (ADC). Бит Н устанавливается в 1 при возникновении переноса из бита 3 в бит 4.

Бит маскирования прерываний (I)-запрещает все маскируемые прерывания при установке его в 1. Бит I автоматически устанавливается при возникновении любого прерывания сразу же после сохранения регистров в стеке, но до передачи управления по вектору прерывания. Если внешнее прерывание происходит в тот момент, когда ,бит I установлен в 1, то запрос на прерывание фиксируется и обрабатывается после сброса бита I. После обслуживания прерывания, команда возврата из прерывания (RTI) восстанавливает содержимое регистров. Таким образом, после обработки прерывания I-бит сбрасывается, а при начальной установке ОЭВМ бит I устанавливается в 1 и может быть сброшен программно.

Флаг отрицательного результата (N) устанавливается в 1, если результат последней операции является отрицательным числом, и сбрасывается в противоположном случае.

Флаг нулевого результата (Z) устанавливается в 1, если результатом последней операции является 0 и сбрасывается в противоположном случае.

Флаг Перенос (заем) (С) индицирует, что произошел перенос в результате операции сложения, либо заем при вычитании. Операции сдвига и циклического сдвига происходят через этот бит, что дает возможность осуществлять операции сдвига с операндами из нескольких слов.


Режимы адресации.

ОЭВМ МС68НС705С8 использует восемь режимов адресации, определяющих способ доступа к данным, требуемым для выполнения команд. Способы адресации, поддерживаемые ОЭВМ МС68НС05С8, перечислены ниже:

  неявная;

  непосредственная;

  прямая;

  расширенная;

  индексная без смещения;

  индексная с 8-разрядным смещением;

  индексная с 16-разрядным смещением;

  относительная.

 

Команды с неявной адресацией либо не имеют операндов, либо содержат указание на операнд в мнемонике команды. К таким командам относятся, например, команды возврата из прерывания (RTI), останова (STOP) и т.д. Неявный тип адресации имеют команды работы с данными в регистрах микропроцессора, например, установить флаг переноса (SEC), увеличение числа, хранящегося в аккумуляторе, на единицу (INCA), и другие. Команды с неявной адресацией не требуют обращения к памяти и имеют длину один байт. В Таблице 1-1 приведен список команд, которые используют неявную адресацию.

Таблица 1-1. Команды, использующие неявную адресацию.

Команда Мнемоника
Арифметический сдвиг влево ASLA, ASLX
Арифметический сдвиг вправо ASRA, ASRX
Сбросить флаг переноса CLC
Сбросить флаг маскирования прерываний CLI
Обнулить CLRA, CLRX
Дополнение COMA, COMX
Декремент на 1 DECA, DECX
Инкремент на 1 INCA, INCX
Логический сдвиг влево LSLA, LSLX
Логический сдвиг вправо LSRA, LSRX
Умножение MUL
Изменить знак NEGA, NEGX
Нет операции NOP
Циклический сдвиг влево через флаг переноса ROLA, ROLX
Циклический сдвиг вправо через флаг переноса RORA, RORX
Инициализация указателя стека RSP
Возврат из прерывания RTI
Возврат из подпрограммы RTS
Установить флаг переноса SEC
Установить бит маскирования прерываний SEI
Разрешить IRQ\ и останов генератора синхроимпульсов STOP
Программное прерывание SWI
Запись содержимого аккумулятора в индексный регистр TAX
Проверить на отрицательность и равенство нулю TSTA, TSTX
Запись содержимого индексного регистра в аккумулятор TXA
Разрешить прерывание и останов процессора WAIT

 

Пример:

0200 4С              INCA                                Инкремент аккумулятора

Производимые действия:

$0200 $4C [1], [2], [3]

Объяснение:

[1]              процессор читает код операции $4C - инкремент аккумулятора;

[2], [3] процессор считывает содержимое аккумулятора, увеличивает на 1, запоминает новую величину в аккумуляторе, в соответствии с результатом устанавливает биты в регистре флагов.

 

При непосредственной адресации операнд первый операнд находится в аккумуляторе или индексном регистре, а второй является частью кода команды. Команды с непосредственной адресацией не требуют адреса памяти и имеют длину два байта. Код команды содержится в первом байте, а операнд во втором байте. Таблица 1-2 содержит команды, использующие непосредственную адресацию.

Таблица 1-2. Команды, использующие непосредственную адресацию.

Команда Мнемоника
Сложение с флагом переноса ADC
Сложение ADD
Логическое И AND
Битовое сравнение ячейки памяти с аккумулятором BIT
Сравнение аккумулятора и ячейки памяти CMP
Сравнение индексного регистра и ячейки памяти CPX
Исключающее ИЛИ ячейки памяти и аккумулятора EOR
Загрузить аккумулятор содержимым ячейки памяти LDA
Загрузить индексный регистр содержимым ячейки памяти LDX
Операция ИЛИ ORA
Вычитание с флагом переноса SBC
Вычитание SUB

 

Пример:

0200 А6 02         LDA #$02             Загрузить аккумулятор константой $02

Производимые действия:

$0200 $A6 [1]

$0201 $02 [2]

Объяснение:

[1]  ЦП читает код операции $A6 - загрузить аккумулятор константой, следующей за кодом операции

[2]  ЦП читает константу $02 по адресу $0201 и записывает ее в аккумулятор.

 

Команды с прямой адресацией имеют доступ к первым 256 ячейкам памяти и имеют длину два байта. Первым байтом является код команды, второй байт представляет собой младший байт адреса операнда. При использовании прямой адресации ЦП автоматически устанавливает в $00 старший байт адреса операнда. Исключение составляют команды BRSET и BRCLR, занимающие три байта и использующие прямую адресацию для доступа к операнду и относительную адресацию для определения точки перехода. В Таблице 1-3 представлены команды, которые используют режим прямой адресации к памяти.

 

 

Таблица 1-3. Команды, использующие прямую адресацию к памяти.

Команда Мнемоника
Сложение с флагом переноса ADC
Сложение ADD
Логическое И AND
Арифметический сдвиг влево ASL
Арифметический сдвиг вправо ASR
Сбросить бит в ячейке памяти BCLR
Битовое сравнение ячейки памяти и аккумулятора BIT
Переход, если бит n установлен BRCLR
Переход, если бит n сброшен BRSET
Сбросить бит в памяти BCLR
Установить бит в памяти BSET
Очистить CLR
Сравнение аккумулятора и ячейки памяти CMP
Дополнение COM
Сравнение индексного регистра и ячейки памяти CPX
Декремент на 1 DEC
Исключающее ИЛИ ячейки памяти и аккумулятора EOR
Инкремент на 1 INC
Безусловный переход JMP
Вызов подпрограммы JSR
Загрузить аккумулятор содержимым ячейки памяти LDA
Загрузить индексный регистр содержимым ячейки памяти LDX
Логический сдвиг влево LSL
Логический сдвиг вправо LSR
Изменение знака NEG
ИЛИ ORA
Циклический сдвиг влево через флаг переноса ROL
Циклический сдвиг вправо через флаг переноса ROR
Вычитание с флагом переноса SBC
Записать содержимое аккумулятора в ячейку памяти STA
Записать содержимое индексного регистра в ячейку памяти STX
Вычитание SUB
Проверка знака и равенства нулю TST

 

Пример:

0200 В6 50         LDA $50             Загрузить аккумулятор содержимым                                                                                ячейки с адресом $50

Производимые действия:

$0200 $B6 [1]

$0201 $50 [2] и [3]

Объяснение:

[1]  процессор читает код операции $В6 - загрузить аккумулятор, используя прямую адресацию.

[2]  процессор считывает $50 по адресу $0201. $50 интерпретируется как младший байт 16-ти разрядного адреса.

[3]  процессор считывает содержимое ячейки $0050 и помещает его в аккумулятор.

Команды, использующие расширенную адресацию, имеют доступ к любому адресу памяти и представлены в табл. 1-4. Длина таких команд составляет три байта, первый из которых является кодом операции, второй и третий байт - соответственно старшим и младшим байтом адреса операнда.

Таблица 1-4. Команды, использующие расширенный способ адресации.

Команда Мнемоника
Сложение с флагом переноса ADC
Сложение ADD
Логическое И AND
Битовое сравнение ячейки памяти и аккумулятора BIT
Сравнение аккумулятора с ячейкой памяти CMP
Сравнение индексного регистра с ячейкой памяти CPX
Исключающее ИЛИ ячейки памяти и аккумулятора EOR
Безусловный переход JMP
Вызов подпрограммы JSR
Загрузка аккумулятора содержимым ячейки памяти LDA
Загрузка индексного регистра содержимым ячейки памяти LDX
ИЛИ ORA
Вычитание с флагом переноса SBC
Записать содержимое аккумулятора в память STA
Записать содержимое индексного регистра в память STX
Вычитание SUB

 

Пример:

0200 С6 06 Е5   LDA $05E5        Загрузить аккумулятор содержимым                                                                                ячейки с адресом $05Е5

Производимые действия:

$0200 $C6 [1]

$0201 $05 [2]

$0202 $E5 [3]

Объяснение:

[1]  процессор читает код операции $C6 - загрузить аккумулятор, используя расширенную адресацию.

[2]  процессор считывает $06 по адресу $0201. $06 интерпретируется как старший байт 16-ти разрядного адреса.

[3]  процессор считывает $E5 по адресу $0202. $E5 интерпретируется как младший байт 16-ти разрядного адреса

[4]  процессор считывает содержимое ячейки $06E5 и помещает его в аккумулятор.

Индексная адресация без смещения часто используется для перемещения по таблице или хранения адреса обращения к RAM или регистру ввода/вывода. В таблице 1-5 приведен список команд, которые используют индексную адресацию без смещения. Команды, использующие индексную адресацию без смещения, имеют длину один байт и имеют доступ к переменным в пределах первых 256 ячеек памяти. Индексный регистр в этом случае содержит младший байт адреса операнда. ЦП автоматически устанавливает в $00 старший байт адреса операнда, поэтому эти команды имеют доступ к адресам от $0000 до $00FF.

 

 

Таблица1-5. Команды, использующие индексную адресацию.

Команда Мнемоника Без смещ 8 бит смещ 16 бит смещ
Сложение с флагом переноса ADC      
Сложение ADD      
Логическое И AND      
Арифметический сдвиг влево ASL      
Арифметический сдвиг вправо ASR      
Битовое сравнение ячейки памяти и аккумулятора BIT      
Очистить CLR      
Сравнение аккумулятора с ячейкой памяти CMP      
Дополнение COM      
Сравнение индексного регистра с ячейкой памяти CPX      
Декремент на 1 DEC      
Исключающее ИЛИ ячейки памяти и аккумулятора EOR      
Инкремент на 1 INC      
Безусловный переход JMP      
Вызов подпрограммы JSR      
Загрузка аккумулятора содержимым ячейки памяти LDA      
Загрузка индексного регистра содержимым ячейки памяти LDX      
Логический сдвиг влево LSL      
Логический сдвиг вправо LSR      
Изменение знака NEG      
ИЛИ ORA      
Циклический сдвиг влево через флаг переноса ROL      
Циклический сдвиг вправо через флаг переноса ROR      
Вычитание с флагом переноса SBC      
Запись содержимого аккумулятора в ячейку памяти STA      
Запись содержимого индексного регистра в ячейку памяти STX      
Вычитание SUB      
Проверка знака и равенства нулю TST      

 

Команды с индексной адресацией с 8-разрядным смещением имеют длину два байта, что позволяет обращаться к операндам в пределах первых 511 байт. Процессор складывает беззнаковый байт в индексном регистре с беззнаковым байтом, следующим за кодом операции. Полученная сумма является адресом операнда. Эта команда позволяет адресовать операнд в пределах от $0000 до $01FE. Индексную адресацию с 8-разрядным смещением удобно применять для выбора k-го элемента из n элементов таблицы. Таблица может начинаться с любого адреса в пределах первых 256 байт и занимать адреса до $01FE. Число k обычно записывается в индексный регистр. Адресом начала таблицы является байт, следующий за кодом операции. В Таблице 1-5 приведен список команд, использующих индексную адресацию с 8-разрядным смещением.

Индексную адресацию с 16-разрядным смещением удобно использовать для выбора k-го элемента в таблице из n элементов в любой точке адресного пространства. Как и в случае прямой и расширенной адресации, ассемблер фирмы Motorola определяет автоматически наиболее короткую форму индексной адресации. В Таблице 1-5 приведен список команд, которые используют индексную адресацию с 16-разрядным смещением.

Относительная адресация используется только командами перехода и битового сравнения. ЦП вычисляет адрес перехода посредством сложения байта, следующего за кодом операции, с содержимым программного счетчика, если выполняется условие перехода. Если условие перехода не выполняется, процессор переходит на выполнение следующей команды. Чтобы определить направление перехода, смещение является знаковой величиной, дополнение байта до двух дает переход в пределах от -127 до 128 байт от адреса команды, следующей за командой перехода. При использовании ассемблера фирмы Motorola программисту не требуется вычислять смещение, потому что ассемблер вычисляет требуемое смещение и проверяет длину перехода на допустимость. В Таблице 1-6 перечислены команды, которые используют относительную адресацию.

Таблица 1-6. Команды, использующие относительную адресацию.

Команда Мнемоника
Перейти, если сброшен флаг переноса BCC
Перейти, если флаг переноса установлен BCS
Перейти, если операнды равны BEQ
Перейти, если сброшен перенос из младшей тетрады BHCC
Перейти, если установлен флаг переноса из младшей тетрады BHCS
Перейти, если больше BHI
Перейти, если больше или равно BHS
Перейти, если активизирован вход запроса прерывания BIH
Перейти, если не активизирован вход запроса прерывания BIL
Перейти, если меньше BLO
Перейти, если меньше или равно BLS
Перейти, если бит маскирования прерывания сброшен BMC
Перейти, если результат отрицательный BMI
Перейти, если бит маскирования прерывания установлен BMS
Перейти, если не равно BNE
Перейти, если результат положительный BPL
Безусловный переход BRA
Перейти, если сброшен бит n BRCLR
Перейти, если установлен бит n BRSET
Нет перехода BRN
Вызов подпрограммы BSR

Набор команд.

Команды процессора можно разделить на следующие группы:

  команды пересылки данных

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

  арифметические и логические команды, битовые операции.

Рассмотрим работу команд каждой группы подробнее. При этом будем использовать следующие условные знаки;

Операнды:

         ()-содержимое регистра или ячейки памяти

         -загружается из

         -извлекается из стека

         -загружается в стек

         * -логическое умножение (И)

         +-арифметическое сложение (кроме тех случаев, где используется как                ИЛИ в логических операциях)

       х-умножение

         \-отрицание

Регистры:

         AC -аккумулятор

         CCR -регистр признаков

         Х -индексный регистр

         РС -программный счетчик

         РСН -старший байт программного счетчика

         PCL -младший байт программного счетчика

         SP -указатель стека

Память и адресация:

         М -ячейка памяти либо ее содержимое в зависимости от режима                   адресации

         Rel -относительное смещение

Биты регистра признаков:

         H, I, N, C, Z-в соответствии с главой 1.3

Состояние определенных бит до выполнения операции (n=7, 6, ... , 0):

         An -бит n аккумулятора

         Xn -бит n индексного регистра

         Mn-бит n ячейки памяти

Состояние определенных бит после выполнения операции:

         Rn-бит n результата

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

Команды пересылки данных.

 

LDA Загрузить аккумулятор содержимым ячейки памяти.

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

N R7 .

Устанавливается, если установлен старший бит аккумулятора, в противном случае сбрасывается.

Z R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

Устанавливается, если в аккумуляторе $00, иначе сбрасывается.

 

LDX Загрузить индексный регистр содержимым ячейки памяти.

Команда пересылает содержимое ячейки памяти в индексный регистр. В соответствии с записываемыми данными устанавливаются разряды регистра признаков.

N R7

Устанавливается, если установлен старший бит индексного регистра, в противном случае сбрасывается.

Z R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

Устанавливается, если в индексный регистр записано число $00, иначе сбрасывается.

STA Записать содержимое аккумулятора в ячейку памяти.

Переместить содержимое аккумулятора в ячейку памяти. Содержимое аккумулятора остается неизменным.

N R7

Устанавливается, если установлен старший бит аккумулятора, в противном случае сбрасывается.

Z R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

Устанавливается, если в аккумулятор записано число $00, иначе сбрасывается.

 

STX Записать содержимое индексного регистра в ячейку памяти.

Переместить содержимое индексного регистра в ячейку памяти. Содержимое индексного регистра не изменяется.

N R7

Устанавливается, если установлен старший бит в пересылаемом байте, в противном случае сбрасывается.

Z R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

Устанавливается, если пересылаемое число $00, иначе сбрасывается.

 

 

TAX       Записать содержимое аккумулятора в индексный регистр

X(AC)

Записать в индексный регистр содержимое аккумулятора. Содержимое аккумулятора не изменяется.

Регистр признаков не изменяется.

 

TXA    Записать содержимое индексного регистра в аккумулятор

AC(X)

Записать в аккумулятор содержимое индексного регистра. Содержимое индексного регистра не изменяется.

Регистр признаков не изменяется.

 

CLR                      Обнулить.

AC $00 или M $00 или X $00

В аккумулятор, индексный регистр или ячейку памяти записывается ноль.

N 0

Z = 1

 

RSP                       Инициализация указателя стека.

SP$00FF

Установить указатель стека на вершину стека.

Регистр признаков не изменяется.

 

 

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

Команды передачи управления включают в себя команды безусловного перехода, команды вызова подпрограммы и возврата из нее, а также команды условных переходов (ветвления) по различным условиям (состояниям флагов) и по состоянию битов. Команды ветвления вызывают переход по состоянию любого бита из первых 256 ячеек памяти. Эти команды имеют длину три байта и являются комбинацией прямой и относительной адресации. Прямо адресуется бит для тестирования, адрес которого содержится во втором байте команды. Третий байт представляет собой знаковое смещение для перехода по состоянию бита. Процессор вычисляет адрес перехода, складывая содержимое программного счетчика и третьего байта команды, если условие перехода выполняется. Условие тестирования битов содержится в коде операции. Диапазон перехода - от -128 до +127 байт от адреса следующей за командой ячейки памяти. Процессор, кроме того, записывает тестируемый бит в бит переноса регистра условий (СС).

 

BRA Безусловный переход.

Команда осуществляет безусловный переход по адресу, вычисляемому по приведенной ниже формуле, где Rel - относительное смещение, которое содержится в последнем байте кода команды.

PC (PC)+$0002+Rel.

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

Регистр признаков не изменяется.

BRN Нет перехода.

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

Регистр признаков не изменяется.

 

BRCLR     Переход, если бит n ячейки памяти равен 0.

PC (PC)+$0003+Rel      Если бит n ячейки M равен нулю.

Команда проверяет бит n ячейки памяти M на равенство нулю. Переход осуществляется, если проверяемый бит равен нулю. M может быть в адресном пространстве RAM или регистров ввода/вывода в пределах от $0000 до $00FF (таким образом используется прямая адресация). Бит C регистра признаков устанавливается в состояние тестируемого бита.

C      Устанавливается, если Mn=1, иначе сбрасывается.

 

BRSET     Переход, если бит n ячейки памяти равен 1.

PC (PC)+$0003+Rel       Если бит n ячейки M равен единице.

Команда проверяет бит n ячейки памяти M на равенство единице. Переход осуществляется, если проверяемый бит равен единице. M может быть в адресном пространстве RAM или регистров ввода/вывода в пределах от $0000 до $00FF (таким обрезом используется прямая адресация). Бит C регистра признаков устанавливается в состояние тестируемого бита.

C      Устанавливается, если Mn=1, иначе сбрасывается.

BHI Переход, если больше.

PC(PC)+$0002+Rel Если (C)+(Z)=0

т.е. если (AC)>(M) (беззнаковые двоичные числа)

Возникает переход, если оба бита C и Z регистра признаков сброшены в ноль. Когда команда BHI используется сразу после выполнения команд CMP или SUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, больше, чем беззнаковое число в ячейке памяти M.

Регистр признаков не изменяется.

BLS Переход , если меньше или равно.

PC(PC)+$0002+Rel Если [(C)+(Z)]=1

т.е. если (AC)(M) (беззнаковые двоичные числа)

Возникает переход, если бит C или Z регистра признаков установлен в единицу. Когда команда BLS используется сразу после выполнения команд CMP или SUB, возникает переход, если беззнаковое число, содержащееся в аккумуляторе, меньше или равно беззнакового числа в ячейке памяти M.

Регистр признаков не изменяется.

 

BCC Переход, если сброшен флаг переноса.

PC(PC)+$0002+Rel Если (C)=0

Команда BCC является полным аналогом команды BHS. Проверяется состояние бита C регистра признаков. Переход возникает, если бит С сброшен.

Регистр признаков не изменяется.

BHS Переход, если больше или равно.

Команда BHS является полным аналогом команды BCC. Мнемонику BCC принято использовать после команд CMP и SUB, так как переход в данном случае возникает, если беззнаковое число в аккумуляторе больше или равно беззнакового числа, содержащегося в ячейке памяти M.

BCS Переход, если установлен флаг переноса.

PC(PC)+$0002+Rel Если (C)=-1

Команда BCS является полным аналогом команды BLO. Тестируется состояние бита C регистра признаков. Если бит C установлен в единицу, возникает переход.

Регистр признаков не изменяется.

BLO Переход, если меньше.

PC(PC)+@0002+Rel      Если (C)=1

т.е. если (ACCX)<(M)       (беззнаковые двоичные числа)

Команда BLO является полным аналогом команды BCS. Если команда BLO выполняется сразу после выполнения команд CMP или SUB, переход возникает, если беззнаковое число, содержащееся в аккумуляторе, меньше беззнакового числа, содержащегося в ячейке памяти M.

Регистр условий не изменяется.

BNE Переход, если не равно.

PC(PC)+$0002+Rel Если (Z)=0

Тестируется состояние бита Z регистра условий. Возникает переход, если бит Z сброшен. Следуя после сравнения или вычитания, BNE вызовет переход, если аргументы не равны.

Регистр условий не изменяется.

BEQ Переход, если равно.

PC(PC)+$0002+Rel Если (Z)=1

Тестируется состояние бита Z регистра условий. Возникает переход, если бит Z установлен. Следуя после сравнения или вычитания, BEQ вызовет переход, если аргументы равны.

Регистр условий не изменяется.

BHCC       Переход, если сброшен флаг переноса из младшей тетрады.

PC(PC)+$0002+Rel Если (H)=0

Тестируется состояние бита H регистра условий. Возникает переход, если бит H сброшен. Команда используется при работе с числами в BCD формате.

Регистр условий не изменяется.

BHCS        Переход, если установлен флаг переноса из младшей тетрады.

PC(PC)+$0002+Rel Если (H)=1

Тестируется состояние бита H регистра условий. Возникает переход, если бит H установлен. Команды используется при работе с числами в BCD формате.

Регистр условий не изменяется.

BPL Переход, если плюс.

PC(PC)+$0002+Rel Если (N)=0

Тестируется состояние бита N регистра условий. Возникает переход, если бит N сброшен.

Регистр условий не изменяется.

BMI Переход, если минус.

PC(PC)+$0002+Rel Если (N)=1

Тестируется состояние бита N регистра условий. Возникает переход, если бит N установлен.

Регистр условий не изменяется.

BMC Переход, если бит маскирования прерываний сброшен.

PC(PC)+$0002+Rel Если (I)=0

Тестируется состояние бита I регистра условий. Возникает переход, если бит I сброшен (то есть прерывания разрешения).

Регистр условий не изменяется.

BMS Переход, если бит маскирования прерываний установлен.

PC(PC)+$0002+Rel Если (I)=1

Тестируется состояние бита I регистра условий. Возникает переход, если бит I установлен (то есть прерывания запрещены).

Регистр условий не изменяется.

BIL Переход, если вход запроса прерывания в 0.

PC(PC)+$0002+Rel Если IRQ\=0

Тестируется состояние выводы микропроцессора запроса внешнего прерывания. Возникает переход, если на входе нулевой логический уровень.

Регистр условий не изменяется.

BIH Переход, если вход запроса прерывания в 1.

PC(PC)+$0002+Rel Если IRQ\=1

Тестируется состояние выводы микропроцессора запроса внешнего прерывания. Возникает переход, если на входе логическая единица.

Регистр условий не изменяется.

BSR Переход на подпрограмму.

PC(PC)+$0002    В PC адрес возврата

(PCL) Сохраняется младший байт адреса возврата в стек

SP(SP)-$0001

(PCH) Сохраняется старший байт адреса возврата в стек

SP(SP)-$0001

PC(PC)+Rel В PC загружается адрес подпрограммы

Программный счетчик увеличивается на 2 от адреса кода операции BSR, таким образом в PC оказывается адрес следующей за BSR команды, который является адресом возврата из подпрограммы. Младший байт программного счетчика помещается в стек. Указатель стека уменьшается на 1. Затем старший байт программного счетчика помешается в стек, указатель стека уменьшается на 1. Производится переход по адресу, определяемому смещением.

Регистр условий не изменяется.

JMP Длинный безусловный переход.

PCЭффективный адрес

Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.

JSR Длинный вызов подпрограммы.

PC(PC)+n n=1,2,3 взависимости от режима адресации

(PCL); SP SP-$0001     Младший байт адреса возврата в стек

(PCH); SP SP-$0001    Старший байт адреса возврата в стек

PCЭффективный адрес Загрузить в PC адрес подпрограммы

Программный счетчик увеличивается на n, то есть до адреса следующей за JSR команды. Затем PC сохраняется в стеке. Не используемые биты программного счетчика сохраняются как единицы. Указатель стека указывает на следующую свободную ячейку памяти. Осуществляется переход по эффективному адресу. Эффективный адрес вычисляется в соответствии с правилами для расширенного, прямого и индексного режимов адресации.

Регистр условий не изменяется.

SWI Программное прерывание

(PC)(PC)+$0001             В PC адрес возврата

(PCL); SP(SP)-$0001      В стек младший байт адреса возврата

(PCH); SP(SP)-$0001     В стек старший байт адреса возврата

(X); SP(SP)-$0001          В стек индексный регистр

(AC); SP(SP)-$0001        В стек аккумулятор

(CCR); SP(SP)-$0001     В стек регистр признаков

I бит 1

PCH($xFFC)                   Вектор прерывания (x=1 или 3, в зависимости от    версии HC05)

PCL($xFFD)

Содержимое программного счетчика увеличивается на единицу. Программный счетчик, индексный регистр, аккумулятор и регистр признаков помещаются в стек. Содержимое указателя стека уменьшается на единицу каждый раз после того, как в стек помещен байт. Бит маскирования прерываний устанавливается в единицу. В программный счетчик записывается адрес, хранящийся в векторе прерывания SWI (адрес расположен по адресу n-0002 и n-0003, где n-адрес, соответствующий единичному состоянию всех адресных выходов миропроцессора.). Команда SWI не маскируется установкой бита I регистра признаков.

I                                                          Устанавливается в 1.

RTI      Возврат из подпрограммы обработки прерывания

SP(SP)+$0001 ССR          CCR из стека

SP(SP)+$0001 AC             AC из стека

SP(SP)+$0001 X               X из стека

SP(SP)+$0001 PCH          PCH из стека

SP(SP)+$0001 PCL           PCL из стека

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

Биты регистра признаков принимают значения в соответствии с байтом, взятым из стека.

RTS          Возврат из подпрограммы

SP(SP)+$0001 PCH                       PCH из стека

SP(SP)+$0001 PCL                        PCL из стека

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

Регистр признаков не изменяется.

Арифметические и логические команды, битовые операции.

ADD        Сложить содержимое ячейки памяти с аккумулятором

AC(AC)+(M)

Сложить содержимое M и содержимое AC и разместить в AC.

H    A3*M3+M3*R3\+R3\*A3

       Устанавливается, если имеет место перенос из бита 3, иначе сбрасывается.

N    R7

       Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z    R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

       Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C    A7*M7+M7*R7\+R7\*A7

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

ADC         Сложить содержимое ячейки памяти с аккумулятором
                            и флагом переноса.

AC(AC)+(M)+(C)

Сложить содержимое бита C и сумму содержимого M и содержимого AC и разместить в AC.

H  A3*M3+M3*R3\+R3\*A3

     Устанавливается, если имеет место перенос из бита 3, иначе сбрасывается.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C  A7*M7+M7*R7\+R7\*A7

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

SUB         Вычесть.

AC(AC)-(M)

Вычесть содержимое M из AC и разместить результат в AC.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C  A7*M7+M7*R7\+R7\*A7

     Устанавливается, если абсолютная величина содержимого M больше абсолютной величины аккумулятора, иначе сбрасывается.

SBC         Вычесть содержимое ячейки памяти из аккумуляторе
                            с флагом заема
.

AC(AC)-(M)-(C)

Вычесть содержимое M из AC и разместить результат в AC.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C  A7*M7+M7*R7\+R7\*A7

     Устанавливается, если абсолютная величина одержимого M, плюс предыдущее значение C, больше абсолютной величины аккумулятора, иначе                          сбрасывается.

AND        Операция И содержимого ячейки памяти и аккумулятора.

AC(AC)*(M)

Произвести логическое умножение между содержимым аккумулятора и содержимым M и разместить результата в AC. (С каждым битом аккумулятора и соответствующим битом M производится операция логического умножения).

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

ORA         Операция ИЛИ содержимого ячейки памяти и аккумулятора.

AC(AC)+(M)

Произвести логическое сложение между содержимым аккумулятора и содержимым M и разместить результата в AC. (С каждый бит аккумулятора и соответствующим битом M производится операция логического сложения).

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены, иначе сбрасывается.

CMP        Арифметическое сравнение аккумулятора и ячейки памяти.

(AC)-(M)

Сравнить содержимое M и AC и установить биты в регистре признаков. Содержимое AC и M не изменяется.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C  A7*M7+M7*R7\+R7\*A7

     Устанавливается, если абсолютная величина содержимого M больше абсолютной величины аккумулятора, иначе сбрасывается.

CPX         Арифметическое сравнение индексного регистра и ячейки памяти.

(X)-(M)

Сравнить содержимое M и X и установить биты в регистре признаков. Содержимое X и M не изменяется.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все битв результата сброшены. Иначе сбрасывается.

C  A7*M7+M7*R7\+R7\*A7

     Устанавливается, если абсолютная величина одержимого M больше абсолютной величины регистра X, иначе сбрасывается.

BIT           Поразрядное сравнение ячейки памяти с аккумулятором.

(ACCX)*(M)

Производит сравнение содержимого AC и M посредством операции логическое И и устанавливает соответственно результату биты в регистре признаков. Ни содержимое AC, ни содержимое M не изменяются

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

MUL        Умножение.

X : A=X x A

Умножается 8-битное число в индексном регистре X на 8-битное число в аккумуляторе. 16-битный результат помещается в индексный регистр и аккумулятор. В индексном регистре старшие 8 бит результата, в аккумуляторе младшие 8 бит.

H  0 (сбрасывается)

C  0 (сбрасывается)

 

INC                       Инкремент на 1

AC(AC)+$01 или M(M)+$01 или X(X)+$01

Добавляет единицу к содержимому аккумулятора, индексного регистра или ячейки памяти. Биты N и Z регистра признаков устанавливаются или сбрасываются в соответствии с результатом. Бит C регистра признаков не изменяются, поэтому после команды INC имеют смысл только следующие команды перехода BEQ, BNE, BPL и BMI.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

DEC                     Декремент на 1

AC(AC)-$01 или M(M)-$01 или X(X)-$01

Вычитает единицу из содержимого аккумулятора, индексного регистра или ячейки памяти. Биты N и Z регистра признаков устанавливаются или сбрасываются в соответствии с результатом. Бит C регистра признаков не изменяются, поэтому после команды DEC имеют смысл только следующие команды перехода:

BEQ, BNE, BPL и BMI.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

COM                    Дополнение.

AC(AC\)=$FF-(AC) или M(M\)=$FF-(M) или XX\=$FF-(X)

Содержимое аккумулятора, индексного регистра или ячейки памяти заменяется на его дополнение до 1. Каждый бит заменяется на его дополнение, то есть инвертируется.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  1

     Устанавливается

NEG                     Дополнение до двух (инверсия знака).

AC(AC) или M(M) или XX

Содержимое аккумулятора, индексного регистра или ячейки памяти заменяется на его дополнение до 2. Заметим, что величина $80 не изменяется.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  R7+R6+R5+R3+R2+R1+R0

     Устанавливается во всех случаях за исключением числа $00.

ROL                      Циклический сдвиг влево через флаг переноса

Cb7-...-b0C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 0 загружается содержимым бита С. Бит C загружается содержимым старшего бита аккумулятора, индексного регистра или ячейки памяти.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  b7

     Устанавливается, если перед сдвигом был установлен старший бит, иначе сбрасывается.

ROR                     Циклический сдвиг вправо через флаг переноса

Cb7-...-b0C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются вправо. Бит 7 загружается содержимым бита С. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  b0

     Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.

LSL                       Логический сдвиг влево

Cb7-...-b00

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 0 загружается нулем. Бит C загружается содержимым старшего бита аккумулятора, индексного регистра или ячейки памяти.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  b7

     Устанавливается, если перед сдвигом был установлен старший бит, иначе сбрасывается.

LSR                      Логический сдвиг вправо.

0b7-...-b0C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются вправо. Бит 7 загружается нулем. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  b0

     Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.

ASR                      Арифметический сдвиг вправо

b7-...-b0C

Все биты аккумулятора, индексного регистра или ячейки памяти сдвигаются влево. Бит 7 остается неизменным. Бит C загружается содержимым младшего бита аккумулятора, индексного регистра или ячейки памяти.

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

C  b0

     Устанавливается, если перед сдвигом был установлен младший бит, иначе сбрасывается.

TST                       Проверка на отрицательность и равенство нулю

(AC)-$00 или (X)-$00 или (M)-$00

Установить биты N и Z в регистре признаков в соответствии с содержимым аккумулятора, индексного регистра или ячейки памяти. Содержимое аккумулятора, индексного регистра или ячейки памяти не изменяется.

 

N  R7

     Устанавливается, если старший бит результата установлен, иначе сбрасывается.

Z  R7\*R6\*R5\*R4\*R3\*R2\*R1\*R0\

     Устанавливается, если все биты результата сброшены. Иначе сбрасывается.

BSET n (n=0...7)                          Установить бит n

Mn=1

Устанавливается в 1 бит n (n=7,6,5,4,3,2,1,0) ячейки памяти M, другие биты не изменяются. Ячейкой памяти может быть ОЗУ или I/O регистр от адреса $0000 до $00FF (то есть используется прямая адресация).

Регистр признаков не изменяется.

BCLR n (n=0...7)                         Сбросить бит n

Mn=0

Сбрасывается бит n (n=7,6,5,4,3,2,1,0) ячейки памяти M, другие биты не изменяются. Ячейкой памяти может быть ОЗУ или I/O регистр от адреса $0000 до $00FF (то есть используется прямая адресация).

Регистр признаков не изменяется.

SEC                                                   Установить флаг переноса

C бит 1

Установить бит C регистра признаков. Команда SEC может применятся для предустановки бита C перед использованием команд сдвига.

Флаг C устанавливается в 1.

CLC                                                  Сбросить флаг переноса

C бит 0

Сбрасывается бит C регистра признаков. Команда SEC может применятся для предустановки бита C перед использованием команд сдвига.

Флаг C сбрасывается.

SEI                                                    Установить флаг маскирования прерываний.

I бит1

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

Флаг I устанавливается.

 

 

CLI                                                    Сбросить флаг маскирования прерываний

I бит0

Сбрасывается бит маскирования прерываний в регистре признаков. Когда бит C сброшен, прерывания разрешены. На очистку бита требуется задержка на один цикл, таким образом, если прерывания до выполнения команды CLI были запрещены, то следующая за CLI команда всегда выполняется.

Флаг I сбрасывается.

 

 

Прочие команды.

 

 

NOP                                       Нет операции

Эта однобайтная команда вызывает только увеличение программного счетчика на единицу. Другие регистры не изменяются.

 

STOP                                                Останов

Выполнение команды приводит к уменьшению энергопотребления.

1) Сбрасывается предделитель таймера;

2) запрещаются прерывания от таймера;

3) сбрасывается флаг прерывания от таймера;

4) разрешаются внешние прерывания;

5) останавливается тактовый генератор.

Когда поступает внешний сигнал RESET\ или IRQ\, включается тактовый генератор, после задержки на инициализацию, которая длится 1920 циклов процессора, защелкиваются вектор прерывания и вектор начальной установки, и запускается на выполнение процедура обработки RESET или IRQ, в зависимости от поданного сигнала.

Флаг I сбрасывается.

Более подробно о режиме STOP см. раздел "Специальные режимы работы".

WAIT                                                Ожидание

Выполнение команды приводит к уменьшению энергопотребления. Таймер, делитель таймера и другая встроенная периферия продолжают работать, так как они являются потенциальными источниками прерываний. WAIT разрешает прерывания сбросом бита I регистра признаков и останавливает цепи синхронизации процессора.

Когда поступает внешний сигнал RESET\, IRQ\ или прерывания от встроенной периферии, включается цепи синхронизации процессора, защелкиваются вектор прерывания и вектор начальной установки, и запускается на выполнение процедура, взвисимости от поданного сигнала.

Более подробно о режиме WAIT см. раздел "Специальные режимы работы".

 

Аппаратные средства


Дата добавления: 2019-07-15; просмотров: 241; Мы поможем в написании вашей работы!

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






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