Скачиваний:
116
Добавлен:
13.03.2016
Размер:
206.85 Кб
Скачать

1.4. Множество команд.

Множество команд базируется на RISC архитектуре. Все команды имеют одинаковую длину в 32 разряда. Формат команды:

[код условия выполнения][код операции][операнды].

Команда выполняется если истинно условие, указанное в ней, иначе выбирается следующая команда. Список условий выполнения:

EQ Z=1 равно,

NE Z=0 не равно,

CS C=1 без знаковое больше или равно,

CC C=0 без знаковое меньше,

MI N=1 отрицательное,

PL N=0 положительное или 0,

VS V =1 переполнение,

VC V=0 не переполнение,

HI C=1 Z=0 без знаковое больше,

LS C=0 Z=1 без знаковое меньше или равно,

GE N=V больше или равно,

LT N /=V меньше чем,

GT Z=0 N=V больше чем,

LE Z=1 OR N/=V меньше чем или равно,

Al выполнять всегда.

    1. Модель прерываний

Перед передачей управления подпрограмме обработки прерываний (ISR) адрес возврата (текущее значение РС) помещается в один из регистров R14_xxx(LR), CPSR копируется в соответствующий SPSR_xxх, а в РС загружается соответствующий вектор прерывания (стартовый адресISR) :

0-прерывание от сброса переход в режим Supervisor

4- неопределенная команда переход в режим Undefined

8- программное прерывание переход в режим Supervisor

12-прекращение выборки команды переход в режим Abort

16- прекращение передачи данных переход в режим Abort

20-зарезервировано

24- IRQпереход в режимIRQ

28- FIQпереход в режимFIQ

Программное прерывание вызывается командой SWIи обычно используется для перехода в режимSupervisor.

Приоритеты:

  1. сброс - высший приоритет

  2. прекращение передачи данных

  3. FIQ

  4. IRQ

  5. прекращение выборки команды

  6. неопределенная команда, программное прерывание – низший приоритет.

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

Код на Си:

while (i != j) {

if (i > j)

i -= j;

else

j -= i;

}

Код на ассемблере:

loop CMP Ri, Rj ; set condition «NE» if (i != j),

; "GT" if (i > j),

; or "LT" if (i < j)

SUBGT Ri, Ri, Rj ; if "GT" (greater than), i = i-j;

SUBLT Rj, Rj, Ri ; if "LT" (less than), j = j-i;

BNE loop ; if "NE" (not equal), then loop

Видно, что использование предикации позволило полностью избежать ветвления в операторах else и then.

Для сравнения код на ассемблере MCS-51:

GCD: ; i –> R0

LOOP: ; j –> R1

MOV A, R0

CJNE A,R1, NEXT ; i-j

JMP EXIT

NEXT:

JC J_I

MOV A,R0 ; i>j

CLR C

SUBB A,R1

JMP LOOP

J_I: ; i<j

MOV A,R1

CLR C

SUBB A,R0

JMP LOOP

EXIT:

RET

Инструкции «обработки информации».

Код на Си:

a += (j << 2);

Код на ассемблере:

ADD Ra, Ra, Rj, LSL #2

Соседние файлы в папке ВстроенныеСистемы