Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорная техника / Семейство микроконтроллеров MSP430x2xx_

.pdf
Скачиваний:
94
Добавлен:
05.03.2016
Размер:
2.03 Mб
Скачать

4.6. Описание набора команд 161

JEQ

Переход[.W], если «равно»

JZ

Переход, если ноль

 

 

 

 

Синтаксис

JEQ

label

 

 

JZ

label

 

 

 

Операция

Если Z = 1, то PC + (2 смещение) PC.

 

Если Z = 0, то выполняется следующая команда.

 

 

Описание

Проверяется бит нуля (Z) регистра состояния. Если он установлен, смещение (10 бит

 

ное число со знаком), содержащееся в слове команды, умножается на 2, расширяется до

 

20 битного значения и прибавляется к счётчику команд. Это позволяет осуществлять

 

переход в диапазоне от –511 до +512 слов относительно текущего значения счётчика ко

 

манд в пределах всего адресного пространства. Если бит Z сброшен, то выполняется ко

 

манда, следующая за командой перехода.

 

Команда JZ используется для проверки бита нуля Z.

 

Команда JEQ используется для сравнения операндов

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Сигнал P2IN.0 используется для управления ходом выполнения программы.

 

BIT.B

#1,&P2IN

; Бит 0 порта 2 сброшен?

 

JZ

Label1

; Да, переходим к Label1

 

...

 

; Нет, продолжаем выполнение

 

 

Пример 2

Если R5 = 15000h (20 битное число), то выполнение программы продолжается с метки

 

Label2.

 

 

 

CMPA

#15000h,R5

; R5 = 15000h? Признак – бит Z

 

JEQ

Label2

; Да, R5 = 15000h, Z = 1

 

...

 

; Нет, R5 15000h. Остаёмся здесь

 

 

Пример 3

Содержимое регистра R7 (20 битный счётчик) инкрементируется. Если оно становится

 

равным нулю, то выполняется переход к метке Label4.

 

ADDA

#1,R7

; Инкрементируем R7

 

JZ

Label4

; Достигли нуля? Переходим к Label4

 

...

 

; R7 0. Остаёмся здесь

 

 

 

 

162 Глава 4. 16#битное RISC ЦПУ MSP430X

JGE

Переход[.W], если «больше или равно» (сравнение со знаком)

 

 

 

 

Синтаксис

JGE

label

 

 

 

Операция

Если (N .xor. V) = 0, то PC + (2 смещение) PC.

 

Если (N .xor. V) = 1, то выполняется следующая команда.

 

 

Описание

Проверяются биты переполнения (V) и отрицательного значения (N) регистра состояния.

 

Если установлены или сброшены оба бита, то смещение (10 битное число со знаком), со

 

держащееся в слове команды, умножается на 2, расширяется до 20 битного значения и

 

прибавляется к счётчику команд. Это позволяет осуществлять переход в диапазоне от

 

–511 до +512 слов относительно текущего значения счётчика команд в пределах всего ад

 

ресного пространства. Если установлен только один бит, то выполняется команда, следу

 

ющая за командой перехода. Эта команда используется при сравнении чисел со знаком.

 

Команда JGE используется для сравнения операндов со знаком: даже в случае некоррек

 

тного результата, вызванного переполнением, результат сравнения будет корректным.

 

Примечание. Команда JGE эмулирует нереализованную команду JP (переход, если ре

 

зультат положителен) при использовании после команд AND, BIT, RRA, SXTX и TST. Эти

 

команды сбрасывают бит V регистра состояния

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Если байт EDE (нижние 64 КБ) содержит положительное число, то выполняется пере

 

ход к метке Label1. Этот пример может выполняться в любом месте адресного про

 

странства.

 

 

 

TST.B

&EDE

; EDE > 0? V <$ 0

 

JGE

Label1

; Да, JGE эмулирует команду JP

 

...

 

; Нет, 80h <= EDE <= FFh

 

 

Пример 2

Если содержимое регистра R6 больше или равно содержимому ячейки памяти, адресуе

 

мой регистром R7, то выполняется переход к метке Label5. Сравниваются числа со

 

