Скачиваний:
0
Добавлен:
02.11.2025
Размер:
34.77 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ПРОГРАММНОЙ ИНЖЕНЕРИИ (ИТПИ)

КАФЕДРА ПРОГРАММНОЙ ИНЖЕНЕРИИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ (ПИИВТ)

Дисциплина: «Машинно-зависимые языки программирования»

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

По теме:

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

Выполнил:

Студент группы ИКПИ-32

Яковлев М. А.

Приняла:

Неелова О. Л.

Подпись ______________

Цель работы

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

Ход работы

Программа 1

.text

.global _start

_start: LDR R0, =ARR_A

LDR R1, =ARR_B

LDR R2, N

MOV R3, #0

LOOP: LDR R4, [R0], #4

LDR R5, [R1], #4

MLA R3, R4, R5, R3

SUBS R2, R2, #1

BGT LOOP

STR R3, RESULT

STOP: B STOP

N: .word 4

ARR_A: .word 5, -3, -6, 9

ARR_B: .word 2, 14, -3, 2

RESULT: .space 4

.end

Результат для каждого цикла:

  1. В 1-й итерации R3 = 5 * 2 = 10 (0x0000000A)

  2. Во 2-й итерации R3 = 10 + (-3 * 14) = -32 (0xFFFFFFE0)

  3. В 3-й итерации R3 = -32 + (-6 * -3) = -14 (0xFFFFFFF2)

  4. В 4-й итерации R3 = -14 + (9 * 2) = 4 (0x00000004)

Конечный результат в регистре R3 и в памяти по адресу (0x00000050) RESULT будет 4.

Программа 2

.text

.global _start

_start:

LDR R1, =0x7E89FD56

MOVW R2, 0x53A4

MOVT R2, 0x7BC7

MOV R3, #0

ADD R3, R1, R2

ADDS R3, R1, R2

SUB R3, R1, R2

SUBS R4, R1, R2

STOP: B STOP

.end

Команда

NF (31 разряд)

ZF (30 разряд)

CF (29 разряд)

VF (28 разряд)

ADD

-

-

-

-

ADDS

1

0

0

1

SUB

-

-

-

-

SUBS

0

0

1

0

Для определения переполнения в ARM ассемблере следует использовать команду CMN, а не CMP.

Разница между CMP и CMN:

CMP (Compare) — это команда, которая выполняет вычитание между двумя регистрами, но не сохраняет результат в регистре. Она лишь обновляет флаги состояния CPSR, такие как флаги переноса (C), переполнения (V), нуля (Z) и отрицательного результата (N). Основной целью команды CMP является сравнение двух чисел. Эта команда не может установить флаг переполнения, так как операнды априори с разными знаками.

CMN (Compare Negative) — это команда, которая выполняет сложение между двумя регистрами и также обновляет флаги CPSR, но не сохраняет результат. В отличие от CMP, она работает с суммой двух чисел, а не с их разностью. И поэтому может выставить флаг переполнения.

Программа 3

.text

.global _start

_start: LDR R0, ADR

LDR R1, CNT

LDR R5, #2

MET:

LDR R2, [R0]

TST R2, #8

ADDEQ R3, R1, R2

SUBNE R3, R1, R2

STR R3, RESULT

SUBS R5, #1

BNE MET

fin: B fin

ADR: .word 0xFF200040

CNT: .word 100

RESULT: .space 4

.end

Первое число: 12 (содержит 3-ий разряд, при TST R2, #8 не будет выставлен Zero flag (0), команда SUBNE выполнится, потому что флаг Z не установлен)

Второе число: 20 (не содержит 3-ий разряд, при TST R2, #8 будет выставлен Zero flag (1), команда ADDEQ выполнится, потому что флаг Z установлен.)

№ цикла

R3 (ADDEQ)

R3 (SUBNE)

RESULT

1.

-

88 (0x00000058)

88 (0x00000058)

2.

120 (0x00000078)

-

120 (0x00000078)

Вывод

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

Санкт-Петербург

2025 г.

Соседние файлы в папке Лабораторные работы. Неелова