Перейти к метке DEST, если содержимое ячейки внутренней памяти с адресом OPER1 больше содержимого ячейки внутренней памяти с адресом OPER2.



Распределение ресурсов: Задача аналогична задаче 2.2.1, за исключением того, что теперь переход осуществляется при С=0, поэтому должна использоваться команда JNC.

NAME SUBTR1

Beg: mov a,OPER1                  ;пересылка содержимого ячейки памяти в А

subba,OPER2 ;вычитание из А содержимого второй ячейки памяти.

jnc DEST             ;переход на метку, если С=0

END

Перейти к метке DEST, если содержимое регистра R3 меньше содержимого ячейки внутренней памяти с адресом OPER2.

Распределение ресурсов: Задача почти полностью аналогична задаче 2.2.1, за исключением того, что теперь надо загружать первый операнд из регистра.

NAME SUBTR1

Beg: mov a,R3 ;пересылка содержимого ячейки памяти в А

subba,OPER2 ;вычитание из А содержимого второй ячейки памяти.

jnc DEST    ;переход на метку, если С=0

END

Перейти к метке DEST, если А содержит положительное число.

Распределение ресурсов: Задача аналогична задаче 2.2.1, за исключением того, что теперь сравнение происходит с фиксированным числом 0.

NAME SUBTR3

Beg: 

subb a,#0    ;вычитание из А нуля для проверки положительности.

jnc DEST    ;переход на метку, если С=0

END

Пересылки отдельных байтов

Пересылка внутри отдельных пространств памяти

Данную группу команд можно подразделить на следующие подгруппы:

· команды передачи данных, использующие внутреннюю память данных;

· команды передачи данных, использующие внешнюю память данных;

· команды работы с таблицами.

В табл.2.3 показаны команды, использующие внутреннее ОЗУ и применяемые при этом режимы адресации.

Таблица 2.3.

Команды передачи данных, использующие внутреннее ОЗУ.

Мнемоника  Операция Режимы адресации

Прямая Косвенная    Регистровая Непосредственная

MOV A, <src> A<=<src> x  x  x  x

MOV <dest>, A <dest><=A    x  x  x      

MOV <dest>, <src> <dest><=<src> x  x  x  x

MOV DPTR, #data16 DPTR<=16-bit константа                          x

PUSH <src>  INC SP:MOV"@SP",<src> x                         

POP <dst> MOV <dest>, "@SP": DEC SP x                         

XCH A, <byte> Обмен ACC и <byte>    x  x  x      

XCHD A, @Ri Обмен младш. полубайтами ACC и @Ri                 x      

В приведенной таблице используются стандартные обозначения: <src>, (source) - иcточник, <dest>, (destination) - приемник. Команда MOV <dest>, <src> позволяет пересылать данные между ячейками внутреннего ОЗУ или SFR без использования аккумулятора. При этом работа с верхними 128 байтами внутреннего ОЗУ может осуществляться только в режиме косвенной адресации, а обращение к регистрам SFR - только в режиме прямой адресации.

Во всех микросхемах MCS-51 стек размещается непосредственно в резидентной памяти данных чипа и растет в сторону увеличения адресов. Поскольку по отношению к SP используется косвенная адресация, то стек может попасть и в область "Upper 128", но не в SFR. В тех кристаллах, где "Upper 128" отсутствует, увеличение стека за границу 128 байт приведет к потере данных.

Операция XCH A, <byte> применяется для обмена данными (exchange) между аккумулятором и адресуемым байтом. Команда XCHD A, @Ri аналогична предыдущей, но выполняется только для младших тетрад (ниблов), участвующих в обмене.

В табл.2.4 приведены команды для работы с внешней памятью данных.

Таблица 2.4.

Команды передачи данных, использующие внешнюю память данных

Мнемоника  Операция Разрядность данных

MOVX A, @Ri Чтение внешней RAM @Ri   8 бит

MOVX @Ri, A Запись во внешнюю RAM @Ri 8 бит

MOVX A, @DPTR Чтение внешней RAM @DPTR 16 бит

MOVX @DPTR, A Запись во внешнюю RAM @DPTR 16 бит

Отметим, что при любом доступе к внешней памяти данных используется только косвенная адресация и обмен информацией осуществляется исключительно через аккумулятор. В случае 8-разрядных адресаций используется R0 или R1 текущего регистрового банка, а для 16-разрядных - регистр DPTR. Сигналы чтения и записи ( и ) активизируются только во время выполнения команд MOVX.

Переслать 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

Переписать все байты массива чисел во внешней памяти с начальным адресом 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


Дата добавления: 2020-04-25; просмотров: 122; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!