знаком. Данные и программа могут располагаться в любом месте адресного пространс

 

тва.

 

 

 

CMP

@R7,R6

; R6 >= @R7?

 

JGE

Label5

; Да, переходим к Label5

 

...

 

; Нет, остаёмся здесь

 

 

Пример 3

Если R5 12345h (операнд со знаком), то выполнение программы продолжается с метки

 

Label2. Программа может располагаться в любом месте адресного пространства.

 

CMPA

#12345h,R5

; R5 >= 12345h

 

JGE

Label2

; Да, 12344h < R5 <=7FFFFh

 

...

 

; Нет, 80000h <= R5 < 12345h

 

 

 

 

 

 

 

4.6. Описание набора команд 163

 

 

JL

Переход, если «меньше» (сравнение со знаком)

 

 

 

 

Синтаксис

JL

label

 

 

 

Операция

Если (N .xor. V) = 1, то PC + (2 смещение) PC.

 

Если (N .xor. V) = 0, то выполняется следующая команда.

 

 

Описание

Проверяются биты переполнения (V) и отрицательного значения (N) регистра состоя

 

ния. Если установлен только один из битов, то смещение (10 битное число со знаком),

 

содержащееся в слове команды, умножается на 2, расширяется до 20 битного значения

 

и прибавляется к счётчику команд. Это позволяет осуществлять переход в диапазоне от

 

–511 до +512 слов относительно текущего значения счётчика команд в пределах всего

 

адресного пространства. Если установлены или сброшены оба бита, то выполняется ко

 

манда, следующая за командой перехода.

 

Команда JL используется для сравнения операндов со знаком: даже в случае некоррект

 

ного результата, вызванного переполнением, результат сравнения будет корректным

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Если содержимое байта EDE меньше, чем байта TONI, то выполняется переход к метке

 

Label1. Байт EDE находится в пределах области PC ±32 КБ.

 

CMP.B

&EDE,TONI

; EDE < TONI

 

JL

Label1

; Да

 

...

 

; Нет, TONI <= EDE

 

 

Пример 2

Если содержимое регистра R6 меньше содержимого ячейки памяти, адресуемой регист

 

ром R7 (20 битный адрес), то выполняется переход к метке Label5. Данные и програм

 

ма могут располагаться в любом месте адресного пространства.

 

CMP

@R7,R6

; R6 < @R7?

 

JL

Label5

; Да, переходим к Label5

 

...

 

; Нет, остаёмся здесь

 

 

Пример 3

Если R5 < 12345h (операнд со знаком), то выполнение программы продолжается с метки

 

Label2. Данные и программа могут располагаться в любом месте адресного прост

 

ранства.

 

 

 

CMPA

#12345h,R5

; R5 < 12345h

 

JL

Label5

; Да, 80000h <= R5 < 12345h

 

...

 

; Нет, 12344h < R5 <=7FFFFh

 

 

 

 

164 Глава 4. 16#битное RISC ЦПУ MSP430X

JMP

Безусловный переход

 

 

 

 

Синтаксис

JMP

label

 

 

 

 

Операция

PC + (2 смещение) PC

 

 

 

Описание

Смещение (10 битное число со знаком), содержащееся в слове команды, умножается на

 

2, расширяется до 20 битного значения и прибавляется к счётчику команд. Это позволя

 

ет осуществлять переход в диапазоне от –511 до +512 слов относительно текущего зна

 

чения счётчика команд в пределах всего адресного пространства. Данная команда может

 

использоваться вместо команды BR или BRA для реализации перехода в пределах от –511

 

до +512 слов относительно счётчика команд

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

В байт STATUS заносится число 10, после чего выполняется переход к метке MAINLOOP.

 

Байт STATUS располагается в нижней 64 КБ области памяти, а программа может распо

 

лагаться в любом месте адресного пространства.

 

MOV.B

#10,&STATUS

; STATUS = 10

 

JMP

MAINLOOP

; Переходим к основному циклу

Пример 2 Считывается содержимое вектора прерывания Timer_A3, которое затем используется для перехода к требуемому обработчику. Программа может располагаться в любом месте адресного пространства, однако точки входа в обработчики прерываний должны распо лагаться в нижней 64 КБ области памяти.

