Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_
.pdf3.4. Система команд 91
Время выполнения и длина команд формата I (с двумя операндами)
Длина команд формата I и время их выполнения для всех возможных режи мов адресации приведены в Табл. 3.16.
Таблица 3.16. Время выполнения и длина команд формата I
Режим адресации |
Число тактов |
Длина команды |
|
Пример |
|
|
|
|
|||
Источник |
Приёмник |
|
|||
|
|
|
|
||
|
|
|
|
|
|
Rn |
Rm |
1 |
1 |
MOV |
R5,R8 |
|
|
|
|
|
|
|
PC |
2 |
1 |
BR |
R9 |
|
|
|
|
|
|
|
x(Rm) |
4 |
2 |
ADD |
R5,4(R6) |
|
|
|
|
|
|
|
EDE |
4 |
2 |
XOR |
R8,EDE |
|
|
|
|
|
|
|
&EDE |
4 |
2 |
MOV |
R5,&EDE |
|
|
|
|
|
|
@Rn |
Rm |
2 |
1 |
AND |
@R4,R5 |
|
|
|
|
|
|
|
PC |
2 |
1 |
BR |
@R8 |
|
|
|
|
|
|
|
x(Rm) |
5 |
2 |
XOR |
@R5,8(R6) |
|
|
|
|
|
|
|
EDE |
5 |
2 |
MOV |
@R5,EDE |
|
|
|
|
|
|
|
&EDE |
5 |
2 |
XOR |
@R5,&EDE |
|
|
|
|
|
|
@Rn+ |
Rm |
2 |
1 |
ADD |
@R5+,R6 |
|
|
|
|
|
|
|
PC |
3 |
1 |
BR |
@R9+ |
|
|
|
|
|
|
|
x(Rm) |
5 |
2 |
XOR |
@R5+,8(R6) |
|
|
|
|
|
|
|
EDE |
5 |
2 |
MOV |
@R9+,EDE |
|
|
|
|
|
|
|
&EDE |
5 |
2 |
MOV |
@R9+,&EDE |
|
|
|
|
|
|
#N |
Rm |
2 |
2 |
MOV |
#20,R9 |
|
|
|
|
|
|
|
PC |
3 |
2 |
BR |
#2AEh |
|
|
|
|
|
|
|
x(Rm) |
5 |
3 |
MOV |
#0300h,0(SP) |
|
|
|
|
|
|
|
EDE |
5 |
3 |
ADD |
#33,EDE |
|
|
|
|
|
|
|
&EDE |
5 |
3 |
ADD |
#33,&EDE |
|
|
|
|
|
|
x(Rn) |
Rm |
3 |
2 |
MOV |
2(R5),R7 |
|
|
|
|
|
|
|
PC |
3 |
2 |
BR |
2(R6) |
|
|
|
|
|
|
|
TONI |
6 |
3 |
MOV |
4(R7),TONI |
|
|
|
|
|
|
|
x(Rm) |
6 |
3 |
ADD |
4(R4),6(R9) |
|
|
|
|
|
|
|
&TONI |
6 |
3 |
MOV |
2(R4),&TONI |
|
|
|
|
|
|
EDE |
Rm |
3 |
2 |
AND |
EDE,R6 |
|
|
|
|
|
|
|
PC |
3 |
2 |
BR |
EDE |
|
|
|
|
|
|
|
TONI |
6 |
3 |
CMP |
EDE,TONI |
|
|
|
|
|
|
|
x(Rm) |
6 |
3 |
MOV |
EDE,0(SP) |
|
|
|
|
|
|
|
&TONI |
6 |
3 |
MOV |
EDE,&TONI |
|
|
|
|
|
|
&EDE |
Rm |
3 |
2 |
MOV |
&EDE,R8 |
|
|
|
|
|
|
|
PC |
3 |
2 |
BR |
&EDE |
|
|
|
|
|
|
|
TONI |
6 |
3 |
MOV |
&EDE,TONI |
|
|
|
|
|
|
|
x(Rm) |
6 |
3 |
MOV |
&EDE,0(SP) |
|
|
|
|
|
|
|
&TONI |
6 |
3 |
MOV |
&EDE,&TONI |
|
|
|
|
|
|
92 Глава 3. 16#битное RISC ЦПУ MSP430
3.4.5. Описание набора команд
Карта команд изображена на Рис. 3.20. Описание всех команд набора в сжа том виде приведено в Табл. 3.17.
000 |
040 |
080 |
0C0 |
100 |
140 |
180 |
|
1C0 |
200 |
240 |
280 |
2C0 |
300 |
340 |
380 |
3C0 |
||
0xxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4xxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8xxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cxxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1xxx |
RRC |
RRC.B |
SWPB |
|
RRA |
RRA.B |
SXT |
|
|
|
PUSH |
PUSH.B |
CALL |
|
RETI |
|
|
|
14xx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18xx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1Cxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20xx |
|
|
|
|
|
|
|
JNE/JNZ |
|
|
|
|
|
|
|
|
||
24xx |
|
|
|
|
|
|
|
JEQ/JZ |
|
|
|
|
|
|
|
|
||
28xx |
|
|
|
|
|
|
|
JNC |
|
|
|
|
|
|
|
|
||
2Cxx |
|
|
|
|
|
|
|
JC |
|
|
|
|
|
|
|
|
||
30xx |
|
|
|
|
|
|
|
JN |
|
|
|
|
|
|
|
|
||
34xx |
|
|
|
|
|
|
|
JGE |
|
|
|
|
|
|
|
|
||
38xx |
|
|
|
|
|
|
|
JL |
|
|
|
|
|
|
|
|
||
3Cxx |
|
|
|
|
|
|
|
JMP |
|
|
|
|
|
|
|
|
||
4xxx |
|
|
|
|
|
|
|
MOV, MOV.B |
|
|
|
|
|
|
|
|||
5xxx |
|
|
|
|
|
|
|
ADD, ADD.B |
|
|
|
|
|
|
|
|||
6xxx |
|
|
|
|
|
|
|
ADDC, ADDC.B |
|
|
|
|
|
|
||||
7xxx |
|
|
|
|
|
|
|
SUBC, SUBC.B |
|
|
|
|
|
|
||||
8xxx |
|
|
|
|
|
|
|
SUB, SUB.B |
|
|
|
|
|
|
|
|||
9xxx |
|
|
|
|
|
|
|
CMP, CMP.B |
|
|
|
|
|
|
|
|||
Axxx |
|
|
|
|
|
|
|
DADD, DADD.B |
|
|
|
|
|
|
||||
Bxxx |
|
|
|
|
|
|
|
BIT, BIT.B |
|
|
|
|
|
|
|
|||
Cxxx |
|
|
|
|
|
|
|
BIC, BIC.B |
|
|
|
|
|
|
|
|||
Dxxx |
|
|
|
|
|
|
|
BIS, BIS.B |
|
|
|
|
|
|
|
|||
Exxx |
|
|
|
|
|
|
|
XOR, XOR.B |
|
|
|
|
|
|
|
|||
Fxxx |
|
|
|
|
|
|
|
AND, AND.B |
|
|
|
|
|
|
|
Рис. 3.20. Карта команд ядра.
Таблица 3.17. Набор команд MSP430
Мнемоника |
Описание |
|
Операция |
V |
N |
Z |
C |
|
|
|
|
|
|
|
|
|
|
ADC(.B)* |
dst |
Сложение бита переноса с операндом |
dst + C dst |
• |
• |
• |
• |
|
ADD(.B) |
src,dst |
Сложение двух операндов |
src + dst dst |
• |
• |
• |
• |
|
|
|
|
|
|
|
|
|
|
ADDC(.B) |
src,dst |
Сложение двух операндов с учётом |
src + dst + C dst |
• |
• |
• |
• |
|
|
|
бита переноса |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AND(.B) |
src,dst |
«Логическое И» двух операндов |
src .and. dst dst |
0 |
• |
• |
• |
|
|
|
|
|
|
|
|
|
|
BIC(.B) |
src,dst |
Очистка битов операнда |
.not.src .and. dst dst |
– |
– |
– |
– |
|
|
|
|
|
|
|
|
|
|
BIS(.B) |
src,dst |
Установка битов операнда |
src .or. dst dst |
– |
– |
– |
– |
|
BIT(.B) |
src,dst |
Проверка битов операнда |
src .and. dst |
0 |
• |
• |
• |
|
|
|
|
|
|
|
|
|
|
BR* |
dst |
Переход по заданному адресу |
dst PC |
– |
– |
– |
– |
|
CALL |
dst |
Вызов подпрограммы |
PC+2 stack, dst PC |
– |
– |
– |
– |
|
|
|
|
|
|
|
|
|
|
CLR(.B)* |
dst |
Очистка операнда |
0 |
dst |
– |
– |
– |
– |
CLRC* |
|
Очистка бита C |
0 |
C |
– |
– |
– |
0 |
CLRN* |
|
Очистка бита N |
0 |
N |
– |
0 |
– |
– |
CLRZ* |
|
Очистка бита Z |
0 |
Z |
– |
– |
0 |
– |
CMP(.B) |
src,dst |
Сравнение двух операндов |
dst – src |
• |
• |
• |
• |
|
|
|
|
|
|
|
|
|
|
3.4. Система команд 93
Таблица 3.17. Набор команд MSP430 (продолжение)
Мнемоника |
Описание |
Операция |
V |
N |
Z |
C |
|
|
|
|
|
|
|
|
|
DADC(.B)* dst |
Сложение бита переноса с операндом |
dst + C dst (BCD) |
• |
• |
• |
• |
|
|
|
(BCD арифметика) |
|
|
|
|
|
|
|
|
|
|
|
|
|
DADD(.B) |
src,dst |
Сложение двух операндов с учётом |
src + dst + C dst (BCD) |
• |
• |
• |
• |
|
|
переноса (BCD арифметика) |
|
|
|
|
|
|
|
|
|
|
|
|
|
DEC(.B)* |
dst |
Декремент операнда |
dst – 1 dst |
• |
• |
• |
• |
DECD(.B)* dst |
Уменьшение операнда на 2 |
dst – 2 dst |
• |
• |
• |
• |
|
DINT* |
|
Запрещение прерываний |
0 GIE |
– |
– |
– |
– |
EINT* |
|
Разрешение прерываний |
1 GIE |
– |
– |
– |
– |
INC(.B)* |
dst |
Инкремент операнда |
dst +1 dst |
• |
• |
• |
• |
INCD(.B)* dst |
Увеличение операнда на 2 |
dst+2 dst |
• |
• |
• |
• |
|
INV(.B)* |
dst |
Инвертирование операнда |
.not.dst dst |
• |
• |
• |
• |
JC/JHS |
label |
Переход, если бит C установлен / Пе |
|
– |
– |
– |
– |
|
|
реход, если «выше или равно» |
|
|
|
|
|
|
|
|
|
|
|
|
|
JEQ/JZ |
label |
Переход, если «равно» / Переход, если |
|
– |
– |
– |
– |
|
|
бит Z установлен |
|
|
|
|
|
|
|
|
|
|
|
|
|
JGE |
label |
Переход, если «больше или равно» |
|
– |
– |
– |
– |
|
|
|
|
|
|
|
|
JL |
label |
Переход, если «меньше» |
|
– |
– |
– |
– |
|
|
|
|
|
|
|
|
JMP |
label |
Безусловный переход |
PC + 2 смещение PC |
– |
– |
– |
– |
|
|
|
|
|
|
|
|
JN |
label |
Переход, если бит N установлен |
|
– |
– |
– |
– |
|
|
|
|
|
|
|
|
JNC/JLO |
label |
Переход, если бит C не установлен / |
|
– |
– |
– |
– |
|
|
Переход, если «ниже» |
|
|
|
|
|
JNE/JNZ |
label |
Переход, если «не равно» / Переход, |
|
– |
– |
– |
– |
|
|
если бит Z не установлен |
|
|
|
|
|
MOV(.B) |
src,dst |
Пересылка операнда |
src dst |
– |
– |
– |
– |
NOP* |
|
Нет операции |
|
– |
– |
– |
– |
POP(.B)* |
dst |
Извлечение элемента из стека |
@SP dst, SP+2 SP |
– |
– |
– |
– |
PUSH(.B) |
src |
Загрузка операнда в стек |
SP – 2 SP, src @SP |
– |
– |
– |
– |
|
|
|
|
|
|
|
|
RET* |
|
Возврат из подпрограммы |
@SP PC, SP + 2 SP |
– |
– |
– |
– |
RETI |
|
Возврат из прерывания |
|
• |
• |
• |
• |
|
|
|
|
|
|
|
|
RLA(.B)* |
dst |
Арифметический сдвиг влево |
|
• |
• |
• |
• |
RLC(.B)* |
dst |
Сдвиг влево через перенос |
|
• |
• |
• |
• |
RRA(.B) |
dst |
Арифметический сдвиг вправо |
|
0 |
• |
• |
• |
|
|
|
|
|
|
|
|
RRC(.B) |
dst |
Сдвиг вправо через перенос |
|
• |
• |
• |
• |
|
|
|
|
|
|
|
|
SBC(.B)* |
dst |
Вычитание заёма из операнда |
dst + 0FFFFh + C dst |
• |
• |
• |
• |
SETC* |
|
Установка бита C |
1 C |
– |
– |
– |
1 |
SETN* |
|
Установка бита N |
1 N |
– |
1 |
– |
– |
SETZ* |
|
Установка бита Z |
1 Z |
– |
– |
1 |
– |
SUB(.B) |
src,dst |
Вычитание операндов |
dst + .not.src + 1 dst |
• |
• |
• |
• |
|
|
|
|
|
|
|
|
SUBC(.B) |
src,dst |
Вычитание операндов с учётом заёма |
dst + .not.src + C dst |
• |
• |
• |
• |
SWPB |
dst |
Обмен байтов |
|
– |
– |
– |
– |
|
|
|
|
|
|
|
|
SXT |
dst |
Расширение знака |
|
0 |
• |
• |
• |
|
|
|
|
|
|
|
|
TST(.B)* |
dst |
Проверка операнда (на ноль) |
dst + 0FFFFh + 1 |
0 |
• |
• |
• |
XOR(.B) |
src,dst |
«Исключающее ИЛИ» операндов |
src .xor. dst dst |
• |
• |
• |
• |
|
|
|
|
|
|
|
|
* Эмулируемые команды
• Влияет на бит состояния
– Не влияет на бит состояния 0 Бит состояния сбрасывается
1 Бит состояния устанавливается
94 Глава 4. 16#битное RISC ЦПУ MSP430X
ГЛАВА 4
16CБИТНОЕ RISC ЦПУ MSP430X
В этой главе описывается усовершенствованное ЦПУ MSP430X, позволяю щее адресовать до 1 МБ памяти, его режимы адресации и набор команд. ЦПУ MSP430X реализовано во всех микроконтроллерах семейства, имеющих адресное пространство более 64 КБ.
4.1.Введение в ЦПУ
ЦПУ MSP430X обладает рядом возможностей, специально предназначенных для поддержки современных методов программирования, таких как вычисляе мые переходы, табличные вычисления, а также использование языков высокого уровня, в частности языка Си. Центральный процессор MSP430X может адресо вать до 1 МБ памяти без разбиения её на страницы. Кроме того, в ряде случаев ЦПУ MSP430X требуется меньше времени на обслуживание прерываний и вы полнение команд, чем MSP430. ЦПУ MSP430X полностью обратно совместимо с ЦПУ MSP430.
ЦПУ MSP430X имеет следующие особенности:
RISC архитектура;
ортогональная архитектура;
полная доступность регистров, включая счётчик команд, регистры состоя ния и указатель стека;
однотактные регистровые операции;
большой регистровый файл, уменьшающий количество обращений
к памяти;
20 битная шина адреса, обеспечивающая прямой доступ и ветвление во всём диапазоне адресов;
16 битная шина данных, позволяющая напрямую оперировать 2 байтными значениями;
генератор констант формирует шесть наиболее часто используемых значе ний, уменьшая размер кода;
прямой обмен данными между ячейками памяти без промежуточной записи в регистр;
однобайтная, двухбайтная и 20 битная адресация.
Блок схема ЦПУ MSP430X приведена на Рис. 4.1.
|
|
|
4.1. Введение в ЦПУ 95 |
MDB – Шина данных |
|
Шина адреса – MAB |
|
19 |
16 |
15 |
0 |
R0/PC |
Счётчик команд |
0 |
|
R1/SP |
Указатель стека |
0 |
|
|
R2/SR Регистр состояния |
||
R3/CG2 Генератор констант |
|||
R4 |
Общего назначения |
|
|
R5 |
Общего назначения |
|
|
R6 |
Общего назначения |
|
|
R7 |
Общего назначения |
|
|
R8 |
Общего назначения |
|
|
R9 |
Общего назначения |
|
|
R10 |
Общего назначения |
|
|
R11 |
Общего назначения |
|
|
R12 |
Общего назначения |
|
|
R13 |
Общего назначения |
|
|
R14 |
Общего назначения |
|
|
R15 |
Общего назначения |
|
|
|
|
|
20 |
16
Ноль, Z |
|
|
|
|
dst |
src |
|
|
||||||||
|
|
|
|
|
||||||||||||
|
||||||||||||||||
Перенос, C |
|
|
|
|
|
|
16/20Cбитное |
|
|
MCLK |
||||||
|
|
|
|
|
|
|
|
|||||||||
Переполнение, V |
|
|
|
|
|
|||||||||||
|
|
|
АЛУ |
|
|
|
|
|
||||||||
Отрицательное |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||
значение, N |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.1. Блок схема ЦПУ MSP430X.
96 Глава 4. 16#битное RISC ЦПУ MSP430X
4.2.Прерывания
В ЦПУ MSP430X реализована такая же структура прерываний, что и в ЦПУ MSP430:
векторные прерывания, не требующие программного опроса;
таблица векторов располагается начиная с адреса 0FFFEh в сторону млад
ших адресов.
Работа системы прерываний обоих ЦПУ описана во 2 й главе настоящей кни ги (раздел 2.2 «Прерывания»). В таблице векторов прерываний содержатся 16 битные адреса, указывающие на нижнюю область памяти объёмом 64 КБ. Это оз начает, что точки входа во все процедуры обработки прерываний должны нахо диться в этом диапазоне адресов — даже в моделях с ЦПУ MSP430X.
Во время прерывания счётчик команд PC и регистр состояния SR сохраняют ся в стеке, как показано на Рис. 4.2. Для эффективного сохранения 20 битного значения счётчика команд биты 19:16 этого регистра автоматически добавляются к содержимому регистра SR, сохранённому в стеке. При выполнении команды RETI восстанавливается полное 20 битное значение счётчика команд, обеспечи вая возврат из обработчика прерывания по любому адресу из доступного диапазо на адресов.
|
|
|
|
SPold |
|
|
Элемент n – 1 |
|
|
||
|
|
|
PC.15:0 |
SP |
|
|
|
|
PC.19:16 |
SR.11:0 |
|
|
|||
|
|
|
|
|
|
|
|
Рис. 4.2. Сохранение счётчика команд в стеке во время прерывания.
4.3.Регистры ЦПУ
Центральный процессор содержит шестнадцать регистров R0…R15. Регистры R0, R1, R2 и R3 имеют специальные функции. Регистры с R4 по R15 являются ра бочими регистрами общего назначения.
4.3.1. Счётчик команд (PC)
20 битный счётчик команд (PC/R0) указывает на следующую команду, кото рая будет выполняться. Каждая команда занимает в памяти чётное число байтов (два, четыре, шесть или восемь), и на это же значение инкрементируется счётчик команд. Выборка команд осуществляется пословно, при этом счётчик команд указывает на чётные адреса. Формат счётчика команд PC приведён на Рис. 4.3.
19 |
16 |
15 |
1 |
0 |
|
|
|
|
|
|
|
Биты счётчика команд с 19 го по 1 й |
|
0 |
|
|
|
|
|
Рис. 4.3. Счётчик команд (PC).
4.3. Регистры ЦПУ 97
Счётчик команд может быть адресован всеми командами с использованием любого режима адресации:
MOV.W |
#LABEL,PC |
; Переход к адресу LABEL (младшие 64 КБ) |
MOVA |
#LABEL,PC |
; Переход к адресу LABEL (вся адресуемая память (1 Мб)) |
MOV.W |
LABEL,PC |
; Переход к адресу, содержащемуся в LABEL (младшие 64 КБ) |
MOV.W |
@R14,PC |
; Косвенный переход по адресу, содержащемуся |
|
|
; в R14 (младшие 64 КБ) |
ADDA |
#4,PC |
; Пропуск двух слов (вся адресуемая память (1 МБ)) |
Команды BR и CALL обнуляют четыре старших бита счётчика команд. То есть эти команды позволяют выполнять переход только в пределах младших 64 КБ ад ресов. Адреса, расположенные вне этого диапазона, могут быть достигнуты толь ко с помощью команд BRA или CALLA. Кроме того, любая команда, непосред ственно модифицирующая PC, делает это в соответствии с используемым режи мом адресации. Например, команда MOV.W #value,PC сбросит 4 старших бита счётчика команд, поскольку имеет суффикс .W.
Счётчик команд автоматически сохраняется в стеке при выполнении команд CALL или CALLA, а также при переходе к процедуре обработки прерывания. Содер жимое стека с адресом возврата после выполнения команды CALLA показано на Рис. 4.4. Команда CALL сохраняет только биты 15:0 счётчика команд.
SPold |
|
Элемент n |
|
PC.19:16
SP |
PC.15:0 |
Рис. 4.4. Сохранение счётчика команд в стеке командой CALLA.
Команда RETA восстанавливает биты 19:0 счётчика команд и увеличивает на 4 указатель стека. Команда RET восстанавливает биты 15:0 счётчика команд и уве личивает указатель стека на 2.
4.3.2. Указатель стека (SP)
20 битный указатель стека (SP/R1) используется ЦПУ для сохранения адре сов возврата из подпрограмм и прерываний. При этом он изменяется по предде крементной/постинкрементной схеме. Кроме того, указатель стека может ис пользоваться со всеми командами и любыми режимами адресации. Формат ука зателя стека SP приведён на Рис. 4.5. Указатель стека инициализируется (устанавливается на заданную ячейку ОЗУ) пользователем и выравнивается по чётным адресам.
19 |
1 |
0 |
Биты указателя стека с 19 го по 1 й |
|
0 |
|
|
|
Рис. 4.5. Указатель стека.
98 Глава 4. 16#битное RISC ЦПУ MSP430X
Использование стека проиллюстрировано на Рис. 4.6. На Рис. 4.7 показано использование стека при сохранении 20 битных адресов.
Адрес |
|
|
PUSH #0123h |
|
POP R8 |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0xxxh |
I1 |
|
|
I1 |
|
|
I1 |
|
|
|
|
|
|
|
|
|
|
|
|
0xxxh – 2 |
I2 |
|
|
I2 |
|
|
I2 |
|
|
|
|
|
SP |
|
|
|
|
|
SP |
0xxxh – 4 |
I3 |
|
I3 |
|
SP |
I3 |
|
||
|
|
|
|||||||
0xxxh – 6 |
|
|
|
0123h |
|
|
|
|
|
|
|
|
|
|
|
||||
0xxxh – 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.6. Использование стека. |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SP old |
|
|
Элемент n – 1 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
Эл т n.19:16 |
|
|
|
SP |
|
|
|
|
|
|
|
|
|
Эл т n.15:0 |
|
||
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 4.7. Результат выполнения команды PUSHX.A. |
|||||
MOV.W |
2(SP),R6 |
; Элемент стека I2 $> R6 |
|||||
MOV.W |
R7,0(SP) |
; Перезаписать значение на вершине стека (TOS) |
|||||
|
|
; содержимым R7 |
|
|
|
||
PUSH |
#0123h |
; Поместить число 0123h в стек |
|||||
POP |
R8 |
; R8 = 0123h |
|
|
|
К особым случаям относится использование указателя стека SP в качестве ар гумента команд PUSH и POP. Эти ситуации показаны и объяснены на Рис. 4.8.
|
|
PUSH SP |
|
|
POP SP |
||
SP old |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SP 1 |
|
SP 1 |
|
SP 2 |
|
SP 1 |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
Указатель стека изменяется |
Указатель стека не изменяется после |
||||||
после выполнения команды |
выполнения команды POP SP. Эта |
||||||
PUSH SP |
|
|
команда помещает SP1 в указатель |
||||
|
|
|
|
стека (SP2 = SP1). |
Рис. 4.8. Выполнение последовательности команд PUSH SP — POP SP.
4.3. Регистры ЦПУ 99
4.3.3. Регистр состояния (SR)
16 битный регистр состояния (SR/R2) может выступать в качестве регистра источника или регистра приёмника только в командах, оперирующих двухбайт ными значениями, и только при использовании режима регистровой адресации. Прочие комбинации режимов адресации используются для поддержки генерато ра констант. Формат регистра состояния SR приведён на Рис. 4.9. Нельзя записы вать в регистр SR 20 байтные значения — результат этой операции будет непред сказуемым.
15 |
9 |
8 |
7 |
|
|
|
|
|
0 |
|
|
|||||
|
|
|
Зарезерировано |
V |
|
SCG1 |
SCG0 |
OSC |
CPU |
GIE |
N |
Z |
C |
|
||
|
|
|
|
|
|
|
|
|
OFF |
OFF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rw – 0 |
|
|
|
|
|
|
|
|
|||
|
|
|
Рис. 4.9. Формат регистра состояния. |
|
|
|
|
|
|
|||||||
Назначение битов регистра SR описано в Табл. 4.1. |
|
|
|
|
|
|
||||||||||
Таблица 4.1. Биты регистра состояния |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Бит |
|
|
|
Описание |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
V |
Флаг переполнения. Этот бит устанавливается, если результат арифметической операции |
|||||||||||||||
|
|
|
выходит за границы допустимых значений для знаковых величин |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADD(.B), ADDX(.B,.A), |
Устанавливается, когда: |
|
|
|
|
|
|
||||||
|
|
|
ADDC(.B), ADDCX(.B,.A), |
Положительное + Положительное = Отрицательное, |
||||||||||||
|
|
|
ADDA |
Отрицательное + Отрицательное = Положительное, |
||||||||||||
|
|
|
|
в противном случае сбрасывается |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SUB(.B), SUBX(.B,.A), |
Устанавливается, когда: |
|
|
|
|
|
|
||||||
|
|
|
SUBC(.B),SUBCX(.B,.A), |
Положительное – Отрицательное = Отрицательное, |
||||||||||||
|
|
|
SUBA, CMP(.B), |
Отрицательное – Положительное = Положительное, |
||||||||||||
|
|
|
CMPX(.B,.A), CMPA |
в противном случае сбрасывается |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SCG1 |
Системный тактовый генератор 1. Когда этот бит установлен, генератор DCO выключен, |
|||||||||||||||
|
|
|
если сигнал DCOCLK не используется для формирования сигналов MCLK или SMCLK |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SCG0 |
Системный тактовый генератор 0. Когда этот бит установлен, выключается схема авто |
|||||||||||||||
|
|
|
подстройки частоты модуля тактирования FLL+ |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OSCOFF |
Выключение генератора. Когда этот бит установлен, кварцевый генератор LFXT1 выклю |
|||||||||||||||
|
|
|
чен, если сигнал LFXT1CLK не используется для формирования сигналов MCLK или |
|||||||||||||
|
|
|
SMCLK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CPUOFF |
Выключение ЦПУ. Когда этот бит установлен, ЦПУ выключено |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GIE |
Общий бит разрешения прерываний. Когда этот бит установлен, маскируемые прерыва |
|||||||||||||||
|
|
|
ния разрешены. После сброса все маскируемые прерывания запрещены |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
N |
Флаг отрицательного результата. Этот бит устанавливается, если результат арифметичес |
|||||||||||||||
|
|
|
кой операции отрицателен, и сбрасывается, если результат положителен |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Z |
Флаг нуля. Этот бит устанавливается, если результат арифметической операции равен ну |
|||||||||||||||
|
|
|
лю, и сбрасывается в противном случае |
|
|
|
|
|
|
|
|
CФлаг переноса. Этот бит устанавливается, если при выполнении арифметической опера ции возникает перенос, и сбрасывается, если переноса не возникает
100 Глава 4. 16#битное RISC ЦПУ MSP430X
4.3.4. Регистры генератора констант CG1 и CG2
С помощью регистров генератора констант R2 и R3 генерируются шесть часто используемых значений. Выбор конкретной константы осуществляется измене нием режима адресации регистра источника (As) в соответствии с Табл. 4.2.
Таблица 4.2. Значения, формируемые генератором констант
Регистр |
As |
Константа |
Примечания |
|
|
|
|
R2 |
00 |
— |
Регистровый режим адресации |
|
|
|
|
R2 |
01 |
(0) |
Абсолютный режим адресации |
|
|
|
|
R2 |
10 |
00004h |
+4, операции над битами |
|
|
|
|
R2 |
11 |
00008h |
+8, операции над битами |
|
|
|
|
R3 |
00 |
00000h |
0, операции над словами |
|
|
|
|
R3 |
01 |
00001h |
+1 |
|
|
|
|
R3 |
10 |
00002h |
+2, операции над битами |
|
|
|
|
R3 |
11 |
FFh, FFFFh, FFFFFh |
–1, операции над словами |
|
|
|
|
Преимущества генератора констант:
не требуются особые команды;
не требуется дополнительное слово памяти программ для хранения конс танты;
не требуется обращаться к памяти программ для загрузки константы. Ассемблер автоматически использует генератор констант, если любая из шес
ти указанных констант служит в качестве непосредственного операнда источни ка. Если регистры R2 и R3 используются в режиме генерации констант, их нельзя адресовать явно — они выступают только в качестве источников.
Генератор констант — расширение набора команд
Система команд MSP430 содержит всего 27 инструкций. Однако наличие ге нератора констант позволяет ассемблеру MSP430 использовать 24 дополнитель ных (эмулируемых) команд. К примеру, однооперандная команда:
CLR dst
эмулируется двухоперандной командой, занимающей в памяти столько же места:
MOV R3,dst
в которой ассемблер заменил константу #0 обращением к регистру R3 с As = 00. Команда
INC dst
заменяется командой
ADD 0(R3),dst