Справочник к лабораторным работам (1058370), страница 2
Текст из файла (страница 2)
Регистр SREG
SREG - регистр статуса, размещен в пространстве I/O по адресу $3F ($5F) и его биты определяются как:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
I | T | H | S | V | N | Z | C |
Бит 7 - I: Global Interrupt Enable - Разрешение глобального прерывания.
Бит разрешения глобального прерывания для разрешения прерывания должен быть установлен в состояние 1. Управление разрешением конкретного прерывания выполняется регистрами маски прерывания GIMSK и TIMSK. Если бит глобального прерывания очищен (в состоянии 0), то ни одно из разрешений конкретных прерываний, установленных в регистрах GIMSK и TIMSK, не действует. Бит I аппаратно очищается после прерывания и устанавливается для последующего разрешения глобального прерывания командой RETI.
Бит 6 - T: Бит Copy Storage - Бит сохранения копии.
Команды копирования бита BLD (Бит LoaD) и BST (Бит STore) используют бит T как бит источник и бит назначения при операциях с битами. Командой BST бит регистра регистрового файла копируется в бит T, командой BLD бит T копируется в регистр регистрового файла.
Бит 5 - H: Half Carry Flag - Флаг полупереноса
Флаг полупереноса указывает на полуперенос в ряде арифметических операций. Более подробная информация приведена в описании системы команд.
Бит 4 - S: Sign Бит, S = N V - Бит знака
Бит S всегда находится в состоянии, определяемом логическим исключающим ИЛИ (exclusive OR) между флагом отрицательного значения N и дополнением до двух флага переполнения V. Более подробная информация приведена в описании системы команд.
Бит 3 - V: Two’s Complement Overflow Flag - Дополнение до двух флага переполнения
Дополнение до двух флага V поддерживает арифметику дополнения до двух. Более подробная информация приведена в описании системы команд.
Бит 2 - N: Negative Flag - Флаг отрицательного значения
Флаг отрицательного значения N указывает на отрицательный результат ряда арифметических и логических операций. Более подробная информация приведена в описании системы команд.
Бит 1 - Z: Zero Flag - Флаг нулевого значения
Флаг нулевого значения Z указывает на нулевой результат ряда арифметических и логических операций. Более подробная информация приведена в описании системы команд.
Бит 0 - C: Carry Flag - Флаг переноса
Флаг переноса C указывает на перенос в арифметических и логических операциях. Более подробная информация приведена в описании системы команд.
Система команд
Арифметические операции | ||||
Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
ADC Rn,Rk | Сложение c переносом | Rn <- Rn + Rk + C | Z, C, N, V, S, H | 1 |
ADD Rn,Rk | Сложение без переноса | Rn <- Rn + Rk | Z, C, N, V, S, H | 1 |
ADIW Rn,K | Сложение с константой | (Rn+1):Rn <- (Rn+1):Rn + K | Z, C, N, V, S | 2 |
SUB Rn,Rk | Вычитание без заема | Rn <- Rn - Rk | Z, C, N, V, S, H | 1 |
SUBI Rn,K | Вычитание константы без заема | Rn <- Rn - K | Z, C, N, V, S, H | 1 |
SBCI Rn,K | Вычитание константы с заемом | Rn <- Rn - K - C | Z, C, N, V, S, H | 1 |
SBC Rn,Rk | Вычитание c заемом | Rn <- Rn - Rk - C | Z, C, N, V, S, H | 1 |
SBIW Rn,K | Вычитание константы | Rn+1):Rn <- (Rn+1):Rn - K | Z, C, N, V, S | 2 |
COM Rn | Дополнение до 1 | Rn <- 0FFh - Rn | Z, C, N, V, S | 1 |
NEG Rn | Дополнение до 2 | Rn <- 0 - Rn | Z, C, N, V, S, H | 1 |
INC Rn | Увеличение на 1 | Rn <- Rn + 1 | Z, N, V, S | 1 |
DEC Rn | Уменьшение на 1 | Rn <- Rn - 1 | Z, N, V, S | 1 |
CP Rn,Rk | Сравнение регистров | Rn - Rk | Z, C, N, V, S, H | 1 |
CPI Rn,K | Сравнение регистра с константой | Rn - K | Z, C, N, V, S, H | 1 |
CPC Rn,Rk | Сравнение регистров с заемом | Rn - Rk - C | Z, C, N, V, S, H | 1 |
Логические операции | ||||
Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
AND Rn,Rk | Логическое "И" | Rn <- Rn & Rk | Z, N, V, S | 1 |
ANDI Rn,K | Логическое "И" с константой | Rn <- Rn & K | Z, N, V, S | 1 |
OR Rn,Rk | Логическое "ИЛИ" | Rn <- Rn | Rk | Z, N, V, S | 1 |
ORI Rn,K | Логическое "ИЛИ" с константой | Rn <- Rn | K | Z, N, V, S | 1 |
EOR Rn,Rk | "Исключающее ИЛИ" | Rn <- Rn ^ Rk | Z, N, V, S | 1 |
CBR Rn,K | Очистка битов | Rn <- Rn & (0FFh-K) | Z, N, V, S | 1 |
SBR Rn,K | Установка битов | Rn <- Rn | K | Z, N, V, S | 1 |
CLR Rn | Очистка регистра | Rn <- Rn ^ Rn | Z, N, V, S | 1 |
SER Rn | Установка регистра | Rn <- 0FFh | - | 1 |
TST Rn | Проверка на 0 и минус | Rn <- Rn & Rn | Z, N, V, S | 1 |
Операции перехода | ||||
Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
JMP K | Абсолютный переход | PC <- K | - | 3 |
CALL K | Абсолютный вызов | PC <- K | - | 4 (5) |
RJMP K | Относительный переход | PC <- PC + K + 1 | - | 2 |
RCALL K | Относительный вызов | PC <- PC + K + 1 | - | 2 |
IJMP | Косвенный переход | PC(15:0) <- Z, PC(21:16) <- 0 | - | 2 |
ICALL | Косвенный вызов | PC(15:0) <- Z, PC(21:16) <- 0 | - | 2 |
EIJMP | Косвенный переход | PC(15:0) <- Z, PC(21:16) <- EIND | - | 2 |
EICALL | Косвенный вызов | PC(15:0) <- Z, PC(21:16) <- EIND | - | 2 |
RET | Выход из процедуры | PC <- STACK | - | 4 (5) |
RETI | Выход из процедуры прерывания | PC <- STACK | I | 4 (5) |
CPSE Rn,Rk | Сравнить и пропустить, если равно | if (Rn = Rk) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
SBRC Rn,K | Пропустить, если Rn(K) = 0 | if (Rn(K) = 0) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
SBRS Rn,K | Пропустить, если Rn(K) = 1 | if (Rn(K) = 1) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
SBIC IR,K | Пропустить, если IR(K) = 0 | if (IR(K) = 0) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
SBIS IR,K | Пропустить, если IR(K) = 1 | if (IR(K) = 1) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
BRBS b,K | Перейти, если SREG(b) = 1 | if (SREG(b) = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRBC b,K | Перейти, если SREG(b) = 0 | if (SREG(b) = 0) PC <- PC + K + 1 | - | 1 / 2 |
BREQ K | Перейти, если Z = 1 | if (Z = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRNE K | Перейти, если Z = 0 | if (Z = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRCC K | Перейти, если C = 0 | if (C = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRCS K | Перейти, если C = 1 | if (C = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRHC K | Перейти, если H = 0 | if (H = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRHS K | Перейти, если H = 1 | if (H = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRSH K | Перейти, если больше или равно | if (C = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRLO K | Перейти, если меньше | if (C = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRPL K | Перейти, если больше или равно 0 | if (N = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRMI K | Перейти, если меньше 0 | if (N = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRGE K | Перейти, если больше или равно (со знаком) | if (N + V = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRLT K | Перейти, если меньше (со знаком) | if (N + V = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRTC K | Перейти, если T = 0 | if (T = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRTS K | Перейти, если T = 1 | if (T = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRVC K | Перейти, если V = 0 | if (V = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRVS K | Перейти, если V = 1 | if (V = 1) PC <- PC + K + 1 | - | 1 / 2 |
BRIE K | Перейти, если I = 0 | if (I = 0) PC <- PC + K + 1 | - | 1 / 2 |
BRID K | Перейти, если I = 1 | if (I = 1) PC <- PC + K + 1 | - | 1 / 2 |