ADD

&TAIV,PC

; Прибавляем содержимое вектора

к PC

RETI

 

; Нет

прерываний Timer_A

 

JMP

IHCCR1

; Было прерывание

от

1$го блока

таймера

JMP

IHCCR2

;

Было прерывание

от

2$го блока

таймера

RETI

 

;

Нет

обрабатываемых

прерываний, выходим

 

 

 

4.6. Описание набора команд 165

 

 

JN

Переход, если отрицательное значение

 

 

 

 

Синтаксис

JN

label

 

 

 

Операция

Если N = 1, то PC + (2 смещение) PC.

 

Если N = 0, то выполняется следующая команда.

 

 

Описание

Проверяется бит отрицательного значения (N) регистра состояния. Если он установлен,

 

то смещение (10 битное число со знаком), содержащееся в слове команды, умножается

 

на 2, расширяется до 20 битного значения и прибавляется к счётчику команд. Это поз

 

воляет осуществлять переход в диапазоне от –511 до +512 слов относительно текущего

 

значения счётчика команд в пределах всего адресного пространства. Если бит N сбро

 

шен, то выполняется команда, следующая за командой перехода

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Проверяется содержимое байта COUNT. Если оно отрицательно, то выполнение про

 

граммы продолжается с метки Label0. Байт COUNT располагается в нижней 64 КБ об

 

ласти памяти, а программа может располагаться в любом месте адресного пространства.

 

TST.B

&COUNT

; COUNT < 0?

 

JN

L$1

; Да, переходим к Label0

 

...

 

; COUNT 0

 

 

Пример 2

Регистр R6 вычитается из R5. Если результат отрицателен, то выполняется переход к

 

метке Label2. Программа может располагаться в любом месте адресного пространства.

 

SUB

R6,R5

; R5 – R6 $> R5

 

JN

Label2

; R5 < 0: R6 > R5 (N = 1)

 

...

 

; R5 0, остаёмся здесь

 

 

Пример 3

Регистр R7 (20 битный счётчик) декрементируется. Если его значение становится отри

 

цательным, то выполнение программы продолжается с метки Label4. Программа мо

 

жет располагаться в любом месте адресного пространства.

 

SUBA

#1,R7

; Декрементируем R7

 

JN

Label4

; R7 < 0, переходим к Label4

 

...

 

; R7 0, остаёмся здесь

 

 

 

 

166 Глава 4. 16#битное RISC ЦПУ MSP430X

JNC

Переход, если нет переноса

JLO

Переход, если «ниже» (сравнение без знака)

 

 

 

 

Синтаксис

JNC

label

 

 

JLO

label

 

 

 

Операция

Если С = 0, то PC + (2 смещение) PC.

 

Если С = 1, то выполняется следующая команда.

 

 

Описание

Проверяется бит переноса (C) регистра состояния. Если он сброшен, то смещение (10

 

битное число со знаком), содержащееся в слове команды, умножается на 2, расширяется

 

до 20 битного значения и прибавляется к счётчику команд. Это позволяет осуществлять

 

переход в диапазоне от –511 до +512 слов относительно текущего значения счётчика ко

 

манд в пределах всего адресного пространства. Если бит C установлен, то выполняется

 

команда, следующая за командой перехода.

 

Команда JNC используется для проверки бита переноса C.

 

Команда JLO используется для сравнения чисел без знака

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Если EDE <15, выполняется переход к метке Label2. Сравниваются числа без знака.

 

Байт EDE располагается в нижней 64 КБ области памяти, а программа может распола

 

гаться в любом месте адресного пространства.

 

CMP.B

#15,&EDE

; EDE < 15? Признак –> бит C

 

JLO

Label2

; Да, EDE < 15. C = 0

 

...

 

; Нет, EDE 15. Остаёмся здесь

Пример 2 Слово TONI прибавляется к содержимому регистра R5. При отсутствии переноса вы полнение программы продолжается с метки Label0. Адрес TONI находится в пределах PC ±32 КБ.

ADD

TONI,R5

