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

Упражнения / АВС. Упражнение. Основные команды арифметических операций

.pdf
Скачиваний:
17
Добавлен:
07.10.2020
Размер:
74.55 Кб
Скачать

Упражнение 3.

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

К основным командам арифметических операций относятся команды арифметики 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-кодирования.

Команды пересылок. Запись этой команды – MOV Rd, Rn

При регистровой адресации источника все адреса полностью укладываются в код формата команды - полуслово и затруднений не возникает. Но, в случае непосредственной адресации, на размер операнда, записываемого под командой MOV, накладывается ограничение – не более 8-ми бит. Если операнд имеет формат более 8-ми, но не превышает 15-ти бит, то формат команды – слово.

Запись следующая: MOVW Rd, #imm16

Если операнд имеет формат более 16 бит, то старшие 16 бит записываются командой Move Top

MOVT Rd, #imm16

При записи слова в регистр используются обе команды, но надо помнить, что MOVW Rd, #imm16 заполняет старшие разряды нулями.

Команда пересылки MVN с аналогичными параметрами позволяет скопировать в приемник поразрядную инверсию источника. Эта команда используется как команда инверсии. Команды NOTв данном ассемблере нет.

Команды MOVи MVN могут использоваться с суффиксом S для установки флагов состояний.

Команды переходов.

Команды переходов можно скорее охарактеризовать как команды ветвлений, так как они называются Branch и имеют форму записи

B {cond_suffix} ADDR_label

Вспомним таблицу условий:

Код

Обозначение

Наименование условия

Комбинация

условия

условия

 

флагов

 

 

 

 

0

EQ

Равно (ноль)

Z = 1

 

 

 

 

1

NE

Не равно (не ноль)

Z = 0

 

 

 

 

2

CS/HS

Перенос (беззнаковое больше

C = 1

 

 

или такое же)

 

 

 

 

 

3

CC/LO

Нет переноса (беззнаковое

C = 0

 

 

меньше)

 

 

 

 

 

4

MI

Знак минус

N = 1

 

 

 

 

5

PL

Знак плюс

N = 0

 

 

 

 

6

VS

Переполнение

V = 1

 

 

 

 

7

VC

Нет переполнения

V = 0

 

 

 

 

8

HI

Беззнаковое больше

nC v Z = 0

 

 

 

 

9

LS

Беззнаковое меньше или

nC v Z = 1

 

 

такое же

 

 

 

 

 

10

GE

Знаковое больше, чем или

N + V = 0

 

 

равно

 

 

 

 

 

11

LT

Знаковое меньше, чем

N + V = 1

 

 

 

 

12

GT

Знаковое больше, чем

Z v (N + V) = 0

 

 

 

 

13

LE

Знаковое меньше, чем или

Z v (N + V) = 1

 

 

равно

 

 

 

 

 

14

AL

Все условия

 

 

 

 

 

Условие 14 использует безусловный переход, в этом случае никакого суффикса условия не записывается

B MET

Во всех остальных случаях переходы условные. Например:

BEQ

M1 – переход на метку M1 в случае нулевого результата

BVS

LBL – переход на метку LBL в случае переполнения/

 

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

 

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

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

Задание 1.

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

Для сокращения количества используемых команд воспользуемся командой MLA Rd, Rn, Rm, Rs , а также командами прямой загрузки с последующим добавлением смещения LDR Rd, [Rn], #offset.

Задание на работу в лаборатории.

В редакторе GVim записать ассемблерный текст программы, позволяющей найти сумму произведений элементов двух заданных массивов: ARR_A и ARR_B, с выводом результата в ячейку памяти.

.text

.global _start

1._start: LDR R0, =ARR_A

2.LDR R1, =ARR_B

3.LDR R2, N

4.MOV R3, #0

5.LOOP: LDR R4, [R0], #4

6.LDR R5, [R1], #4

7.MLA R3, R4, R5, R3

8.SUBS R2, R2, #1

9.BGT LOOP 10.STR R3, RESULT 11.STOP: B STOP 12.N: .word 4

13.ARR_A: .word 5, -3, -6, 9 14.ARR_B: .word 2, 14, -3, 2 15.RESULT: .space 4 16..end

Подключить макет.

Зайти в отладчик Altera Monitor Program, Произвести компиляцию и загрузку программы.

Выполнить программу пошагово, записывая результат основного действия для каждого цикла 1)R3 =…. 2) R3 =…. 3) R3 =…. 4) R3 =… .

Сравнить конечный результат, полученный в R3, с состояием ячейки памяти по метке RESULT. Записать адрес ячейки и содержимое.

Результат продемонстрировать преподавателю.

Задание 2. Сформировать два числа в регистрах. Одно с помощью прямой загрузки, другое с помощью команды пересылки с непосредственным операндом. Сложить эти числа сначала с помощью ADD, потом – ADDS. В отладчике просмотреть флаги.

Числа: 7E89FD56 и 53A47BC7.

7B