Загрузка данных
.include "m328pdef.inc"
.cseg
.org 0x0000
RESET:
; ==========================================
; Задания 1–2. Запись чисел в регистры
; Вариант 9: Число 1 = 48, Число 2 = 34
; ==========================================
ldi r24, 48 ; Записываем число 48 в регистр r24
ldi r25, 34 ; Записываем число 34 в регистр r25
; ==========================================
; Задание 3.1. Обмен через дополнительный регистр
; ==========================================
mov r16, r24 ; Сохраняем значение r24 в r16
mov r24, r25 ; Переносим значение r25 в r24
mov r25, r16 ; Возвращаем старое значение r24 в r25
; В результате: r24 = 34, r25 = 48
; ==========================================
; Задание 3.2. Обмен через оперативную память
; ==========================================
sts 0x0100, r24 ; Сохраняем значение r24 по адресу 0x0100
sts 0x0101, r25 ; Сохраняем значение r25 по адресу 0x0101
lds r16, 0x0100 ; Загружаем первое число в r16
lds r17, 0x0101 ; Загружаем второе число в r17
sts 0x0100, r17 ; Записываем второе число на место первого
sts 0x0101, r16 ; Записываем первое число на место второго
lds r24, 0x0100 ; Загружаем первое значение обратно в r24
lds r25, 0x0101 ; Загружаем второе значение обратно в r25
; В результате: r24 = 48, r25 = 34
; ==========================================
; Задание 3.3. Обмен через стек
; ==========================================
push r24 ; Помещаем значение r24 в стек
push r25 ; Помещаем значение r25 в стек
pop r24 ; Извлекаем последнее значение стека в r24
pop r25 ; Извлекаем предыдущее значение стека в r25
; В результате: r24 = 34, r25 = 48
; ==========================================
; Задание 4. Запись числа 3 в регистровую пару X
; Вариант 9: Число 3 = 0x6789
; X = r27:r26, младший байт находится в r26
; ==========================================
ldi r26, 0x89 ; Младший байт числа 0x6789
ldi r27, 0x67 ; Старший байт числа 0x6789
; ==========================================
; Задание 5. Запись числа 4 в регистровую пару Y
; Вариант 9: Число 4 = 0x0FED
; Y = r29:r28, младший байт находится в r28
; ==========================================
ldi r28, 0xED ; Младший байт числа 0x0FED
ldi r29, 0x0F ; Старший байт числа 0x0FED
; ==========================================
; Задание 6. Обмен значений X и Y тремя способами
; ==========================================
; 6.1. Обмен с помощью команды MOVW
movw r16, r26 ; Сохраняем X в r17:r16
movw r26, r28 ; Копируем Y в X
movw r28, r16 ; Копируем старое значение X в Y
; 6.2. Обмен через оперативную память
sts 0x0102, r26 ; Сохраняем младший байт X
sts 0x0103, r27 ; Сохраняем старший байт X
sts 0x0104, r28 ; Сохраняем младший байт Y
sts 0x0105, r29 ; Сохраняем старший байт Y
lds r16, 0x0102 ; Загружаем младший байт X
lds r17, 0x0103 ; Загружаем старший байт X
lds r18, 0x0104 ; Загружаем младший байт Y
lds r19, 0x0105 ; Загружаем старший байт Y
sts 0x0102, r18 ; Записываем младший байт Y в X
sts 0x0103, r19 ; Записываем старший байт Y в X
sts 0x0104, r16 ; Записываем младший байт X в Y
sts 0x0105, r17 ; Записываем старший байт X в Y
lds r26, 0x0102 ; Восстанавливаем младший байт X
lds r27, 0x0103 ; Восстанавливаем старший байт X
lds r28, 0x0104 ; Восстанавливаем младший байт Y
lds r29, 0x0105 ; Восстанавливаем старший байт Y
; 6.3. Обмен через стек
push r26 ; Помещаем младший байт X в стек
push r27 ; Помещаем старший байт X в стек
push r28 ; Помещаем младший байт Y в стек
push r29 ; Помещаем старший байт Y в стек
pop r29 ; Восстанавливаем младший байт Y
pop r28 ; Восстанавливаем старший байт Y
pop r27 ; Восстанавливаем младший байт X
pop r26 ; Восстанавливаем старший байт X
; ==========================================
; Задание 7. Запись пары X в оперативную память
; ==========================================
sts 0x0170, r26 ; Младший байт X по адресу 0x0170
sts 0x0171, r27 ; Старший байт X по адресу 0x0171
; ==========================================
; Задание 8. Запись пары Y в оперативную память
; ==========================================
sts 0x0180, r28 ; Младший байт Y по адресу 0x0180
sts 0x0181, r29 ; Старший байт Y по адресу 0x0181
; ==========================================
; Задание 9. Обмен содержимого ячеек памяти
; ==========================================
lds r16, 0x0170 ; Читаем младший байт X
lds r17, 0x0180 ; Читаем младший байт Y
sts 0x0170, r17 ; Записываем младший байт Y вместо X
sts 0x0180, r16 ; Записываем младший байт X вместо Y
lds r16, 0x0171 ; Читаем старший байт X
lds r17, 0x0181 ; Читаем старший байт Y
sts 0x0171, r17 ; Записываем старший байт Y вместо X
sts 0x0181, r16 ; Записываем старший байт X вместо Y
END:
rjmp END ; Бесконечный цикл для остановки программы