MCDIPL (664620), страница 12
Текст из файла (страница 12)
Таблица А.3. Инструкции передачи данных.
Мнемоника | Операнды | Описание | Операция | Флаги | Циклы |
MOV | Rd,Rr | Скопировать регистр | Rd = Rr | None | 1 |
MOVW | Rd,Rr | Скопировать пару регистров | Rd+1:Rd = Rr+1:Rr, r,d even | None | 1 |
LDI | Rd,K8 | Загрузить константу | Rd = K | None | 1 |
LDS | Rd,k | Прямая загрузка | Rd = (k) | None | 2* |
LD | Rd,X | Косвенная загрузка | Rd = (X) | None | 2* |
LD | Rd,X+ | Косвенная загрузка с пост-инкрементом | Rd = (X), X=X+1 | None | 2* |
LD | Rd,-X | Косвенная загрузка с пре-декрементом | X=X-1, Rd = (X) | None | 2* |
LD | Rd,Y | Косвенная загрузка | Rd = (Y) | None | 2* |
LD | Rd,Y+ | Косвенная загрузка с пост-инкрементом | Rd = (Y), Y=Y+1 | None | 2* |
LD | Rd,-Y | Косвенная загрузка с пре-декрементом | Y=Y-1, Rd = (Y) | None | 2* |
LDD | Rd,Y+q | Косвенная загрузка с замещением | Rd = (Y+q) | None | 2* |
LD | Rd,Z | Косвенная загрузка | Rd = (Z) | None | 2* |
LD | Rd,Z+ | Косвенная загрузка с пост-инкрементом | Rd = (Z), Z=Z+1 | None | 2* |
LD | Rd,-Z | Косвенная загрузка с пре-декрементом | Z=Z-1, Rd = (Z) | None | 2* |
LDD | Rd,Z+q | Косвенная загрузка с замещением | Rd = (Z+q) | None | 2* |
STS | k,Rr | Прямое сохранение | (k) = Rr | None | 2* |
ST | X,Rr | Косвенное сохранение | (X) = Rr | None | 2* |
ST | X+,Rr | Косвенное сохранение с пост-инкрементом | (X) = Rr, X=X+1 | None | 2* |
ST | -X,Rr | Косвенное сохранение с пре-декрементом | X=X-1, (X)=Rr | None | 2* |
ST | Y,Rr | Косвенное сохранение | (Y) = Rr | None | 2* |
ST | Y+,Rr | Косвенное сохранение с пост-инкрементом | (Y) = Rr, Y=Y+1 | None | 2 |
ST | -Y,Rr | Косвенное сохранение с пре-декрементом | Y=Y-1, (Y) = Rr | None | 2 |
ST | Y+q,Rr | Косвенное сохранение с замещением | (Y+q) = Rr | None | 2 |
ST | Z,Rr | Косвенное сохранение | (Z) = Rr | None | 2 |
ST | Z+,Rr | Косвенное сохранение с пост-инкрементом | (Z) = Rr, Z=Z+1 | None | 2 |
ST | -Z,Rr | Косвенное сохранение с пре-декрементом | Z=Z-1, (Z) = Rr | None | 2 |
ST | Z+q,Rr | Косвенное сохранение с замещением | (Z+q) = Rr | None | 2 |
LPM | Нет | Загрузка из программной памяти | R0 = (Z) | None | 3 |
LPM | Rd,Z | Загрузка из программной памяти | Rd = (Z) | None | 3 |
LPM | Rd,Z+ | Загрузка из программной памяти с пост-инкрементом | Rd = (Z), Z=Z+1 | None | 3 |
ELPM | Нет | Расширенная загрузка из программной памяти | R0 = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z | Расширенная загрузка из программной памяти | Rd = (RAMPZ:Z) | None | 3 |
ELPM | Rd,Z+ | Расширенная загрузка из программной памяти с пост-инкрементом | Rd = (RAMPZ:Z), Z = Z+1 | None | 3 |
SPM | Нет | Сохранение в программной памяти | (Z) = R1:R0 | None | - |
ESPM | Нет | Расширенное сохранение в программной памяти | (RAMPZ:Z) = R1:R0 | None | - |
IN | Rd,P | Чтение порта | Rd = P | None | 1 |
OUT | P,Rr | Запись в порт | P = Rr | None | 1 |
PUSH | Rr | Занесение регистра в стек | STACK = Rr | None | 2 |
POP | Rd | Извлечение регистра из стека | Rd = STACK | None | 2 |
* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для каждого ожидания.
Таблица А.4. Инструкции работы с битами.
Мнемоника | Операнды | Описание | Операция | Флаги | Циклы |
LSL | Rd | Логический сдвиг влево | Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) | Z,C,N,V,H,S | 1 |
LSR | Rd | Логический сдвиг вправо | Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) | Z,C,N,V,S | 1 |
ROL | Rd | Циклический сдвиг влево через C | Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) | Z,C,N,V,H,S | 1 |
ROR | Rd | Циклический сдвиг вправо через C | Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) | Z,C,N,V,S | 1 |
ASR | Rd | Арифметический сдвиг вправо | Rd(n)=Rd(n+1), n=0,...,6 | Z,C,N,V,S | 1 |
SWAP | Rd | Перестановка тетрад | Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) | None | 1 |
BSET | s | Установка флага | SREG(s) = 1 | SREG(s) | 1 |
BCLR | s | Очистка флага | SREG(s) = 0 | SREG(s) | 1 |
SBI | P,b | Установить бит в порту | I/O(P,b) = 1 | None | 2 |
CBI | P,b | Очистить бит в порту | I/O(P,b) = 0 | None | 2 |
BST | Rr,b | Сохранить бит из регистра в T | T = Rr(b) | T | 1 |
BLD | Rd,b | Загрузить бит из T в регистр | Rd(b) = T | None | 1 |
SEC | Нет | Установить флаг переноса | C =1 | C | 1 |
CLC | Нет | Очистить флаг переноса | C = 0 | C | 1 |
SEN | Нет | Установить флаг отрицательного числа | N = 1 | N | 1 |
CLN | Нет | Очистить флаг отрицательного числа | N = 0 | N | 1 |
SEZ | Нет | Установить флаг нуля | Z = 1 | Z | 1 |
CLZ | Нет | Очистить флаг нуля | Z = 0 | Z | 1 |
SEI | Нет | Установить флаг прерываний | I = 1 | I | 1 |
CLI | Нет | Очистить флаг прерываний | I = 0 | I | 1 |
SES | Нет | Установить флаг числа со знаком | S = 1 | S | 1 |
CLN | Нет | Очистить флаг числа со знаком | S = 0 | S | 1 |
SEV | Нет | Установить флаг переполнения | V = 1 | V | 1 |
CLV | Нет | Очистить флаг переполнения | V = 0 | V | 1 |
SET | Нет | Установить флаг T | T = 1 | T | 1 |
CLT | Нет | Очистить флаг T | T = 0 | T | 1 |
SEH | Нет | Установить флаг внутреннего переноса | H = 1 | H | 1 |
CLH | Нет | Очистить флаг внутреннего переноса | H = 0 | H | 1 |
NOP | Нет | Нет операции | Нет | None | 1 |
SLEEP | Нет | Спать (уменьшить энергопотребление) | Смотрите описание инструкции | None | 1 |
WDR | Нет | Сброс сторожевого таймера | Смотрите описание инструкции | None | 1 |
Ассемблер не различает регистр символов. Операнды могут быть таких видов:
-
Rd: Результирующий (и исходный) регистр в регистровом файле
-
Rr: Исходный регистр в регистровом файле
-
b: Константа (3 бита), может быть константное выражение
-
s: Константа (3 бита), может быть константное выражение
-
P: Константа (5-6 бит), может быть константное выражение
-
K6; Константа (6 бит), может быть константное выражение
-
K8: Константа (8 бит), может быть константное выражение
-
k: Константа (размер зависит от инструкции), может быть константное выражение
-
q: Константа (6 бит), может быть константное выражение
-
Rdl: R24, R26, R28, R30. Для инструкций ADIW и SBIW
-
X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
ПРИЛОЖЕНИЕ 2.
Таблица регистров микроконтроллера AT90S1200
Адрес | Название | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
$3F | SREG | I | T | H | S | V | N | Z | C |
$3E | з а р е з е р в и р о в а н | ||||||||
$3D | з а р е з е р в и р о в а н | ||||||||
$3C | з а р е з е р в и р о в а н | ||||||||
$3B | GIMSK | - | INT0 | - | - | - | - | - | - |
$3A | з а р е з е р в и р о в а н | ||||||||
$39 | TIMSK | - | - | - | - | - | - | TOIE0 | - |
$38 | TIFR | - | - | - | - | - | - | TOV0 | - |
$37 | з а р е з е р в и р о в а н | ||||||||
$36 | з а р е з е р в и р о в а н | ||||||||
$35 | MCUCR | - | - | SE | SM | - | - | ISC01 | ISC00 |
$34 | з а р е з е р в и р о в а н | ||||||||
$33 | TCCR0 | - | - | - | - | - | CS02 | CS01 | CS00 |
$32 | TCNT0 | Таймер / счетчик 0 (8 бит) | |||||||
… | з а р е з е р в и р о в а н | ||||||||
$21 | WDTCR | - | - | - | - | WDE | WDP2 | WDP1 | WDP0 |
… | з а р е з е р в и р о в а н | ||||||||
$1E | EEAR | Регистр адреса энергонезависимой памяти | |||||||
$1D | EEDR | Регистр данных энергонезависимой памяти | |||||||
$1C | EECR | - | - | - | - | - | - | EEWE | EERE |
… | з а р е з е р в и р о в а н | ||||||||
$18 | PORTB | PORTB7 | PORTB6 | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 |
$17 | DDRB | DDB7 | DDB6 | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 |
$16 | PINB | PINB7 | PINB6 | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 |
… | з а р е з е р в и р о в а н | ||||||||
$12 | PORTD | - | PORTD6 | PORTD5 | PORTD4 | PORTD3 | PORTD2 | PORTD1 | PORTD0 |
$11 | DDRD | - | DDD6 | DDD5 | DDD4 | DDD3 | DDD2 | DDD1 | DDD0 |
$10 | PIND | - | PIND6 | PIND5 | PIND4 | PIND3 | PIND2 | PIND1 | PIND0 |
… | з а р е з е р в и р о в а н | ||||||||
$08 | ACSR | ACD | - | ACO | ACI | ACIE | - | ACIS1 | ACIS0 |
… | з а р е з е р в и р о в а н | ||||||||
$00 | з а р е з е р в и р о в а н |
ПРИЛОЖЕНИЕ 3.
Программа для измерителя звуковой частоты
.include "8515def.inc"