Скачиваний:
83
Добавлен:
01.05.2014
Размер:
817.66 Кб
Скачать
    1. Система команд

Процессор ARM7TDMI поддерживает два набора инструкций:

  • 32-разрядный набор инструкций ARM;

  • 16-разрядный набор инструкций Thumb.

Рис.6. Форматы набора инструкций ARM

Некоторые коды инструкций не определены, но они не вызывают поиска неопределенных инструкций, например, инструкция умножения с битом 6 измененным к 1. Запрещается использовать такие инструкции, т.к. в будущем их действие может быть изменено. Результат выполнения данных кодов инструкций в составе процессора ARM7TDMI непредсказуем.

Таблица 5. Условные обозначения

Тип

Описание

{cond}

Поле условия

<Oprnd2>

Операнд 2

{field}

Поле управления

S

Устанавливает коды условия, опционально

B

Операция над байтами, опционально

H

Операция над полусловами, опционально

T

Принудительная трансляция адреса. Не может использоваться с предварительно индексированными адресами.

#32bit_Imm

32-разрядная константа, полученная путем сдвига вправо 8-разрядного значения на четное количество бит.

<reglist>

Список регистров, разделенных запятой, в фигурных скобках ( { and } ).

Таблица 6. Краткое преставление инструкций ARM

Операции

 

Синтаксис Ассемблера

Пересылка

Пересылка

MOV {cond}{S} Rd, <Oprnd2>

Пересылка NOT

MVN {cond}{S} Rd, <Oprnd2>

Пересылка SPSR в регистр

MRS {cond} Rd, SPSR

Пересылка CPSR в регистр

MRS {cond} Rd, CPSR

Пересылка регистра SPSR

MSR {cond} SPSR{field}, Rm

Пересылка CPSR

MSR {cond} CPSR{field}, Rm

Пересылка константы во флаги SPSR

MSR {cond} SPSR_f, #32bit_Imm

Пересылка константы во флаги CPSR

MSR {cond} CPSR_f, #32bit_Imm

Арифметические

Сложение

ADD {cond}{S} Rd, Rn, <Oprnd2>

Сложение с переносом

ADC {cond}{S} Rd, Rn, <Oprnd2>

Вычитание

SUB {cond}{S} Rd, Rn, <Oprnd2>

Вычитание с переносом

SBC {cond}{S} Rd, Rn, <Oprnd2>

Вычитание обратного вычитания

RSB {cond}{S} Rd, Rn, <Oprnd2>

Вычитание обратного вычитания с переносом

RSC {cond}{S} Rd, Rn, <Oprnd2>

Умножение

MUL {cond}{S} Rd, Rm, Rs

Умножение-накопление

MLA {cond}{S} Rd, Rm, Rs, Rn

Умножение длинных беззнаковых чисел

UMULL {cond}{S} RdLo, RdHi, Rm, Rs

Умножение - беззнаковое накопление длинных значений

UMLAL {cond}{S} RdLo, RdHi, Rm, Rs

Умножение знаковых длинных

SMULL {cond}{S} RdLo, RdHi, Rm, Rs

Умножение - знаковое накопление длинных значений

SMLAL {cond}{S} RdLo, RdHi, Rm, Rs

Сравнение

CMP {cond} Rd, <Oprnd2>

Сравнение отрицательное

CMN {cond} Rd, <Oprnd2>

Логические

Проверка

TST {cond} Rn, <Oprnd2>

Проверка на эквивалентность

TEQ {cond} Rn, <Oprnd2>

Лог. И

AND {cond}{S} Rd, Rn, <Oprnd2>

Искл. ИЛИ

EOR {cond}{S} Rd, Rn, <Oprnd2>

ORR

ORR {cond}{S} Rd, Rn, <Oprnd2>

Сброс бита

BIC {cond}{S} Rd, Rn, <Oprnd2>>

Переход

Переход

B {cond} label

Переход по ссылке

BL {cond} label

Переход и изменение набора инструкций

BX {cond} Rn

Чтение

слова

LDR {cond} Rd, <a_mode2>

слова с преимуществом режима пользователя

LDR {cond}T Rd, <a_mode2P>

байта

LDR {cond}B Rd, <a_mode2>

байта с преимуществом режима пользователя

LDR {cond}BT Rd, <a_mode2P>

байта со знаком

LDR {cond}SB Rd, <a_mode3>

полуслова

LDR {cond}H Rd, <a_mode3>

полуслова со знаком

LDR {cond}SH Rd, <a_mode3>

операции с несколькими блоками данных

-

 с предварительным инкрементом

LDM {cond}IB Rd{!}, <reglist>{^}

 с последующим инкрементом

LDM {cond}IA Rd{!}, <reglist>{^}

 с предварительным декрементом

LDM {cond}DB Rd{!}, <reglist>{^}

 с последующим декрементом

LDM {cond}DA Rd{!}, <reglist>{^}

 операция над стеком

LDM {cond}<a_mode4L> Rd{!}, <reglist>

 операция над стеком и восстановление CPSR

LDM {cond}<a_mode4L> Rd{!}, <reglist+pc>^

операция над стеком с регистрами пользователя

LDM {cond}<a_mode4L> Rd{!}, <reglist>^

Запись

слова

STR {cond} Rd, <a_mode2>

слова с преимуществом режима пользователя

STR {cond}T Rd, <a_mode2P>

байта

STR {cond}B Rd, <a_mode2>

байта с преимуществом режима пользователя

STR {cond}BT Rd, <a_mode2P>

полуслова

STR {cond}H Rd, <a_mode3>

операции над несколькими блоками данных

-

 с предварительным инкрементом

STM {cond}IB Rd{!}, <reglist>{^}

 с последующим инкрементом

