
- •1. Архитектура arm
- •1.3. Программная модель
- •1.4. Множество команд.
- •Al выполнять всегда.
- •2. Архитектура mips
- •2.1. Типы данных
- •2.1.1 Формат данных cpu
- •2.1.2 Формат данных fpu
- •2.2. Сопроцессоры
- •2.3. Программная модельMips
- •2.3.1. Регистры cpu
- •2.3.2. Регистры fpu
- •2.4. Множество команд
- •3. Архитектура x86
- •3.1. Программная модель
- •3.2. Модель управления памятью
- •3.3. Множество команд
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 выполнять всегда.
Модель прерываний
Перед передачей управления подпрограмме обработки прерываний (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.
Приоритеты:
сброс - высший приоритет
прекращение передачи данных
FIQ
IRQ
прекращение выборки команды
неопределенная команда, программное прерывание – низший приоритет.
Пример предикации — возможности условного исполнения команд. Алгоритм Евклида — эффективный алгоритмдля нахождениянаибольшего общего делителядвухцелых чисел
Код на Си:
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