Реферат Курсовая Конспект
Операция - раздел Компьютеры, Система команд 8-разрядных RISC микроконтроллеров семейства AVR Синтаксис Операнды: ...
|
Синтаксис | Операнды: | Счетчик программ: | |
(i) | SLEEP | None | PC <-- PC + 1 |
16-разрядный код операции:
100X |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
mov r0, r11 ; Копировать r11 в r0
sleep ; Перевести MCU в режим sleep
Слов: 1 (2 байта)
Циклов: 1
Команда ST - записать косвенно из регистра в СОЗУ с использованием индекса X
Описание:Записывается косвенно один байт из регистра в СОЗУ. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем X в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPX в I/O области. Регистр-указатель X может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя X в качестве указателя стека.
Использование X-указателя:
Операция: | Комментарий: | ||
(i) | (X) <-- Rr | X: Неизменен | |
(ii) | (X) <-- Rr | X <-- X + 1 | X: Инкрементирован впоследствии |
(iii) | X <-- X - 1 | ( X) <-- Rr | X: Предварительно декрементирован |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | ST X,Rr | 0 < d < 31 | PC <-- PC + 1 |
(ii) | ST X+,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iii) | ST -X,Rr | 0 < d < 31 | PC <-- PC + 1 |
16-разрядный код операции:
(i) | 001r | rrrr | ||
(ii) | 001r | rrrr | ||
(iii) | 001r | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r27 ; Очистить старший байт X
ldi r26, $20 ; Установить $20 в младший байт X
st X+,r0 ; Сохранить в r0 содержимое SRAM по адресу $20 (X постинкрементируется)
st X, r1 ; Сохранить в r1 содержимое SRAM по адресу $21
ldi r26, $23 ; Установить $23 в младший байт X
st r2, X ; Сохранить в r2 содержимое SRAM по адресу $23
st r3, -X ; Сохранить в r3 содержимое SRAM по адресу $22 (X преддекрементируется)
Слов: 1 (2 байта)
Циклов: 2
Команда ST (STD) - записать косвенно из регистра в СОЗУ с использованием индекса Y
Описание:Записывается косвенно, со смещением или без смещения, один байт из регистра в СОЗУ. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем Y в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPY в I/O области. Регистр-указатель Y может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя Y в качестве указателя стека.
Использование Y-указателя:
Операция: | Комментарий: | ||
(i) | (Y) <-- Rr | Y: Неизменен | |
(ii) | (Y) <-- Rr | Y <-- Y + 1 | Y: Инкрементирован впоследствии |
(iii) | Y <-- Y - 1 | (Y) <-- Rr | Y: Предварительно декрементирован |
(iv) | ( Y + q) <-- Rr | Y: Неизменен, q: смещение | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | ST Y,Rr | 0 < d < 31 | PC <-- PC + 1 |
(ii) | ST Y+,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iii) | ST -Y,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iv) | STD Y+q,Rr | 0 < d < 31, 0 < q < 63 | PC <-- PC + 1 |
16-разрядный код операции:
(i) | 001r | rrrr | ||
(ii) | 001r | rrrr | ||
(iii) | 001r | rrrr | ||
(iiii) | 10q0 | qq1r | rrrr | 1qqq |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r29 ;Очистить старший байт Y
ldi r28, $20 ;Установить $20 в младший байт Y
st Y+, r0 ;Сохранить в r0 содерж. SRAM по адресу $20 (Y постинкрементируется)
st Y, r1 ;Сохранить в r1 содержимое SRAM по адресу $21
ldi r28, $23 ;Установить $23 в младший байт Y
st Y, r2 ;Сохранить в r2 содержимое SRAM по адресу $23
st -Y, r3 ;Сохранить в r3 содерж. SRAM по адресу $22 (Y преддекрементируется)
std Y+2, r4 ;Сохранить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2
Команда ST (STD) - записать косвенно из регистра в СОЗУ с использованием индекса Z
Описание:Записывается косвенно, со смещением или без смещения, один байт из регистра в СОЗУ. Положение байта в СОЗУ указывается 16-разрядным регистром-указателем Z в регистровом файле. Обращение к памяти ограничено текущей страницей объемом 64 Кбайта. Для обращения к другой странице СОЗУ необходимо изменить регистр RAMPZ в I/O области. Регистр-указатель Z может остаться неизменным после выполнения команды, но может быть инкрементирован или декрементирован. Эта особенность очень удобна при использовании регистра-указателя Z в качестве указателя стека, однако, поскольку регистр-указатель Z может быть использован для косвенного вызова подпрограмм, косвенных переходов и табличных преобразований, более удобно использовать в качестве указателя стека регистры-указатели X и Y.
Использование Z-указателя:
Операция: | Комментарий: | ||
(i) | (Z) <-- Rr | Z: Неизменен | |
(ii) | (Z) <-- Rr | Z <-- Y + 1 | Z: Инкрементирован впоследствии |
(iii) | Z <-- Z - 1 | (Z) <-- Rr | Z: Предварительно декрементирован |
(iv) | ( Z + q) <-- Rr | Z: Неизменен, q: смещение | |
Синтаксис | Операнды: | Счетчик программ: | |
(i) | ST Z,Rr | 0 < d < 31 | PC <-- PC + 1 |
(ii) | ST Z+,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iii) | ST -Z,Rr | 0 < d < 31 | PC <-- PC + 1 |
(iv) | STD Z+q,Rr | 0 < d < 31, 0 < q < 63 | PC <-- PC + 1 |
16-разрядный код операции:
(i) | 001r | Rrrr | ||
(ii) | 001r | Rrrr | ||
(iii) | 001r | rrrr | ||
(iv) | 10q0 | qq1r | rrrr | 0qqq |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
clr r31 ; Очистить старший байт Z
ldi r30, $20 ; Установить $20 в младший байт Z
st Z+,r0 ;Сохранить в r0 содерж. SRAM по адр. $20 (Z постинкрементируется)
st Z, r1 ; Сохранить в r1 содержимое SRAM по адресу $21
ldi r30, $23 ; Установить $23 в младший байт Z
st Z, r2 ; Сохранить в r2 содержимое SRAM по адресу $23
st -Z, r3 ; Сохранить в r3 содерж.SRAM по адр. $22 (Z преддекрементируется)
std Z+2, r4 ; Сохранить в r4 содержимое SRAM по адресу $24
Слов: 1 (2 байта)
Циклов: 2
Команда STS - загрузить непосредственно в СОЗУ
Описание:Выполняется запись одного байта из регистра в СОЗУ. Можно использовать 16- разрядный адрес. Обращение к памяти ограничено текущей страницей СОЗУ объемом 64 Кбайта. Команда STS использует для обращения к памяти выше 64 Кбайт регистр RAMPZ.
Операция:
(i) | (k) <-- Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | STS k,Rr | 0 < r < 31, 0 < k < 65535 | PC <-- PC + 2 | ||
32-разрядный код операции:
001d | dddd | ||
kkkk | kkkk | kkkk | kkkk |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
lds r2, $FF00 ; Загрузить в r2 содержимое SRAM по адресу $FF00
add r2, r1 ; Сложить r1 с r2
sts $FF00, r2 ; Записать обратно
Слов: 2 (4 байта)
Циклов: 3
Команда SUB - вычесть без переноса
Описание:Вычитание содержимого регистра-источника Rr из содержимого регистра Rd, размещение результата в регистре назначения Rd.
Операция:
(i) | Rd <-- Rd - Rr | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | SUB Rd,Rr | 16 < d < 31, 0 < r < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
10rd | dddd | rrrr |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3*Rr3+Rr3*R3+R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | Rd7*Rr7*R7+Rd7*Rr7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*Rr7+Rr7*R7+*R7*Rd7 Устанавливается если абсолютное значение содержимого Rr больше, чем абсолютное значение Rd, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
sub r13, r12 ; Вычесть r12 из r13
brne noteq ; Перейти если r12 <> r13
noteq: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда SUBI - вычесть непосредственное значение
Описание:Вычитание константы из содержимого регистра, размещение результата в регистре назначения Rd.
Операция:
(i) | Rd <-- Rd - K | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | SUB Rd,K | 16 < d < 31, 0 < K < 255 | PC <- PC + 1 | ||
16-разрядный код операции:
KKKK | dddd | KKKK |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | Û | Û | Û | Û | Û | Û | |||
H: | Rd3*K3+K3*R3+R3*Rd3 Устанавливается если есть заем из бита 3, в ином случае очищается | |||||||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | Rd7*K7*R7+Rd7*K7*R7 Устанавливается если в результате операции образуется переполнение дополнения до двух, в ином случае очищается | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
C: | Rd7*K7+K7*R7+ R7*Rd7 Устанавливается если абсолютное значение константы больше, чем абсолютное значение Rd, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
subi r22, $11 ; Вычесть $11 из r22
brne noteq ; Перейти если r22 <> $11
. . .
noteq: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда SWAP - поменять нибблы местами
Описание:Команда меняет местами старший и младший нибблы (полубайты) регистра.
Операция:
(i) | R(7-4) <-- Rd(3-0), R(3-0) <-- Rd(7-4) | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | SWAP Rd | 0 < d < 31 | PC <-- PC + k + 1 | ||
16-разрядный код операции:
010d | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | - | - | - | - | - | |||
R: | (Результат) соответствует Rd после выполнения команды | |||||||||
Пример:
inc r1 ; Увеличить на 1 r1
swap r1 ; Поменять местами нибблы r1
inc r1 ; Увеличить на 1 старший ниббл r1
swap r1 ; Снова поменять местами нибблы r1
Слов: 1 (2 байта)
Циклов: 1
Команда TST - проверить на ноль или минус
Описание:Регистр проверяется на нулевое или отрицательное состояние. Выполняется логическое AND содержимого регистра с самим собой. Содержимое регистра остается неизменным.
Операция:
(i) | Rd <-- Rd * Rd | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | TST Rd | 0 < d < 31 | PC <- PC + 1 | ||
16-разрядный код операции:
00dd | dddd | dddd |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |||
- | - | - | Û | Û | Û | - | ||||
S: | NÅV, Для проверок со знаком | |||||||||
V: | 0 Очищен | |||||||||
N: | R7 Устанавливается если в результате установлен MSB, в ином случае очищается | |||||||||
Z: | R7*R6*R5*R4*R3*R2*R1*R0 Устанавливается если результат $00, в ином случае очищается | |||||||||
R: | (Результат) соответствует Rd | |||||||||
Пример:
tst r0 ; Проверить r0
breq zero ; Перейти если r0 = 0
. . .
zero: nop ; Перейти по назначению (пустая операция)
Слов: 1 (2 байта)
Циклов: 1
Команда WDR - cбросить сторожевой таймер
Описание:Команда сбрасывает сторожевой таймер (Watchdog Timer). Команда может быть выполнена внутри заданного прескалером сторожевого таймера промежутка времени (см. аппаратные характеристики сторожевого таймера).
Операция:
(i) | Перезапускается WD (сторожевой таймер) | ||||
Синтаксис | Операнды: | Счетчик программ: | |||
(i) | WDR | None | PC <-- PC + 1 | ||
16-разрядный код операции:
101X |
Булевы выражения регистра статуса (SREG)
I | T | H | S | V | N | Z | C | |
- | - | - | - | - | - | - | - |
Пример:
wdr ; Сбросить сторожевой таймер
Слов: 1 (2 байта)
Циклов: 1
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Система команд 8-разрядных RISC микроконтроллеров семейства AVR"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Операция
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов