Скачиваний:
7
Добавлен:
28.04.2023
Размер:
19.96 Кб
Скачать

Лабораторная работа № 5.

Ассемблер ARM (Cortex A9)

Команды арифметических операций.

К основным командам арифметических операций относятся команды арифметики 1-ой ступени, выполняющиеся в АЛУ – сложение, вычитание и арифметическое сравнение, а также операции, выполняющиеся в блоке умножителя и в блоке умножителя + АЛУ – умножение и умножение с последующим сложением.

Команды, выполняющиеся на сумматоре с фиксацией результата в защелке -сложение и вычитание всегда предполагают наличие 3-х операндов. В общем виде:

OP Rd, Rn, Rm ; где

Rd – приемник операнда,

Rn – первый операнд-источник,

Rm – второй операнд-источник.

В качестве второго операнда может быть использовано его непосредственное значение. Приемником может быть как отдельный регистр, так и регистр первого операнда-источника.

Например:

ADD R3, R2, R1 SUB R0, R2, R1

ADD R6, R6,#20 SUB R3, R3,#20

ADC R1, R0, R3 SBC R4, R0, R5

Необходимо заметить, что эти команды при получении результата флагов состояний не выставляют. Логические цепочки, позволяющие получить флаги состояний, подключаются только при записи после команды суффикса S (ADDS, SUBS и т.п.).

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

CMP R5, R0 (imm)

CMN R4, R2 (imm)

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

MUL R2, R4, R5

[R2] <= [R4] x [R5]

MLA R2, R4, R5, R6

[R2] <= ([R4] x [R5] + [R6])

MLS R3, R1, R2, R4

[R3] <= ([R1] x [R2] – [R4])

Эти команды в обычной записи флагов не устанавливают. Суффикс S могут иметь команды MUL и MLA, но только для ARM-кодирования.

Работа № 2, ассемблер.

  1. Следуя методике, описанной в лабораторной работе №3 (работа №1, ассемблер), набрать и выполнить в шаговом режиме Прогр. 2.

  2. В каждом цикле выполнения устанавливать новое значение на тумблерах, первый проход – число 15; второй – 35, третий - 37.

  3. При выполнении программы по шагам обратить внимание на состояние регистра CPSR в части флагов состояния процессора. При изменении его состояния записать только старший символ в 8-разрядном 16-ном числе (например 0x2-------) и внести его двоичное значение в таблицу 1.

  4. Заполнить таблицу 2.

Прогр. 2

.text

.global _start

1._start: LDR R0, ADR1 // базовый адрес порта тумблеров в R0

2. LDR R1, ADR2 // базовый адрес порта светодиодов в R1

3. MOV R6, #3 // счетчик обращений к порту тумблеров

4. MOV R2, #35 // базовое число

5. MET: LDR R3, [R0] // обращение к тумблерам

6. ADD R4, R3, R2

7. STR R4, [R1] // обращение к светодиодам

8. SUB R5, R3, R2

9. STR R5, [R1] // обращение к светодиодам

10. SUBS R5, R3, R2

11. STR R5, [R1] // обращение к светодиодам

12. SUBS R6, #1

13. BNE MET

14. FIN: B FIN

ADR1: .word 0xFF200020

ADR2: .word 0xFF200000

.end

Таблица1.

№ команды

31разр. (NF)

30 разр. (ZF)

29 разр. (CF)

28 разр. (VF)

Таблица 2.

№ команды

Состояние регистра

Состояние

порта

Состояние флагов

Произведенное действие

1.

R0=

---

---

Загрузка адреса

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

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