Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
progi_dlya_ekzamena.doc
Скачиваний:
3
Добавлен:
25.09.2019
Размер:
120.83 Кб
Скачать

2.3.1.1.Переслать 5 байт из внутренней памяти данных во другую область этого же сегмента памяти данных. Начальный адрес 1-го байта - 20н, переслать надо в ячейки, начиная с адреса 40н.

Распределение ресурсов: При пересылках между внутренними ячейками памяти нужно в каком-либо указателе хранить текущий адрес ячейки, из которой пересылают, а в другом указателе - адрес, куда пересылают. Для этих целей можно использовать регистры R0 и R1 как указатели при косвенной адресации. Естественно, предварительно в них надо загрузить начальные адреса массивов. Кроме того, в каком-либо другом регистре, например R3, нужно организовать счетчик переданных байтов.

NAME MOVEII

Beg: mov r0,#20h ;загрузка в указатель адрес начала первого массива

mov r1,#40h ;загрузка во второй указатель адрес начала второго массива

mov r3,#5 ;загрузка в счетчик числа передаваемых байт

m1: mov a,@r0 ;пересылка в А элемента первого массива

mov @r1,a ;пересылка из А этого числа по новому адресу

inc r1 ;увеличение адреса текущего байта во втором массиве

inc r0 ;увеличение адреса текущего байта в первом массиве

djnz r3,m1 ;вычитание из счетчика 1 и проверка его на 0, если не 0, то повтор обмена

END

2.3.1.2. Переписать все байты массива чисел во внешней памяти с начальным адресом addr1 и количеством элементов, содержащихся в r5 в другую область внешней памяти с начальным адресом addr2.

Распределение ресурсов: Здесь, в отличие от задачи 2.3.1.1, пересылки осуществляются внутри внешней памяти. В качестве указателя при этом может выступать только указатель данных DPTR. Однако он один, а областей данных две. Поэтому приходится запоминать текущий адрес первого массива в паре регистров (например, R0, R1), а адреса второго массива в регистрах R2, R3. Счетчик байт будет организован в R5.

NAME MOVEEE

Beg: mov dptr #ADDR1 ;загрузка в указатель адреса начала 1-го массива

mov r0, dph ;сохранение содержимого ст. байта указателя в регистре

mov r1,dpl ;сохранение содержимого мл. байта указателя в регистре

mov dptr #ADDR2 ;загрузка в указатель адреса начала 2-го массива

mov r2, dph ;сохранение содержимого ст. байта указателя в регистре

mov r3,dpl ;сохранение содержимого мл. байта указателя в регистре

mov r5,#NUMB ;загрузка в счетчик числа передаваемых байт

m1: mov dph, r0 ;восстановление из регистров текущего состояния

mov dpl, r1 ;указателя на 1-й массив

movx a, @dptr ;пересылка байта из массива в А

inc dptr ;увеличение указателя на 1

mov r0, dph ;сохранение содержимого мл. байта указателя в регистре

mov r1, dpl ;сохранение содержимого мл. байта указателя в регистре

mov dph, r2 ;восстановление из регистров текущего состояния

mov dpl, r3 ;указателя на 2-й массив

movx @dptr, a ;пересылка байта из А в массив

inc dptr ;увеличение указателя на 1

mov r2, dph ;сохранение содержимого мл. байта указателя в регистре

mov r3, dpl ;сохранение содержимого мл. байта указателя в регистре

djnz r5,m1 ;вычитание из счетчика 1 и проверка его на 0, если не 0, то повтор обмена

END

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