Пример 8. Маскирование при вводе. Ввести в регистр R7 информацию из линий 0, 1, 3, 4 и 7 порта P1:
IN A, P1 ; ВВ0Д БАЙТА ИЗ ПОРТА P1
ANL А, #10011011В ; МАСКИРОВАНИЕ
MOV R7, A ; ПЕРЕДАЧА
Пример 9. Ввести в аккумулятор данные из порта Р2 и выделить требуемые биты по маске, находящейся в R0:
IN А, Р2 ; ВВ0Д ИЗ ПОРТА Р2
ANL A, R0 ; МАСКИРОВАНИЕ
Пример 10. Выполнить логический сдвиг влево двухбайтного слова, расположенного в R2 и А:
SHF: RLC A ; СДВИГ МЛАДШЕГО БАЙТA
ХСН A, R2 ; 0БМЕН АККУМУЛЯТОРА И R2
RLC А ; СДВИГ СТАРШЕГО БАЙТА
XCH A, R2 ; ОБМЕН
Пример 11. Выполнить арифметический сдвиг двухбайтного слова R2 и А вправо:
SHIP: CLR C ; СБРОС ФЛАГА ПЕРЕНОСА
CPL C ; УСТАНОВКА ФЛАГА ПЕРЕНОСА
XCH A, R2 ; 0БМЕН БАЙТАМИ
JB7 NEXT ; ЕСЛИ R2.7 НЕ РАВНО 1, ТО СБРОС
CLR C ; ФЛАГА ПЕРЕНОСА
NEXT: RRC A ; СДВИГ ФЛАГА ПЕРЕНОСА В РАСШИРИТЕЛЬ
XCH A, R2 ; ОБМЕН
RRC A ; СДВИГ МЛАДШЕГО БАЙТА
|
|
Пример 12. Умножить аккумулятор на число 2 в степени X, где X - число (не более 8), хранящееся в R2. Умножение на 2 заменяется арифметическим сдвигом влево аккумулятора и регистра R1:
MOV R0, #00; СБРОС R0
CLR С ; СБРОС ФЛАГА ПЕРЕНОСА
LOOP: RLC A ; АРИФМЕТИЧЕСКИЙ СДВИГ ВЛЕВО ОБЬЕДИНЕННОГО
ХСН A, R1 ; 16-БИТНОГО РЕЗУЛЬТАТА
RLC А ; РЕГИСТР0В0Й ПАРЫ R1 и A
ХСН A, R1
DJNZ R2, LOOP; ЦИКЛ
Пример 13. Выдать содержимое аккумулятора в последовательном коде через нулевую линию порта Р1, оставляя без изменения остальные биты порта. Передачу вести, начиная с младшего бита:
MOV R1, #08; СЧЕТЧИК БИТ
LOOP: JB0 ONE ; ПЕРЕХОД, ЕСЛИ РИТ А.0 РАВЕН 1
ANL P1, #FEH; СБРОС Р1.0
JMP NEXT
ONE: ORL P1, #01H; УСТАНОВКА Р1.0
JMP NEXT ; ИЗБЫТОЧНАЯ КОМАНДА ДЛЯ ВЫРАВНИНАНИЯ ВРЕМЕНИ ПЕРЕДАЧИ 0 И 1
NEXT: RR A ; СДВИГ АККУМУЛЯТОРА ВПРАРО (ПОДГОТОВКА К ПЕРЕДАЧЕ
; ОЧЕРЕДНОГО БИТА)
DJNZ R1, LOOP
Пример 14. Настроить биты 0—3 порта Р1 на ввод:
ORL P1, 0FH; УСТАНОВКА БИТОВ Р1.0... Р1.3
Пример 15. Очистить биты 4—7 порта 2:
ANL P2, 0FH; CБPOC БИТОВ Р2.4... Р2.7
Пример 5.16. Выдать в линию 0 порта 4 значение четвертого бита аккумулятора:
SWAP A ; ОБМЕН БИТОВ 0 И 4 АККУМУЛЯТОРА
ANL А, #01 ; ВЫЧИСЛЕНИЕ БИТА А.0
ORLD P4, A ; УСТАНОВКА Р4.0, ЕСЛИ А.0 = 1
ORL A, 0EH ; УСТАНОВКА БИТОВ 1...3 АККУМУЛЯТОРА
ANLD P4, A ; CБРOC P4.0, ЕСЛИ А.0 = 0
Пример 17. Определить четность числа единиц в аккумуляторе:
CLR F0 ; СБР0С F0
MOV R7, 08 ; ЧИСЛО ПОВТ0Р0В
LOOP: RRC A ; ПЕРЕСЫЛКА БИТА А.0 В ПЕРЕНОС
JNC NEXT ; ПРОПУСТИТЬ, ЕСЛИ БИТ РАВЕН 0
CPL F0 ; ПОДСЧЕТ ПАРИТЕТА
|
|
NEXT: DJNZ R7, LOOP; ПОВТОРИТЬ 8 РАЗ
После выполнения программы аккумулятор сохранит свое значение, флаг F0 будет установлен, если число единиц в аккумуляторе было нечетно. Флаг F0 входит в состав PSW и в данном примере специфицирован пользователем для выполнения функций флага паритета.