Перейти к метке 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!