; TONI + R5 $>

R5. Перенос –>

C

JNC

Label0

; Нет

переноса

 

 

...

 

; Был

перенос, остаёмся здесь

 

4.6. Описание набора команд 167

JNZ

Переход, если не ноль

JNE

Переход, если «не равно»

 

 

 

 

Синтаксис

JNZ

label

 

 

JNE

label

 

 

 

Операция

Если Z = 0, то PC + (2 смещение) PC.

 

Если Z = 1, то выполняется следующая команда.

 

 

Описание

Проверяется бит нуля (Z) регистра состояния. Если он сброшен, то смещение (10 бит

 

ное число со знаком), содержащееся в слове команды, умножается на 2, расширяется до

 

20 битного значения и прибавляется к счётчику команд. Это позволяет осуществлять

 

переход в диапазоне от –511 до +512 слов относительно текущего значения счётчика ко

 

манд в пределах всего адресного пространства. Если бит Z установлен, то выполняется

 

команда, следующая за командой перехода.

 

Команда JNZ используется для проверки бита нуля Z.

 

Команда JNE используется для сравнения операндов

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Проверяется значение байта STATUS. Если он не равен нулю, то выполняется переход к

 

метке Label3. Адрес байта STATUS находится в диапазоне PC ±32 КБ.

 

TST.B

STATUS

; STATUS = 0?

 

JNZ

Label3

; Нет, переходим к Label3

 

...

 

; Да, остаёмся здесь

 

 

Пример 2

Если слово EDE не равно 1500, то выполняется переход к метке Label2. Слово EDE

 

располагается в нижней 64 КБ области памяти, а программа может располагаться в лю

 

бом месте адресного пространства.

 

CMP

#1500,&EDE

; EDE = 1500? Признак –> бит Z

 

JNE

Label2

; Нет, EDE 1500.

 

...

 

; Да, EDE = 1500. Продолжаем

 

 

Пример 3

Регистр R7 (20 битный счётчик) декрементируется. Если он не равен нулю, то выполня

 

ется переход к метке Label4. Программа может располагаться в любом месте адресного

 

пространства.

 

 

SUBA

#1,R7

; Декрементируем R7

 

JNZ

Label4

; R7 0, переходим к Label4

 

...

 

; R7 = 0, остаёмся здесь

 

 

 

 

168 Глава 4. 16#битное RISC ЦПУ MSP430X

MOV[.W], MOV.B Пересылка операнда

Синтаксис

MOV

src,dst или

MOV.W

src,dst

 

 

 

MOV.B

src,dst

 

 

 

 

 

 

 

 

 

 

 

Операция

src dst

 

 

 

 

 

 

 

Описание

Операнд источник пересылается в операнд приёмник. Содержимое операнда источни

 

ка не изменяется

 

 

 

 

 

 

 

 

 

 

Биты

Биты состояния не изменяются

 

 

 

состояния

 

 

 

 

 

 

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

 

 

режима

 

 

 

 

 

 

 

 

 

Пример 1

16 битная константа 1800h загружается в слово EDE (нижняя 64 КБ область).

 

MOV

#01800h,&EDE

; 1800h $> EDE

 

 

 

 

Пример 2

Содержимое таблицы EDE (2 байтные элементы, 16 битная адресация) копируется в

 

таблицу TOM. Размер таблиц — 030h слов. Обе таблицы располагаются в нижней 64 КБ

 

области памяти.

 

 

 

 

 

 

 

MOV

#EDE,R10

 

;

Инициализируем указатель

 

Loop

MOV

@R10+,TOM$EDE$2(R10)

;

Используем указатель в R10

 

 

 

 

 

 

;

для обеих таблиц. R10 + 2

 

 

CMP

#EDE+60h,R10

 

;

Достигли конца таблицы?

 

 

JLO

Loop

 

 

;

Ещё нет

 

 

...

 

 

 

;

Копирование завершено

 

 

Пример 3

Содержимое таблицы EDE (1 байтные элементы, 16 битная адресация) копируется в

 

таблицу TOM. Размер таблиц — 020h байтов. Обе таблицы могут располагаться в любом

 

