АВС. Решения задач
.pdfАрхитектура вычислительных систем Решения задач №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