Загрузка данных


.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             ; Бесконечный цикл для остановки программы