Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect_m2_ipovs_ipovs_archvs_231000.docx
Скачиваний:
33
Добавлен:
15.06.2021
Размер:
1.51 Mб
Скачать

Лекция 10.Основные команды микропроцессора arm

Процессор на базе ядра ARM содержит двадцать семь регистров, из которых обычно программистом используется только 16.

Регистры от 0 до 7 - регистры общего назначения (РОНы). В отличие от 80х86, в котором некоторые регистры используются для организации стека, или 6502, в котором результат операции всегда помещается в аккумулятор, ARM очень гибок в отношении использования регистров.

Регистры от 8 до 12 также РОНы, но у них есть теневые регистры-двойники, которые используются только в режиме быстрого ответа на прерывания.

Регистр 13 обычно указатель стека операционной системы, но м.б. использован как РОН. Это опция ОС, а не процессора, если вы не используете стек ОС, этот регистр может использоваться как угодно. Этот регистр также имеет теневого двойника.

Регистр 14 хранит адрес возврата для более быстрых операций с подпрограммами. Команда " branch with link (BL)" используется адрес возврата, хранимый в этом регистре (R14).

Естественно, при вложенных вызовах процедур регистр 14 д.б. сохранён, возможно в других регистрах, а возможно и в стеке. После сохранения адреса возврата регистр м.б. использован как РОН. Он также имеет теневого двойника.

Регистр 15 является счётчиком программ. Наряду с 26 битами адреса он хранит статусные биты процессора.

Таким образом, по сравнению с 80х86 у программиста есть 14 РОНов, что позволяет более эффективно использовать регистровую память. К тому же схемы адресации позволяют использовать любые регистры, а не чётко обозначенные.

Таблица использования регистров:

User Mode

SVC Mode

IRQ Mode

FIQ Mode

R0 -------

R0 -------

R0 -------

R0

R1 -------

R1 -------

R1 -------

R1

R2 -------

R2 -------

R2 -------

R2

R3 -------

R3 -------

R3 -------

R3

R4 -------

R4 -------

R4 -------

R4

R5 -------

R5 -------

R5 -------

R5

R6 -------

R6 -------

R6 -------

R6

R7 -------

R7 -------

R7 -------

R7

R8 -------

R8 -------

R8

R8_fiq

R9 -------

R9 -------

R9

R9_fiq

R10 ------

R10 ------

R10

R10_fiq

R11 ------

R11 ------

R11

R11_fiq

R12 ------

R12 ------

R12

R12_fiq

R13

R13_svc

R13_irq

R13_fiq

R14

R14_svc

R14_irq

R14_fiq

------------- R15 / PC -------------

Счётчик программ имеет следующий формат:

Bit

31

30

29

28

27

26

25------------2

1

0

N

Z

C

V

I

F

Program Counter

S1

S0

N

флаг отрицательного числа

Z

флаг нуля

C

флаг переноса

V

флаг переполнения

I

флаг разрешения прерывания

F

флаг разрешения быстрого прерывания

PC

счётчик команд

S1

режим: 00 - пользователь, 01 - быстрое прерывание, 10 - прерывание, 11-супервизор

S0

