Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Упражнения / АВС. Упражнение. Команды логических операций

.pdf
Скачиваний:
12
Добавлен:
08.10.2020
Размер:
58.05 Кб
Скачать

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

В АЛУ, кроме сумматора, есть блоки схем стандартной логики для производства логических действий. Нам уже известно, как производится действие над одним операндом – инверсия. Логические действия над двумя операндами: умножение, сложение и сложение по модулю 2.

AND Rd, Rn, Operand 2

ORR Rd, Rn, Operand 2

EOR Rd, Rn, Operand 2 (Exclusive-OR)

Эти операции предполагают логическое действие с получением результата в Rd.

С помощью команды EOR можно обнулять состояние регистра, сравнивая с его собственным содержимым.

На основе логического умножения есть операция тестирования - TST Rn, Operand 2

Она предполагает проверку определенных разрядов тестируемого числа на наличие 0. Результат – установка флага ZF.

На основе сложения по модулю 2 есть операция логического сравнения - TEQ Rn, Operand 2.

В отличие от арифметического сравнения – CMP, здесь производится не вычитание, а именно поразрядное сравнение двух операндов с установкой флагов.

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

Команды условных действий.

Кроме условных переходов в процессорах линейки ARM-7 есть команды условных действий, которые выполняются только при наличии записанного условия. Обычно условие формируется по состояниям флага нулевого результата.

Примеры таких команд: ADDEQ Rd, Rn, Rm

SUBNE Rd, Rn, Rm MOVEQ Rd, Rn, Rm

Это команды, выполняющиеся в АЛУ. Наличие этих команд в программе вместо условных переходов экономит процессорное время. Такой метод называется предикацией.

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

Лабораторная работа № 4. Команды логических операций. Предикации.

Цель работы: исследовать различия в функциях арифметического и логического сравнения. Рассмотреть преимущества предикаций перед условными переходами.

Задание 1.

Протестировать в отладчике программу 1 и записать флаги, устанавливаемые командами сравнения с 5-ой по 9-ую и 11-ой. В регистре cpsr – 31разряд –флаг знака N, 30-й – флаг нулевого результата Z , 29-й – флаг переноса C, 28-й – флаг переполнения V. Записывать состояние старшего 16-ного разряда регистра и переводить в двоичный код.

Программа 1.

.text

.global _start

1._start: LDR R0, A

2.MOVW R1, 0x53A4

3.MOVT R1, 0x7BC7

4.EOR R6, R6

5.CMP R6, #0

6.CMP R0, R1

7.CMN R0, R1

8.CMP R1, R0

9.TEQ R0, R1 10.MVN R2, R1 11.TEQ R0, R2

stop: B stop

A: .word 0x7E89FD56

.end

Задание 2.

Протестировать в отладчике программу 2, установив на одном проходе состояние 3-го разряда вводимого числа 1, а на следующем 0, и сделать вывод о работе команд условных действий (предикаций).

Программа 2.

.text

.global _start

_start: LDR R0, ADR LDR R1, CNT

MET:

LDR R2, [R0] TST R2, #8

ADDEQ R3, R1, R2

SUBNE R3, R1, R2

STR R3, RESULT B MET

ADR: .word 0XFF200040 CNT: .word 100 RESULT: .space 4

.end