Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №2 / Laboratornaya_rabota_2B (2).docx
Скачиваний:
3
Добавлен:
21.06.2022
Размер:
71.94 Кб
Скачать

Ход работы

Выполнение общего задания:

org $8000 ; Указываем адрес с которого начнет работу программа

Main: ; Главная функция.

mov #$7c,$30 ; Записать по адресу $30 код $7C

mov #$d4,$40 ; Записать по адресу $40 код $D4

mov #$3e,$41 ; Записать по адресу $41 код $3E

lda $30 ; Загрузить в А содержимое ячейки по адресу 0x30

ldhx $40 ; Загрузить в H:X два значения начиная с адреса 0x40

; (D4->H и 3E->X)

add $41 ; Сложить А и значение ячейки по адресу $41 (7C+3E=BA)

nsa ; Переставляем тетрады в А

; (биты с 7-4) <-> (биты с 3-0) -> (AB)

sbc $40 ; Вычитание с заёмом.

; Из А вычитаем значение по адресу $40

; и вычитаем значение флага С. Результат кладем в А

; (AB-D4-0=D7 и флаг С=1)

mul ; Беззнаковое умножение A*X = X:A

; (D7*3E = 3412) (34->X и 12->A) (C->0)

sthx $50 ; Запись двух значений из H:X в ячейки памяти

; начиная с адреса 0x50 (D4->$50 и 34->$51)

eor $30 ; Исключающее ИЛИ.

; Выполняется между А и значение по адресу $30

; (12 (+) 7C = 6E)

rolx ; Циклический сдвиг влево регистра Х.

; ($34=00110100 C=0)->(01101000->68 C=0)

stx $31 ; Запись содержимое X в память по адресу 0x31 (68)

ror $31 ; Циклический сдвиг вправо ячейки памяти по адресу $31.

; (01101000->68 C=0) -> (00110100->34 C=0)

Main_Loop: ; Бесконечный цикл, обязателен в микроконтроллере

nop

bra Main_Loop ; Перейти на метку Main_loop

Вопрос:

Какой код в результате окажется по адресу $31 и что будет во флагах N и Z?

Ответ:

В результате выполнения программы по адресу $31 хранится значение $34. При этом в регистре CCR значения признака знака и признака нуля установлены в «0». Что можем наблюдать на рис. 2.

Рис. 2 Состояние регистров и памяти в режиме симуляции после выполнения задания

Задание на бригаду:

Написать программу, которая меняет местами тетрады в частном при нахождении среднего арифметического для массива из 7 однобайтовых чисел без знака.

Выполнение задания бригады:

org $8000

mov #$19,$60 ; Кладем в 7 ячеек памяти разные значения начиная с адреса $60

mov #$2c,$61

mov #$3e,$62

mov #$4b,$63

mov #$55,$64

mov #$1a,$65

mov #$2f,$66

ldhx #$0000 ; Записываем в HX ноль

mov #$00,$67

lda $60 ; Загружаем первое число массива в А

add $61 ; Складываем первое число со вторым и результат кладем в А

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

lda $68 ; Кладем в А значение ячейки по адресу $68

add $62 ; Складываем с третьим числом массива

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

lda $68 ; Кладем в А значение ячейки по адресу $68

add $63 ; Складываем с четвертым числом массива

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

lda $68 ; Кладем в А значение ячейки по адресу $68

add $64 ; Складываем с пятым числом массива

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

lda $68 ; Кладем в А значение ячейки по адресу $68

add $65 ; Складываем с шестым числом массива

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

lda $68 ; Кладем в А значение ячейки по адресу $68

add $66 ; Складываем с седьмым числом массива

sta $68 ; Сохраняем результат сложения в ячейку памяти по адресу $68

lda #$00 ; Обнуляем А

adc $67 ; Складываем бит переноса (А+$67+C)

sta $67 ; Сохраняем сумму в ячейку $67

ldhx $67 ; Кладем в HX два значения начиная с адреса $67

; Так как в H должны сохранить сумму переносов (ячейка $67)

lda $68 ; Кладем в А значение ячейки $68 (сумма чисел без переносов)

ldx #$07 ; В X кладем 7 (так как массив из 7 чисел)

div ; Делим. Находим среднее арифметическое.

; H:A/X = результат->А, остаток->H

nsa ; Меняем местами тетрады в А

Main_Loop: ; Бесконечный цикл, обязателен.

nop

bra Main_Loop ; Перейти на метку Main_loop

Рис. 3 Состояние регистров и памяти в режиме симуляции