Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > HC08 > ASM

реклама

 




Мероприятия:




Система команд M68HC08

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

Используемые обозначения

Ниже приведены обозначения, используемые в данном разделе при описании команд .
Операторы
() = Содержимое регистра или ячейки памяти указывается в круглых скобках
<-- = Загрузить
Э = Извлечь из стека
Ї = Занести в стек
& = Логическое AND
| = Логическое OR
x = Перемножить
ё = Разделить
: = Связать в цепочку
+ = Сложить
- = Инвертировать (выполнить дополнение до двух)
" = Расширение символа
 
Регистры CPU
A = Аккумулятор
CCR = Регистр кодов признаков
H = Индексный регистр, старшие 8 разрядов (старший байт)
X = Индексный регистр, младшие 8 разрядов (младший байт)
PC = Счетчик команд
PCH = Счетчик команд, старшие 8 разрядов (старший байт)
PCL = Счетчик команд, младшие 8 разрядов (младший байт)
SP = Указатель стека
 
Память и адресация
M = Ячейка памяти или абсолютные данные, в зависимости от режима адресации
rel = Относительное смещение (т.е. дополнение до двух числа, находящегося в последнем байте машинного кода, связанного с командой перехода
 
Биты регистра кодов признаков (CCR)
V = Указатель переполнения дополнения до двух, бит 7
H = Полуперенос, бит 4
I = Маска прерывания, бит 3
N = Указатель отрицательного значения, бит 2
Z = Указатель нулевого значения, бит 1
C = Перенос/заем, бит 0
 
Состояния битов ПЕРЕД выполнением команды (n = 7, 6, 5, ... 0)
Mn = Бит n ячейки памяти, используемый при операции
An = Бит n аккумулятора
Hn = Бит n индексного регистра H
Xn = Бит n индексного регистра X
 
Состояния битов ПОСЛЕ выполнением команды
- = Над битом действия не производились
0 = Бит переведен в состояние 0
1 = Бит переведен в состояние 1
b = бит установлен или очищен, в зависимости от результата операции
 
Представление машинных кодов
dd = Младшие 8 битов (младший байт) прямого адреса $0000-$00FF (старший байт в состоянии $00)
ee = Старшие 8 битов (старший байт) 16-разрядного смещения
ff = Младшие 8 битов (младший байт) 16-разрядного или 8-разрядного смещения
ii = Один байт непосредственных данных
hh = Старший байт 16-разрядного расширенного адреса
ll = Младший байт 16-разрядного расширенного адреса
rr = Относительное смещение
 
Представление исходных форм
opr = Операнд (один или два байта, в зависимости от режима адресации)
rel = Относительное смещение, используемое в командах переходов и манипулирования битами
 
Режимы адресации
INH = Неявный (без операнда)
IMM = 8-разрядный непосредственный
DIR = 8-разрядный прямой
EXT = 16-разрядный расширенный
IX = 16-разрядный индексный без смещения
IX+ = 16-разрядный индексный без смещения с постинкрементом
IX1 = 16-разрядный индексный с 8-разрядным смещением
IX1+ = 16-разрядный индексный с 8-разрядным смещением с постинкрементом
IX2 = 16-разрядный индексный с 16-разрядным смещением
REL = Относительный с 8-разрядным смещением
DD = Прямого источника в прямой пункт назначения
IMD = Непосредственного в прямой
IX+D = 16-разрядного индексированного, с постинкрементом, источника в прямой пункт назначения
DIX+ = Прямого источника в 16-разрядный индексированный, с постинкрементом, пункт назначения
SP1 = По указателю стека с 8-разрядным смещением
SP2 = По указателю стека с 16-разрядным смещением

Соглашения по терминологии

  • Установить - относится к установке бита (битов) в логическое состояние 1
  • Очистить - относится к установке бита (битов) в логическое состояние 0
  • Бит, с предшествующим символом, например символом A - относится к числовому значению бита и мнемоники. A7 является битом 7 аккумулятора A. Диапазон битов, с предшествующим символом, например символом A - относится к числовым значениям диапазона битов и мнемонике. A [7:4] являются битами аккумулятора с 7 по 4.
  • Круглые скобки ( ) -отмечают содержимое регистра или ячейки памяти. (A) является содержимым аккумулятора
  • LSB - младший бит или биты
  • MSB - старший бит или биты. Относится к старшим и младшим байтам, упомянутым выше

Сводная таблица команд

Мнемоника Функция Операция Флаги Пример применения
ADC Сложить с переносом (Add with Carry) A <-- (A) + (M) + (C) V, H, N, Z, C  
ADD Сложить без переноса (Add without Carry) A <-- (A) + (M) V, H, N, Z, C  
AIS Сложить непосредственное значение, со знаком, с указателем стека SP <-- (SP) + (16 " M)   Пример кодов с использованием команды AIS*
AIX Сложить непосредственное значение, со знаком, с индексным регистром HX <-- (HX) + (16 " M)   Пример кодов с использованием команды AIX*
AND Выполнить логическое AND A <-- (A) & (M) V, N, Z  
ASL Арифметически сдвинуть влево   V, N, Z, C  
ASR Арифметически сдвинуть вправо   V, N, Z, C  
BCC Перейти, если бит переноса очищен PC <-- (PC) + $0002 + rel, если (C) = 0    
BCLR n Очистить в памяти бит n Mn <-- 0    
BCS Перейти, если бит переноса установлен PC <-- (PC) + $0002 + rel, если (C) = 1    
BEQ Перейти, если равно PC <-- (PC) + $0002 + rel, если (Z) = 1    
BGE Перейти, если больше или равно операнду со знаком PC <-- (PC) + $0002 + rel, если (N Е V) = 0,
т.е., если (A) і (M), являющиеся дополнениями до двух со знаком
  Пример кодов с использованием команды BGE*
BGT Перейти, если больше чем операнд со знаком PC <-- (PC) + $0002 + rel, если (N Е V) = 0,
т.е., если (A) > (M), являющиеся дополнениями до двух со знаком
  Пример кодов с использованием команды BGT*
BHCC Перейти, если бит полупереноса очищен PC <-- (PC) + $0002 + rel, если (H) = 0    
BHCS Перейти, если бит полупереноса установлен PC <-- (PC) + $0002 + rel, если (H) = 1    
BHI Перейти, если больше PC <-- (PC) + $0002 + rel, если C | (Z) = 0
т.е., если (A) > (M), являющиеся двоичными числами без знака
   
BHS Перейти, если больше или равно PC <-- (PC) + $0002 + rel, если (C) = 0
т.е., если (A) і (M), являющиеся двоичными числами без знака
   
BIH Перейти, если линия прерывания на высоком уровне
                                ____
PC <-- (PC) + $0002 + rel, если IRQ1 = 1
   
BIL Перейти, если линия прерывания на низком уровне
                                ____
PC <-- (PC) + $0002 + rel, если IRQ1 = 0
   
BIT Тестировать бит (A) & (M) V, N, Z  
BLE Перейти, если меньше или равно операнду со знаком PC <-- (PC) + $0002 + rel, если если Z | (N Е V) = 1
т.е., если (A) Ј (M), являющиеся дополнениями до двух со знаком
  Пример кодов с использованием команды BLE*
BLO Перейти, если меньше PC <-- (PC) + $0002 + rel, если (C) = 1
т.е., если (A) < (M), являющиеся двоичными числами без знака
   
BLS Перейти, если меньше или равно PC <-- (PC) + $0002 + rel, если C | (Z) = 1
т.е., если (A) Ј (M), являющиеся двоичными числами без знака
   
BLT Перейти, если меньше операнда со знаком PC <-- (PC) + $0002 + rel, если (N Е V) = 1
т.е., если (A) < (M), являющиеся дополнениями до двух со знаком
  Пример кодов с использованием команды BLT*
BMC Перейти, если маска прерывания очищена PC <-- (PC) + $0002 + rel, если (I) = 0    
BMI Перейти, если минус PC <-- (PC) + $0002 + rel, если (N) = 1    
BMS Перейти, если маска прерывания установлена PC <-- (PC) + $0002 + rel, если (I) = 1    
BNE Перейти, если не равно PC <-- (PC) + $0002 + rel, если (Z) = 0    
BPL Перейти, если положительный PC <-- (PC) + $0002 + rel, если (N) = 0    
BRA Переходить всегда PC <-- (PC) + $0002 + rel    
BRCLR n Перейти, если бит n памяти очищен PC <-- (PC) + $0002 + rel, если бит n в M = 0    
BRN Не переходить никогда PC <-- (PC) + $0002    
BRSET n Перейти, если бит n памяти установлен PC <-- (PC) + $0002 + rel, если бит n в M = 1    
BSET n Установить бит n памяти Mn <-- 1    
BSR Перейти в подпрограмму
PC <-- (PC) + $0002 Организация в PC адреса возврата
Ї(PCL); SP <-- (SP) - $0001 Занесение в стек младшей половины адреса возврата
Ї(PCH); SP <-- (SP) - $0001 Занесение в стек старшей половины адреса возврата
PC <-- (PC) + rel Загрузка в PC стартового адреса требуемой подпрограммы
   
CBEQ Сравнить и перейти если равно
(A) - (M); PC <-- (PC) + $0003 + rel Если результат равен $00
или: для режима IX+: (A) - (M); PC <-- (PC) + $0002 + rel Если результат равен $00
или: для режима SP1: (A) - (M); PC <-- (PC) + $0004 + rel Если результат равен $00
или: для режима CBEQX: (X) - (M); PC <-- (PC) + $0003 + rel Если результат равен $00
  Пример кодов команды CBEQ*
Пример кодов команды CBEQA*
Пример кодов команды CBEQX*
CLC Очистить бит переноса Бит C <-- 0 C  
CLI Очистить бит маски прерывания Бит I <-- 0    
CLR Очистить A <-- $00
или: M <-- $00
или: X <-- $00
или: H <-- $00
V, N, Z Пример кодов с использованием команды CLRH*
CMP Сравнить аккумулятор с памятью (A) - (M) V, N, Z, C  
COM Выполнить дополнение до единицы A <-- A# = $FF - (A)
или: X <-- X# = $FF - (X)
или: M <-- M# = $FF - (M)
V, N, Z, C  
CPHX Сравнить индексный регистр с памятью (H:X) - (M:M + $0001) V, N, Z, C Пример кодов с использованием команды CPHX*
CPX Сравнить младший байт индексного регистра с памятью (X) - (M) V, N, Z, C  
DAA Выполнить десятичную коррекцию аккумулятора (A)10 V, N, Z, C Пример кодов с использованием команды DAA*
DBNZ Декрементировать и перейти, если не ноль
A <-- (A) - $0001 или: M <-- (M) - $01 или: X <-- (X) -$0001
PC <-- (PC) + $0003 + rel если (результат) 0, при прямом DBNZ, IX1
PC <-- (PC) + $0002 + rel если (результат) 0, при DBNZA, DBNZX или IX
PC <-- (PC) + $0004 + rel если (результат) 0, при DBNZA, DBNZ SP1
  Пример кодов с использованием команды DBNZ*
DEC Декрементировать A <-- (A) - $01
или: X <-- (X) - $01
или: M <-- (M) - $01
V, N, Z  
DIV Разделить A <-- (H:A) ё (X)      H <-- Остаток Z, C Пример кодов с использованием команды DIV*
EOR Выполнить исключающее OR памяти с аккумулятором A (A Е (M) V, N, Z  
INC Инкрементировать A <-- (A) + $01
или: X <-- (X) + $01
или: M <-- (M) + $01
V, N, Z  
JMP Выполнить переход PC <-- Действительный адрес    
JSR Выполнить переход в подпрограмму
PC <-- (PC) + n n = 1, 2 или 3, в зависимости от режима адресации
Ї(PCL); SP <-- (SP) - $0001 Занесение в стек младшей половины адреса возврата
Ї(PCH); SP <-- (SP) - $0001 Занесение в стек старшей половины адреса возврата
PC <-- Действительный адрес Загрузка в PC стартового адреса требуемой подпрограммы
   
LDA Загрузить аккумулятор из памяти A <-- (M) V, N, Z  
LDHX Загрузить индексный регистр из памяти H:X <--(M:M + $0001) V, N, Z  
LDX Загрузить младший байт индексного регистра из памяти X <-- (M) V, N, Z  
LSL Логически сдвинуть влево   V, N, Z, C  
LSR Логически сдвинуть вправо   V,N, Z, C  
MOV Переместить (M)назначение <-- (M)источник V, N, Z Пример кодов с использованием команды MOV*
MUL Перемножить без знака (X:A <-- (X) x (A) H, C  
NEG Инвертировать A <-- -(A) = $00 - (A)
или: X <-- = $00 - (X)
или: M <-- = $00 - (M)
V, N, Z, C  
NOP Пустая операция Не производится    
NSA Поменять местами нибблы аккумулятора A <-- (A[3:0]:A[7:4])   Пример кодов с использованием команды NSA*
ORA Выполнить включающее OR аккумулятора и памяти A <-- (A)|(M) V, N, Z  
PSHA Занести аккумулятор в стек Ї (A), SP <-- (SP) - $0001   Пример кодов с использованием команды PSHA*
PSHH Занести старший байт индексного регистра в стек Ї (H), SP <-- (SP) - $0001   Пример кодов с использованием команды PSHH*
PSHX Занести младший байт индексного регистра в стек Ї (X), SP <-- (SP) - $0001   Пример кодов с использованием команды PSHX*
PULA Загрузить аккумулятор из стека SP <-- (SP + $0001); Э(A)   Пример кодов с использованием команды PULA*
PULH Извлечь старший байт индексного регистра из стека SP <-- (SP + $0001); Э(H)   Пример кодов с использованием команды PULH*
PULX Извлечь младший байт индексного регистра из стека SP <-- (SP + $0001); Э(X)   Пример кодов с использованием команды PULX*
ROL Вращать влево через перенос   V, N, Z, C  
ROR Вращать вправо через перенос   V, N, Z, C  
RSP Сбросить указатель стека SP <-- $FF    
RTI Вернуться из прерывания
SP <-- SP + $0001; Э CCR Извлечение CCR из стека
SP <-- SP + $0001; Э A Извлечение A из стека
SP <-- SP + $0001; Э X Извлечение X из стека
SP <-- SP + $0001; Э PCH Извлечение PCH из стека
SP <-- SP + $0001; Э PCL Извлечение PCL из стека
V, H, I, N, Z, C  
RTS Вернуться из подпрограммы
SP <-- SP + $0001; Э PCH Извлечение PCH из стека
SP <-- SP + $0001; Э PCL Извлечение PCL из стека
   
SBC Вычесть с переносом A <-- (A) - (M) - (C) V, N, Z, C  
SEC Установить бит переноса Бит C <-- 1 C  
SEI Установить бит маски прерывания Бит I <-- 1 I  
STA Сохранить аккумулятор в памяти M <-- (A) V, N, Z  
STHX Сохранить индексный регистр (M:M + $0001) <-- (H:X) V, N, Z Пример кодов с использованием команды STHX*
STOP Разрешить вывод IRQ#, остановить генератор Бит I <-- 0; останавливается генератор I  
STX Сохранить X (младший байт индексного регистра) в памяти M <-- (X) V, N, Z  
SUB Вычесть A <-- (A) - (M) V, N, Z, C  
SWI Выполнить программное прерывание
PC <- (PC) + $0001 Организация в PC адреса возврата
Ї(PCL); SP <- (SP) - $0001 Занесение в стек младшей половины адреса возврата
Ї(PCH); SP <- (SP) - $0001 Занесение в стек старшей половины адреса возврата
Ї(X); SP <- (SP) - $0001 Занесение индексного регистра в стек
Ї(A); SP <- (SP) - $0001 Занесение аккумулятора (A) в стек
Ї(CCR); SP <- (SP) - $0001 Занесение регистра кодов признаков (CCR) в стек
Бит I <- 1 Маскирование дальнейших прерываний
PCH <- ($FFFC) Выборка вектора
PCH ($FFFD)  
I  
TAP Переслать аккумулятор в регистр кодов признаков CCR <-- (A) V, H, I, N, Z, C Пример кодов с использованием команды TAP*
TAX Переслать аккумулятор вX (младший байт индексного регистра) X <-- (A)    
TPA Переслать регистр кодов признаков в аккумулятор A <-- (CCR)   Пример кодов с использованием команды TPA*
TST Проверить на отрицательное значение или ноль (A) - $00
или: (X) - $00
или: (M) - $00
V, N, Z  
TSX Переслать указатель стека в индексный регистр H:X <-- (SP) + $0001   Пример кодов с использованием команды TSX*
TXA Переслать X (младший байт индексного регистра) в аккумулятор A <-- X    
TXS Переслать индексный регистр в указатель стека SP <-- (H:X) - $0001   Пример кодов с использованием команды TXS*
WAIT Разрешить прерывания; остановить процессор Бит I <-- 0; запрещается тактирование CPU до поступления сигнала прерывания    

* - Новые команды с использованием примеров, входящие в систему команд микроконтроллеров M68HC08 и отсутствующие в системе команд микроконтроллеров M68HC05.





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники