- •Практическая работа № 12
- •Теоретическое обоснование практической работы
- •Примеры
- •Примеры
- •Примеры
- •3. Исследование команд пересылки с косвенной адресацией
- •4. Команды пересылки с использованием регистра dptr
- •Пример
- •Порядок выполнения работы
- •1. Исследование команд пересылки с непосредственной и регистровой адресацией
- •2. Исследование команд пересылки с прямой адресацией
- •5. Исследование команд пересылки, использующих внешнюю память данных
- •6. Исследование команд обмена
- •7. Исследование команд чтения из памяти программ
- •8. Программирование операций пересылки между регистрами общего назначения
- •9. Задания для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
8. Программирование операций пересылки между регистрами общего назначения
При разработке программ часто возникает необходимость в пересылке данных между регистрами общего назначения. К сожалению, такие команды в МК51 отсутствуют. Выполнить пересылку между регистрами можно двумя основными способами.
8.1. Первый способ основан на использовании аккумулятора в качестве регистра временного хранения данных. Например, необходимо переслать данные из регистра R3 в регистр R7 текущего банка РОН.
Запишите в память симулятора коды программы, выполняющую пересылку из R3 в R7:
MOV A, R3 ; Пересылка содержимого R3 в аккумулятор
MOV R7, A ; Пересылка содержимого аккумулятора в регистр R7
NOP
Выполните программу пересылки в пошаговом режиме, предварительно занеся в регистр R3 исходные данные, например, число 33H.
Программа пересылки по 1-му варианту занимает в памяти только 2 ячейки. Недостатком ее является потеря данных в аккумуляторе, для сохранения которых требуются дополнительные команды.
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 ячейки, требуется знать адреса регистров в каждом банке РОН.
9. Задания для самостоятельной работы
Напишите программу, которая обнуляет содержимое регистров R5, R6, R7 0-го банка регистров. Разработайте 4 варианта программы. В первом варианте используйте команды с непосредственной адресацией. Во 2-м варианте используйте команды с прямой адресацией. В 3-м варианте используйте команды с косвенной адресацией. В 4-м варианте используйте аккумулятор и команды пересылки. Определите длину каждой программы, т.е. количество ячеек памяти, которая она занимает. Проверьте правильность работы программ с помощью симулятора AVSIM51.
Напишите программу загрузки регистров 0-го банка из памяти данных в соответствии с табл. 12.1. Разработайте 2 варианта программы с использованием прямой и косвенной адресации.
Таблица 12.1
-
Адрес
30H
40H
Данные
22H
44H
Регистр
R2
R4
Проверьте правильность работы программы.
Напишите программу перезаписи из одних ячеек ПД в другие в соответствии с табл. 12.2. Разработайте 2 варианта программы с прямой и косвенной адресацией.
Таблица 12.2
-
Адрес исходной ячейки
22H
28H
Адрес записываемой ячейки
32H
38H
Проверьте правильность работы программы, предварительно записав по указанным адресам произвольные данные.
Напишите программу запоминания содержимого регистров 0-го банка РОН в памяти данных в соответствии с табл. 12.3. Разработайте 2 варианта программы с прямой и косвенной адресацией.
Таблица 12.3
-
Регистр
R3
R6
Данные
33H
66H
Адрес ячейки
28H
32H
Проверьте правильность работы программы.
Напишите программу записи данных в две области памяти, используя для адресации 1-й области регистр R0, а для 2-й области – регистр R1, в соответствии с табл. 12.4.
Таблица 12.4
-
Адреса 1-й области
25H
27H
Адреса 2-й области
35H
37H
Данные
11H
22H
Проверьте правильность работы программы.
Напишите программу перезаписи из одной области памяти данных (адресуясь через регистр R0) в другую область (адресуясь через регистр R1) в соответствии с табл. 12.5.
Таблица 12.5
-
Адреса исходной области
22H
24H
Адреса записываемой области
32H
34H
Проверьте правильность работы программы, предварительно записав по указанным адресам произвольные данные
Напишите программу, которая заносит в ячейку внешней памяти данных с адресом 10H данные из порта P1.
Напишите программу, которая пересылает содержимое ячейки внешней памяти данных с адресом 001BH в порт P2. Указание. Для адресации ячейки ВПД используйте регистр DPTR.