STM {cond}IA Rd{!}, <reglist>{^}

 с предварительным декрементом

STM {cond}DB Rd{!}, <reglist>{^}

o с последующим декрементом

STM {cond}DA Rd{!}, <reglist>{^}

 операция над стеком

STM {cond}<a_mode4S> Rd{!}, <reglist>

 операция над стеком с регистрами пользователя

STM {cond}<a_mode4S> Rd{!}, <reglist>^

Обмен

слов

SWP {cond} Rd, Rm, [Rn]

байт

SWP {cond}B Rd, Rm, [Rn]

Сопроцессор

Операция над данными

CDP {cond} p<cpnum>, <op1>, CRd, CRn, CRm, <op2>

Пересылка в ARM-регистр из сопроцессора

MRC {cond} p<cpnum>, <op1>, Rd, CRn, CRm, <op2>

Пересылка в сопроцессор из ARM-регистра

MCR {cond} p<cpnum>, <op1>, Rd, CRn, CRm, <op2>

Чтение

LDC {cond} p<cpnum>, CRd, <a_mode5>

Запись

STC {cond} p<cpnum>, CRd, <a_mode5>

Программное прерывание

SWI 24bit_Imm

<shifter_operand>

Операнд является частью инструкции, которая ссылается на данные или периферийное устройство.

Таблица 7. <shifter_operand>

Операнд

Тип

Мнемонический код

Операнд 2 <Oprnd2>

Значение константы

#32bit_Imm

Логический сдвиг влево

Rm LSL #5bit_Imm

Логический сдвиг вправо

Rm LSR #5bit_Imm

Арифметический сдвиг вправо

Rm ASR #5bit_Imm

Вращение вправо

Rm ROR #5bit_Imm

Регистр

Rm

Логический сдвиг влево

Rm LSL Rs

Логический сдвиг вправо

Rm LSR Rs

Арифметический сдвиг вправо

Rm ASR Rs

Вращение вправо

Rm ROR Rs

Расширенное вращение вправо

Rm RRX

Поля

Таблица 8. Поля

Тип

Суффикс

Установки

Бит

Поле {field}

_c

Бит-маска поля управления

3

_f

Бит-маска поля флагов

0

_s

Бит-маска поля статуса

1

_x

Бит-маска поля расширения

2

Поля условий

Таблица 9. Поля условий

Тип поля

Суффикс

Описание

Условие

Условие {cond}

EQ

Равно

Z=1

NE

Неравно

Z=0

CS

Беззнаковое больше или равно

C=1

CC

Беззнаковое меньше

C=0

MI

Отрицательное

N=1

PL

Положительное или ноль

N=0

VS

Переполнение

V=1

VC

Нет переполнения

V=0

HI

Беззнаковое больше

C=1, Z=0

LS

Беззнаковое меньше или равно

C=0, Z=1

GE

Больше или равно

N=V (N=V=1 или N=V=0)

LT

Меньше

N<>V (N=1 и V=0) или (N=0 и V=1)

GT

Больше

Z=0, N=V (N=V=1 или N=V=0)

LE

Меньше или равно

Z=0 или N<>V (N=1 и V=0) или (N=0 и V=1)

AL

Всегда истинный

флаги игнорируются

  1. ПАМЯТЬ

При разработке интерфейса памяти процессора ARM7TDMI стояла задача максимально полностью использовать потенциал по быстродействию и при этом минимизировать использование памяти. Чтобы обеспечить возможность реализации функций системного управления на основе стандартной маломощной логики критичные к быстродействию сигналы управления были конвейеризованы. Данные сигналы управления упрощают использование быстродействующих пакетных режимов передачи, которые используются большинством встроенной и внешней технологий памяти.

Ядро ARM7TDMI поддерживает четыре основных цикла доступа к памяти:

  • холостой цикл

  • непоследовательный цикл

  • последовательный цикл

  • цикл передачи регистра сопроцессора.

Процессор ARM7TDMI рассматривает память, как линейную совокупность байт, пронумерованных в возрастающем порядке, начиная с 0.

Например, байты 0..3 представляют первое записанное слово;

байты 4...7 представляют второе записанное слово.

Процессор ARM7TDMI поддерживает оба порядка следования байт многобайтных слов в памяти:

  • Прямой порядок байт (Little-endian), когда сначала следует младший, а затем старший байты.

  • Обратный порядок байт (Big-Endian), когда сначала следует старший, а затем младший байты.

По умолчанию у ARM-процессоров используется прямой порядок байт (Little-endian).

Формат следования байт ЦПУ указывает, где в слове размещается старший значащий байт или разряд. Поскольку при запуске ЦПУ значения вычисляются, начиная с младших значащих разрядов, то прямой порядок устанавливается автоматически.

Конфигурация порядка следования байт не зависит от типа хранимых данных (слова, полуслова или байты).

Прямой порядок (Little-endian)

В формате прямого порядка, байт с наименьшим адресом в слове рассматривается как младший значащий байт слова, а байт с наибольшим адресом - старший значащий байт. Т.о., байт по адресу 0 системы памяти соединяет с линиями данных 7...0. На рисунке 2.5 показывается, как слово по адресу А, полуслова по адресам А и А+2, а также байты по адресам А, А+1, А+2, А+3 соотносятся между собой при конфигурации ядра к прямому порядку.

Рис.17 Адреса байт и полуслов в слове при прямом порядке (Little-endian)

Обратный порядок (Big-Endian)

В формате обратного порядка, процессор ARM7TDMI запоминает старший значащий байт слова в позиции байта с наименьшим порядковым номером, а младший байт - в позиции байта с наибольшим порядковым номером. Т.о., байт по адресу 0 системы памяти связан с линиями данных 31..24.