месте адресного пространства, однако должны находиться в пределах R10 ± 32 КБ.

 

 

MOVA

#EDE,R10

 

; Инициализируем указатель

 

 

MOV

#020h,R9

 

; Инициализируем счетчик

 

Loop

MOV.B

@R10+,TOM$EDE$1(R10)

; Используем указатель в R10

 

 

 

 

 

 

; для обеих таблиц. R10 + 1

 

 

DEC

R9

 

 

; Декрементируем счётчик

 

 

JNZ

Loop

 

 

; Счётчик 0, продолжаем

 

 

 

 

 

 

; копирование

 

 

...

 

 

 

; Копирование завершено

 

 

 

 

 

 

 

 

 

 

4.6. Описание набора команд 169

 

 

* NOP

Нет операции

 

 

 

Синтаксис

NOP

 

 

 

 

Операция

Нет

 

 

 

 

Эмуляция

MOV

#0,R3

 

 

Описание

Не выполняется никаких операций. Команда может использоваться для замены рабочих

 

команд при отладке программы или для формирования задержек

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

* POP[.W], * POP.B Извлечение операнда из стека

Синтаксис

POP

dst

или

POP.W

dst

 

POP.B

dst

 

 

 

 

 

 

 

 

Операция

@SP temp

 

 

 

 

SP + 2 SP

 

 

 

 

temp dst

 

 

 

 

 

 

 

 

Эмуляция

MOV

@SP+,dst

или

MOV.W @SP+,dst

 

MOV.B

@SP+,dst

 

 

 

 

Описание

Элемент стека, адресуемый указателем стека (TOS), извлекается в операнд приёмник.

 

После этого указатель стека увеличивается на 2

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

 

 

Пример 1

Содержимое R7 и регистра состояния восстанавливаются из стека.

 

POP

R7

;

Извлекаем R7

 

POP

SR

;

Извлекаем регистр состояния

 

 

Пример 2

Содержимое байта LEO в ОЗУ восстанавливается из стека.

 

POP.B

LEO

;

Копируем младший байт из стека в LEO

 

 

Пример 3

Содержимое R7 восстанавливается из стека.

 

POP.B

R7

;

Копируем младший байт из стека в R7

 

 

 

;

Старший байт R7 = 0

 

 

Пример 4

Содержимое ячейки памяти, на которую указывает R7, и регистра состояния восстанав

 

ливается из стека.

 

 

 

POP.B

0(R7) ;

Копируем младший байт с вершины стека в ОЗУ

 

 

 

;

по адресу, хранящемуся в регистре R7

 

POP

SR

;

Загружаем последнее слово из стека в регистр SR

 

 

 

 

 

 

Примечание. Указатель системного стека

Указатель системного стека (SP) всегда увеличивается на 2, независимо от разряд ности (байт/слово) операнда команды.

170 Глава 4. 16#битное RISC ЦПУ MSP430X

PUSH[.W], PUSH.B Сохранение операнда в стек

Синтаксис

PUSH

src

или PUSH.W src

 

PUSH.B

src

 

 

 

 

Операция

SP – 2 SP

 

 

src @SP

 

 

 

 

Описание

20 битный указатель стека SP уменьшается на 2, после чего содержимое операнда ис

 

точника помещается в ОЗУ по адресу, определяемому указателем. При сохранении

 

1 байтного значения оно помещается в младший байт слова памяти, содержимое

 

старшего слова при этом не изменяется

 

 

Биты

Биты состояния не изменяются

состояния

 

 

 

 

 

Биты

OSCOFF, CPUOFF и GIE не изменяются

режима

 

 

 

 

 

Пример 1

Содержимое регистров R9 и R10 сохраняется в стеке.

 

PUSH

R9

; Сохраняем регистр R9

 

PUSH

R10

; Сохраняем регистр R10

 

 

Пример 2

Содержимое двух байтов EDE и TONI сохраняется в стеке. Адреса обоих байтов нахо

 

дятся в диапазоне PC ±32 КБ.

 

PUSH.B

EDE

; Сохраняем EDE

 

PUSH.B

TONI

; Сохраняем TONI