В новых процессорах ARM указатель команд 32-битный, потому регистр имеет несколько другой формат. (Новейшие процессоры, например XScale, не поддерживают 26-битовый режим.

Коротко, основные отличия 32-битового формата таковы:

  • PC полностью занимает 32-й регистр.

  • регистр статуса хранится в отдельном регистре CPSR.

  • В каждом привелигированном режиме есть своя частный регистр, где сохраняется CPSR.

  • Есть два новых привелигированных режима, в каждом из которых есть свои копии 13-го и 14-го регистров.

Отметим, что предшественник RISC-процессоров 6502 имел минимальный набор регистров:

Аккумулятор - для результатов арифметических инструкций

X-регистр - Первый РОН

Y-регистр - Второй РОН

PC - Счётчик команд

SP - Указатель стека, смещение от страницы 1.(адрес &01xx).

PSR - Регистр статуса процессора (флаговый).

Режимы выполнения программ:

  • User Mode - пользовательский режим, обычный режим выполнения программы. Доступ в память ограничен, нельзя прямо читать из портов в/в.

  • Supervisor Mode (SVC Mode) - режим супервизора, используется в основном в ОС. Имеет дополнительные привилегии, позволяющие оперировать с устройствами в/в.

  • Interrupt Mode (IRQ Mode) - режим прерывания, привелигирован, служит для обслуживания устройств, генерирующих прерывания, например клавиатуры, обратного хода луча дисплея, таймеров, последовательной связи, жёсткого диска, дискеты.

  • Fast Interrupt Mode (FIQ Mode), - режим быстрого прерывания, привелигирован, служит для обслуживания устройсвт генерирующих быстрые прерывания. Например, сеть, диск.

Отличия между IRQ и FIQ состоят в том, что в FIQ режиме необходима быстрая обработка прерываний и выход..., так как IRQ может быть прервано FIQ но IRQ не может прервать FIQ. Для быстрейшего прохождения FIQ в них используется большее количество теневых регистров, прерывания запрещены, нельзя вызывать некоторые команды - например команды программного прерывания. В общем, FIQ рекомендуется для частой обработки несложных обменов данными.

Систему команд микропроцессора детально описывать не будем. Отметим лишь, что она является типичной RISC, команды за редким исключением выполняются за 1 такт. Каждая инструкция имеет длину 32 бита, кроме случая с режимом Thumb, когда формат команд становится двуоперандным и две 16-битовые команды размещаются в 32-разрядном слове. Реально процессор поддерживает 2 набора команд, переключение между которыми производится специальными инструкциями.

Рассмотрим лишь особенности команд ARM.

Например, 3 команды сложения:

ADD R0, R0, R1 ADDS R0, R0, R1 ADDEQS R0, R0, R1 Первая команда - базовое сложение R1 к R0, без изменения регистра флагов.

Вторая команда - то же сложение, но с изменением регистра флагов.

Третья команда - то же сложение, с изменением регистра флагов. Отличие в том, что это условная инструкция, которая будет исполнена только если результатом предыдущей операции было условие "равно" - если установлен флаг Z.

Так же условными являются команды перемещения данных.

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

Отдельного внимания заслуживают пакетные инструкции сохранения, например

STMFD R13!, {R0-R12, R14} ... LDMFD R13!, {R0-R12, PC} Первая инструкция сохраняет по адресу, записанному в регистре 13 (с постинкрементом адреса - на это указывает мнемоника) с обновлением регистра 13 после операции, содержимое регистров с 0 по 12 и 14 (адрес возврата). Вторая инструкция загружает эти регистры обратно с 0 по 12 и в счётчик команд, фактически делая возврат из процедуры.

Система команд ARМ, хотя он позиционируется как RISC, достаточно сложна. Например команда:

LDREQ R0,[R1,R2,LSR #16]!

загружает регистр 0 при условии, что флаг нуля установлен, а адрес считается как сумма регистра 1 и регистра 2, сдвинутого на 16 бит влево, при этом результирующий адрес будет записан в регистр 1 по окончании загрузки.

Условное исполнение многих команд позволяет лучше загрузить конвейер и тратить меньше ресурсов на предсказание переходов.

Во время исполнения инструкции дополнительно может быть задействован сдвигатель, что позволяет сэкономить 1 такт на операции сдвига.

Необязательная установка флагов позволяет снять ряд ограничений на составления расписаний команд.

Большое количество методов адресации:

LDR R0,[R1,#16] LDR R0,[R1,#16]! LDR R0,[R1],#16 LDR R0,[R1,R2] LDR R0,[R1,R2]! LDR R0,[R1],R2 ...

Свободное использование регистров в различных командах, например:

ADD PC,PC,R0,LSL #2 MOV R0,R0 B R0is0 B R0is1 B R0is2 B R0is3

или например:

ADD PC,PC,R0,LSL #3 MOV R0,R0 MOV R1,#1 B Continue MOV R2,#2 B Comtinue MOV R2,#4 B Continue

Соседние файлы в предмете Архитектура вычислительных систем