RET ; Возврат из подпрограммы
; Таблица квадратов чисел
SQTAB: DB 00H
DB 01H
DB 04H
DB 09H
DB 10H
DB 19H
DB 24H
DB 31H
DB 40H
DB 51H
DB 64H
END ; Конец программного модуля
3.7.1. Создайте в вашей папке файл sq.asm и запишите в него коды программы SQ. Получите файлы с расширением .obj и .hex. Запустите симулятор AVSIM51 и загрузите в него файл sq.hex. Отключите отображения меток с помощью комбинации клавиш Alt-F5. При рассмотрении текста подпрограммы SQ недоумение могут вызвать команды, расположенные с адреса 0006H. В исходной программе здесь должны располагаться константы 00H, 01H и т.д. Дело в том, что симулятор AVSIM51 не может различать константы и коды команд, которые размещены в программной памяти. Любые данные он интерпретирует как коды команд. Таким образом, значению 00H соответствует команда NOP и т.д.
Отладка подпрограммы SQ состоит в проверке соответствия полученных данных (выходной параметр) и исходных данных (входной параметр). Исследуйте работу подпрограммы SQ в пошаговом режиме при следующих исходных данных: (R7) = 00H, (R7) = 05H, (R7) = 0AH. Выполнение подпрограммы заканчивайте при достижении команды RET.
3.8. Программирование операций пересылки между регистрами общего назначения
При разработке программ часто возникает необходимость в пересылке данных между регистрами общего назначения. К сожалению, такие команды в МК51 отсутствуют. Выполнить пересылку между регистрами можно двумя основными способами.
3.8.1. Первый способ основан на использовании аккумулятора в качестве регистра временного хранения данных. Например, необходимо переслать данные из регистра R3 в регистр R7 текущего банка РОН.
Запишите в память симулятора коды программы, выполняющую пересылку из R3 в R7:
MOV A, R3 ; Пересылка содержимого R3 в аккумулятор
MOV R7, A ; Пересылка содержимого аккумулятора в регистр R7
NOP
Выполните программу пересылки в пошаговом режиме, предварительно занеся в регистр R3 исходные данные, например, число 33H.
Программа пересылки по 1-му варианту занимает в памяти только 2 ячейки. Недостатком ее является потеря данных в аккумуляторе, для сохранения которых требуются дополнительные команды.
3.8.2. Второй способ основан на том, что регистры общего назначения располагаются в памяти данных МК, т.е. являются обычными ячейками ПД с определенными адресами в диапазоне 00H…1FH. Для пересылки между регистрами можно использовать команды вида:
MOV add, ads , где обозначено: ads – адрес ячейки ПД источника, add – адрес ячейки ПД приемника. Пересылка выполняется без использования аккумулятора.
Пусть, например, надо переслать данные из регистра R3 в регистр R7 банка 0. Адрес регистра R3 в 0-м банке РОН будет 03H, а регистра R7 – 07H.
Запишите в память симулятора команды:
MOV 07H, 03H ; Пересылка содержимого ячейки ПД с адресом 03H (регистр R3)
; в ячейку ПД с адресом 07H (регистр R7)
NOP
Выполните команду в пошаговом режиме, предварительно занеся в регистр R3 число 03H.
Этот способ позволяет пересылать данные между регистрами, находящимися в разных регистровых банках. Пусть, например, требуется переслать данные из регистра R3 0-го банка РОН в регистр R7 3-го банка. Адрес регистра R3 в 0-м банке будет 03H, адрес регистра R7 в 3-м банке РОН будет 1FH.
Занесите в память программ симулятора команды:
MOV 1FH, 03H ; Пересылка содержимого ячейки 03H в ячейку 1FH
NOP
Исследуйте работу программы в пошаговом режиме, наблюдая за изменением содержимого ячеек ПД.
Достоинствами второго способа пересылки являются то, что не используется аккумулятор, а также не требуется переключать банки РОН при пересылке. Недостатки – команда пересылки занимает в памяти 3 ячейки, требуется знать адреса регистров в каждом банке РОН.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.