ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8 М.Гладштейн, г. Рыбинск Предлагаемый вниманию читателя цикл статей является продол¬жением ранее опубликованных материалов [1-8], подготовленных ав¬тором на основе фирменного руководства пользователя [9]. Часть 1. Система команд микроконтроллеров Z8 Математические возможности микроконтроллеров (МК) характери¬зуются системой команд. В МК использован двухадресный принцип построения команд, что позволяет сократить количество требуемых пересылок операндов. Первый операнд после выполнения команды ста¬новится результатом и называется операндом-получателем ( Destina¬tion Operand ), а второй - сохраняет свое значение и называется операндом-источником ( Source Operand ). Первый в описании систе¬мы команд обозначен аббревиатурой dst, а второй - src. Код любой команды МК содержит код операции (КОП), определяю¬щий операцию команды и до двух адресных полей. Способы трактовки кодов в адресном поле называются способами адресации операндов. Прежде чем рассматривать набор команд, необходимо более подробно рассмотреть используемые способы адресации операндов. 1.1. Способы адресации операндов В МК Z8 использовано шесть основных способов адресации операндов : • регистровая ( Register ); • косвенная регистровая ( Indirect Register ); • индексная ( Indexed ); • прямая ( Direct ); • относительная ( Relative ); • непосредственная ( Immediate ). Кроме того, регистровая и косвенная регистровая адресация имеют ряд модификаций - они могут использовать сокращенный 4-бит¬ный адрес рабочего регистра, полный 8-битный адрес регистра, сок¬ращенный 4-битный адрес рабочей пары регистров, полный 8-битный адрес регистровой пары. При использовании пар регистров использу¬ется четное выравнивание, т.е. допустимые адреса - четные числа. Шестнадцатибитные операнды занимают в регистровом файле пару ре¬гистров, причем по четному адресу размещается старший байт. Все способы адресации операндов в системе команд МК Z8 при¬ведены в табл.1. В таблице указаны условные обозначения способов адресации, используемые в дальнейшем в таблице команд, наименова¬ние способа адресации, обозначение операнда на языке ассемблера, диапазон значений адреса и номер рисунка, на котором дана графи¬ческая интерпретация способа адресации. Следует отметить, что адреса типа R, RR, IR, IRR предполага¬ют использование как полного 8-битного адреса регистра, так и сокращенного 4-битного. В последнем случае адрес размещается в младшей тетраде адресного байта, а в старшей тетраде указывается код 1110B (EH) : E dst/src Поэтому обращение к регистрам рабочей группы E СРФ возможно только с помощью рабочей регистровой адресации [2]. Ниже рассмотрены все варианты адресации, используемые в сис¬теме команд. а) Рабочая регистровая адресация (рис.1). Короткий 4-битный адрес в команде указывает адрес регистра в ра¬бочей или расширенной группе. Активная группа определяется состо¬янием указателя регистров RP [2]. б) Регистровая адресация (рис.2). Полный 8-битный адрес в команде указывает местонахождение операн¬да в регистровом файле. в) Рабочая регистровая адресация к паре (рис.3). Короткий 4-битный адрес в команде ( должен быть четным ) указыва¬ет на регистр рабочей группы, в котором находится старший байт операнда. Младший байт находится в регистре, адрес которого на 1 больше. Активная группа регистров определяется состоянием указа¬теля регистров RP. г) Регистровая адресация к паре (рис.4). Полный 8-битный адрес в команде ( должен быть четным ) указывает на регистр, в котором находится старший байт операнда. Младший байт находится в регистре, адрес которого на 1 больше. д) Косвенная рабочая регистровая адресация (рис.5). Короткий 4-битный адрес в команде указывает адрес регистра в ра¬бочей группе, где находится адрес операнда. Активная группа опре¬деляется указателем регистров RP. е) Косвенная регистровая адресация (рис.6). Полный 8-битный адрес регистра в команде указывает местонахожде¬ние в регистровом файле адреса операнда. ж) Косвенная адресация к памяти программ/данных через рабо¬чую регистровую пару (рис.7). Короткий 4-битный адрес в команде указывает на рабочую пару ре¬гистров в регистровом файле (должен быть четным), где находится 16-битный адрес памяти программ/данных, по которому размещен опе¬ранд. Активная рабочая группа определяется указателем регистров RP. з) Косвенная адресация к памяти программ/данных через ре¬гистровую пару (рис.8). Полный 8-битный адрес в команде указывает на регистровую пару в регистровом файле (должен быть четным), где находится 16-битный адрес памяти программ/данных, по которому размещен операнд. и) Индексная адресация (рис.9). В команде указывается 4-битный адрес индексного регистра и 8-бит¬ный базовый адрес. Адрес операнда определяется МК как сумма базо¬вого адреса и содержимого индексного регистра. к) Прямая адресация к памяти программ (рис.10). В команде прямо указан 16-битный адрес (два байта) памяти прог¬рамм. л) Относительная адресация к памяти программ (рис.11). В команде указано 8-битное смещение со знаком (+127 ... -127) от-носительно текущего состояния программного счетчика РС (это адрес следующей команды). Исполнительный адрес вычисляется МК как сумма содержимого РС и смещения. м) Непосредственная адресация (рис.1.12). Число, указанное в команде, используется МК как операнд. 1.2. Флаги процессора Флаговый регистр FLAGS (FCH) содержит информацию о текущем состоянии процессора. Флаги и их расположение в регистре прведены на рис.13. Состояние флагового регистра после сброса является неопределенным. Флаговый регистр FLAGS содержит 6 флагов состояния, информа¬ция в которых устанавливается в результате работы процессора. Че¬тыре флага (C, V, Z, S) используются командами условного перехо¬да. Два флага (H и D) используются командой десятичной коррекции. Оставшиеся два бита могут быть использованы как флаги пользовате¬ля (F1 и F2). Ниже подробно рассмотрено назначение каждого из ос¬новных флагов МК Z8. 1.2.1. Флаг переноса C (Carry Flag) Флаг переноса устанавливается в 1, если в результате арифме¬тической операции генерируется “перенос из” или “заем в” старший 7-ой бит результата. В противном случае флаг С очищается в 0. В процессе выполнения команд циклического или арифметическо¬го сдвига флаг переноса С содержит последний бит, выдвинутый из указанного в команде регистра. Команды могут устанавливать, сбрасывать или инвертировать (дополнять) флаг переноса. 1.2.2. Флаг нуля Z (Zero Flag) Если в результате арифметической или логической операции по¬лучается нулевой результат, то флаг Z устанавливается в 1, в про¬тивном случае флаг Z очищается в 0. Если результат команды проверки бита в регистре равен 00Н, то флаг нуля устанавливается в 1, в противном случае - очищается в 0. Если результат выполнения команды циклического или арифмети¬ческого сдвига равен 00Н, флаг Z устанавливается в 1, иначе - сбрасывается в 0. 1.2.3. Флаг знака S (Sign Flag) Флаг знака хранит значение старшего бита результата текущей арифметической или логической операции, операции циклического или арифметического сдвига. Для производства арифметических операций над числами со зна¬ком в МК используется представление информации в дополнительном коде. Положительное число при этом идентифицируется 0 в старшем значащем разряде и, соответственно, значение флага знака также равно 0. Отрицательное число идентифицируется 1 в старшем знача¬щем разряде и, соответственно, флаг S также будет равен 1. 1.2.4. Флаг переполнения V (Overflow Flag) Для знаковых арифметических операций, операций циклического и арифметического сдвигов флаг переполнения V устанавливается в 1, если результат больше максимально возможного положительного числа (+127) или меньше минимально возможного отрицательного чис¬ла (-128), представленного 8-битным дополнительным кодом. Флаг V устанавливается в 0, если переполнение отсутствует. В результате поразрядных логических операций флаг V всегда сбрасывается в 0. 1.2.5. Флаг десятичной коррекции D (Decimal Adjust Flag) Флаг десятичной коррекции D используется для двоично-деся¬тичной арифметики BCD (Binary Coded Decimal). Поскольку алгоритм десятичной коррекции различен для сложения и вычитания, этот флаг сохраняет информацию о последней выполненной команде, для после¬дующей команды десятичной коррекции DA. После выполнения операции вычитания флаг D устанавливается в 1, а после операции сложения - очищается в 0. 1.2.6. Флаг полупереноса H (Half Carry Flag) Флаг полупереноса H устанавливается в 1, когда при сложении чисел генерируется перенос из 3-его бита или при вычитании гене¬рируется заем в 3-ий бит. Флаг H используется командой десятичной коррекции DA. Значения всех флагов изменяются командой IRET при восстанов¬лении из стека состояния флагового регистра. Команды WDH и WDT устанавливают флаги Z, S и V в неопределенное состояние. Команда SWAP устанавливает в неопределенное состояние флаги C и V. 1.3. Набор команд Команды микроконтроллеров Z8 функционально могут быть разде¬лены на восемь групп: • команды загрузки; • арифметические команды; • логические команды; • команды управления программой; • команды манипуляции битами; • команды пересылки блоков; • команды сдвигов; • команды управления процессором. 1.3.1. Описание системы команд В [1] приведено краткое описание системы команд микроконт¬роллеров, причем для каждой команды дано мнемоническое обозначе¬ние, принятое в языке ассемблера, указан состав операндов и смысл команды на английском языке ( для понимания происхождения мнемо¬ники как аббревиатуры ) и на русском языке. Аббревиатура “cc” в колонке операндов команд управления программой означает код усло¬вия ( condition ), а аббревиатура “r” - любой регистр из рабочей группы ( register ). 1.3.2. Условия ветвления программы Команды переходов JP и JR обеспечивают ветвление программы по различным условиям. В качестве условий используются состояния флагов C,Z,S и V, а также их логические функции. Набор допустимых для языка ассемблера условий с указанием мнемонического обозначе¬ния (cc), значения, соответствующего состояния флагов и шестнад¬цатеричного кода условия приведен в табл.2. Набор условий предус¬матривает ветвление по состояниям отдельных флагов, а также по всем возможным соотношениям между целыми числами со знаком и меж¬ду беззнаковыми целыми числами. 1.3.3. Коды команд и операции Справочные данные по системе команд сведены в табл.3. Для каждой команды приведены мнемоника команды и описание операции (колонка “Команда и операция”), способы адресации операндов (ко¬лонка “Адрес”), код операции (колонка “КОП”), изменение состояния флагов (колонка “Флаги”), количество байтов в команде (колонка “Байт”) и количество тактов выполнения (колонка “Такт”). Знак “<-“, используемый в описании операции, соответствует присвоению значения операнду-приемнику. Знак @ - это префикс кос¬венной адресации, а обозначение типа “Addr(n)” - означает бит Dn операнда с адресом Addr(n=0...7). В колонке кодов операции “r” - это шестнадцатеричный номер регистра рабочей группы (0...F), а “с” - шестнадцатеричный код условия (см. табл.2). Изменение состояния флагов в колонке “Флаги” указывается с помощью условных обозначений, приведенных в табл.4. Система команд МК Z8 позволяет эффективно кодировать разно¬образные алгоритмы автоматического контроля и управления. ЛИТЕРАТУРА 1. Гладштейн М.А. Z8 - микроконтроллеры широкого применения. • Радио, 1997, N5, с.27 - 29. 2. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 1. Адресное пространство микроконтроллеров.- Радио, 1999, N 7. 3. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 2. Синхронизация, сброс и сторожевой таймер.- Радио, 1999, N 8. 4. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 3. Порты ввода/вывода.- Радио, 1999, N 9. 5. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 4. Таймеры/счетчики.- Радио, 1999, N 10. 6. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 5. Прерывания.- Радио, 1999, N 11. 7. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 6. Режимы уменьшенного энергопотребления.- Радио, 1999, N 12. 8. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 7. Интерфейс.- Радио, 2000, N 1. 9. Z8 Microcontrollers. User’s Manual. - Zilog Inc., 1995.
Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов!
Подробно тут!