Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prn_ 51_pr1.doc
Скачиваний:
17
Добавлен:
19.02.2016
Размер:
370.18 Кб
Скачать

III. Работа с внешней памятью данных (впд).

1. Запомнить в впд содержимое регистров банка 0.

Начальный адрес ВПД – 0D000h

MOV PSW,#01000B ; Выбор банка регистров 1

MOV R0,#8 ; Счетчик = 8

MOV DPTR,#0D000H ; Определение начального адреса ВПД

MOV R1,#0 ; Определение начального адреса РПД

L: MOV A,@R1 ; (А) = (регистр)

MOVX @DPTR,A ; Передача из аккумулятора в ВПД

INC R1 ; Переход к следующему регистру

INC DPTR ; Приращение указателя адреса

DJNZ R0,L ; R0=R0-1, если R0>0, то повторить

IV.Операции со стеком.

1. Перед загрузкой в стек содержимое регистра-указателя стека (SP) инкрементируется, а после извлечения из стека – декрементируется.

По сигналу системного сброса в SP заносится значение 07h. Для переопределения SP можно воспользоваться командой MOV SP,#D

Пример:

ORG 0h

MOV SP,#BUFSTEK ; Инициализация стека

; Программа

ORG 40h

BUFSTEK DS 10 ; Резервирование памяти для стека

2. Классический пример работы со стеком – подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые она сама будет использовать, а перед возвратом в прерванную программу должна восстановить их значения.

ORG 0C003H ; Задание адреса вектора прерывания

LJMP SUB ; Переход на подпрограмму обработки

ORG 0C100H

SUB: PUSH PSW ; Сохранение в стеке PSW

PUSH A ; Сохранение аккумулятора

PUSH B ; Сохранение B

PUSH DPL ; Сохранение DPTR

PUSH DPH

MOV PSW,#1000B ; Выбор банка регистров 1

; Обработка прерывания

POP DPH ; Восстановление сохраненного

POP DPL

POP B

POP A

POP PSW ; Восстановление PSW и номера регистрового банка

RETI ; Возврат

Индивидуальное задание на лабораторную работу

1 Программу, заполнение участка РПД, начиная с определенного адреса 20Н, и длиной 5 байт произвольной константой.

2. Сохранить содержимое текущего банка регистров в резидентной памяти данных, начиная с адреса 12Н.

3. Сохранить содержимое текущего банка регистров в ВПД, начиная с адреса С200Н.

4. Сохранить в стеке участок памяти, начиная с адреса 20Н, и длиной 3 байта, а затем восстановить его по прежнему адресу.

5. Обменять содержимое регистров R1,R2 и R3 регистровых банков 1 и 2 между собой.

6. Выполнить задание варианта 5, используя в качестве временного хранилища данных область в ВПД по адресу С200Н.

7. Переслать содержимое участка памяти длиной 4 байта из РПД по адресу 16Н в ВПД по адресу С200Н.

8. Организовать стек по адресу 12Н и сохранить в нем содержимое регистров банка 3.

Задания 2

  1. Переслать массив из одной области памяти в другую, причем четные и нечетные байты поменять местами.

  2. Поменять местами два массива в памяти, используя стек.

  3. Поменять местами между собой половинки массива.

  4. Сформировать новый массив из каждого четвертого байта заданного массива.

  5. Записать в каждый пятый элемент массива значение предыдущего байта.

  6. Поменять местами каждый второй и каждый третий элемент (байт) массива.

  7. В массиве поменять местами байты, равноотстоящие от начала и от конца массива(зеркально отобразить массив относительно середины).

  8. Из заданного массива сформировать новый массив, изменив порядок следования элементов на противоположный, и переслать его на место исходного.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]