Ход работы
Выполнение общего задания:
org $8000 ; Указываем адрес с которого начнет работу программа
; Стандартно стоит $8000
; можно поменять начальный адрес в ячейках $FFFF-FFFE
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)
nsa ; Переставляем тетрады в А
; (биты с 7-4) <-> (биты с 3-0) -> (С7)
psha ; Запись А в стек (С7)
pshx ; Запись Х в стек (3E)
pula ; Загрузить А из стека (3E)
pulx ; Загрузить Х из стека (С7)
sta $31 ; Запись содержимое А в память по адресу 0x31 (3E)
mov $31,$40 ; Записать значение из ячейки с адресом 0x31
; в ячейку с адресом 0x40 (3E)
sthx $50 ; Запись двух значений из H:X в ячейки памяти
; начиная с адреса 0x50 (D4->$50 и C7->$51)
; Регистр CCR: (признак знака) N=1, (признак нуля) Z=0
Main_Loop: ; Бесконечный цикл, обязателен в микроконтроллере
nop
bra Main_Loop ; Перейти на метку Main_loop
Вопрос:
Какой код в результате окажется по адресу $51 и что будет во флагах N и Z?
Ответ:
В результате выполнения программы по адресу $51 хранится значение $C7. При этом в регистре CCR значение признака знака установлено в «1», а значение признака нуля – «0». Что можем наблюдать на рис. 2.
Рис. 2 Состояние регистров и памяти в режиме симуляции после выполнения задания
Задание на бригаду:
Написать программу, которая меняет местами байты в двух соседних ячейках стека после их загрузки.
Выполнение задания бригады:
org $8000
ldhx #$d390 ; Загружаем значение в HX (D3->H 90->X)
pshh ; Загружаем в стек значение регистра H
pshx ; Загружаем в стек значение регистра X
ldhx #$0000 ; Обнуляем регистр HX (Не обязательно)
pulh ; Выгружаем из стека в H 1 байт
pulx ; Выгружаем из стека в X 1 байт
pshh ; Загружаем значение из H в стек
pshx ; Загружаем значение из X в стек
Main_Loop: ; Бесконечный цикл, обязателен в микроконтроллере
nop
bra Main_Loop ; Перейти на метку Main_loop
Рис. 3 Состояние регистров и памяти в режиме симуляции после обнуления HX
Рис. 4 Состояние регистров и памяти в режиме симуляции после выполнения задания