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

АВС. Решения задач

.pdf
Скачиваний:
18
Добавлен:
29.01.2021
Размер:
64.71 Кб
Скачать

Архитектура вычислительных систем Решения задач №1, №2 и №3

ИКПИ-85, Коваленко Л. А., Ежуров А. П.

Задание №1.

Набрать массив из 6 элементов, считываемых последовательно с тумблеров. Содержимое массива скопировать в регистры R6-R11.

Решение приведено в табл. 1. Таблица 1 — Решение задачи №1

.text

.global _start _start:

LDR R0, ADR // Тумблеры

LDR R1, =ARR // Массив

MOV R2, #6 // Счетчик массива LOOP:

LDR R3, [R0] // С тумблеров в регистр STR R3, [R1], #4 // Из регистра в массив SUBS R2, #1

BNE LOOP

LDMDB R1!, {R6-R11} // Из массива в регистры fin: B fin

ADR: .word 0xFF200040

ARR: .word 0,0,0,0,0,0

.end

Задание №2.

Для результата первого задания проделать следующую обработку:

1.В R5 поместить сумму содержимого R6 и произведения R7 на R8;

2.В R4 поместить разность содержимого R9 и произведения R10 на R11.

3.Проверить содержимое R4 и R5 на знак.

Решение приведено в табл. 2. Таблица 2 — Решение задачи №2

.text

.global _start _start:

LDR R0, ADR // Тумблеры

LDR R1, =ARR // Массив

MOV R2, #6 // Счетчик массива LOOP:

LDR R3, [R0] // С тумблеров в регистр STR R3, [R1], #4 // Из регистра в массив SUBS R2, #1

BNE LOOP

LDMDB R1!, {R6-R11} // Из массива в регистры

// [Продолжение]

MLA R5, R7, R8, R6 // R5 = R6 + R7 * R8 MLS R4, R10, R11, R9 // R4 = R9 - R10 * R11 CMP R4, #0

CMP R5, #0 fin: B fin

ADR: .word 0xFF200040

ARR: .word 0,0,0,0,0,0

.end

Задание №3.

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

Решение приведено в табл. 3. Таблица 3 — Решение задачи №3

.text

.global _start _start:

LDR R0, ADR // Тумблеры

LDR R1, =ARR // Массив

MOV R2, #6 // Счетчик массива LOOP:

LDR R3, [R0] // С тумблеров в регистр STR R3, [R1], #4 // Из регистра в массив SUBS R2, #1

BNE LOOP

LDMDB R1!, {R6-R11} // Из массива в регистры MLA R5, R7, R8, R6 // R5 = R6 + R7 * R8

MLS R4, R10, R11, R9 // R4 = R9 - R10 * R11

//[Продолжение]

//Анализ первого числа из R5 CMN R5, #0 // Сравнение с 0

BMI ABS // Переход, если флаг знака в 1

LDR R2, =PLUS // Открываем массив положительных чисел STR R5, [R2], #4 // Загружаем туда R5

B MM // Безусловный переход к MM

ABS:

LDR R3, =MIN // Открываем массив отрицательных чисел

LDR R2, =PLUS // Открываем массив положительных чисел (чтобы работать от начала границы)

SUB R5, R5, #1 // Вычитаем 1

MVN R7, R5 // Инвертируем R5 в R7

STR R7, [R3], #4 // R7 отправляем в массив отрицательных чисел MM: // Анализ первого числа из R4

CMN R4, #0 // Сравнение с 0

BMI ABS1 // Переход, если флаг знака в 1

STR R4, [R2] // Загружаем R4 в массив положительных чисел B fin // Безусловный переход к fin

ABS1:

LDR R3, =MIN // Открываем массив отрицательных чисел SUB R4, R4, #1 // Вычитаем 1

MVN R8, R4 // Инвертируем R4 в R8

STR R8, [R3], #4 // R8 отправляем в массив отрицательных чисел fin: B fin

ADR: .word 0xFF200040 PLUS: .space 8

MIN: .space 8

ARR: .word 0,0,0,0,0,0

.end