Лабораторные работы. Неелова / МЗЯП. ЛР №1 Отчет
.docxФедеральное государственное бюджетное образовательное
учреждение высшего образования
«Санкт-Петербургский Государственный университет
телекоммуникаций им. Проф. М.А. Бонч-Бруевича»
(СПБГУТ)
Лабораторная работа №1
Группа: ИКПИ-32
Студент:
Максим Яковлев
Санкт-Петербург
2024 г.
Программа 1:
.global _start
_start: LDR R0, = ADR1
LDR R1, [R0]
LDR R2, [R0, #4]
LDR R3, [R0, #8]
LDR R4, =ADR2
STMIA R4!, {R1-R3}
LDMDB R4!, {R5-R7}
LDR R8, ADR3
STR R8, [R0]
Stop: B Stop
ADR1: .word 20, 36, 52
ADR2: .word 0, 0, 0
ADR3: .word 100
.end
Вопросы:
Каким образом производится адресация памяти, относительно состояния базы, при внесении элементов массива в регистры?
Ответ – для внесения элемента массива в регистр указывается адрес регистра, адрес базы и смещение в формате «Ra, [Rb, #x]».
Как меняется состояние базы при выполнении команд STMIA и LDMDB?
STMIA: Базовый регистр служит отправной точкой, а затем его значение поэтапно увеличивается на сумму смещений.
LDMDB: Сначала базовый регистр поэтапно уменьшается на сумму смещений, а затем используется для загрузки данных. В результате получается адрес первого загруженного слова.
Чему соответствуют переменные, загружаемые в R0, R4 и R8?
R0 – база. Получает адрес метки ADR1 (указатель на массив [20, 36, 52])
R4 получает адрес метки ADR2 (указатель на массив [0, 0, 0])
R8 получает значение 100 из ADR3 (непосредственное значение)
Программа 2:
.text
.global _start
_start: LDR R0, =0xFF200040
LDR R1, =ARR
MOV R2, #3
MOV R4, 0
M:
LDR R3, [R0]
STR R3, [R1], #4
SUBS R2, #1
BNE M
FIN B FIN
ARR: .word 0,0,0
.end
Вопросы:
Какой тип адресации, относительно состояния базы, Вы используете для занесения массива с внешнего устройства в память?
В данной программе для занесения массива с внешнего устройства в память используется пост-инкрементная адресация [R1], #4. После каждой операции сохранения данных в память, адрес в регистре R1 автоматически увеличивается на 4 байта.
Каким образом Вы формируете базу для работы с массивом в этой программе?
База для работы с массивом формируется с помощью команды LDR R1, =ARR, где ARR – это метка, указывающая на начало массива в памяти.
