Примеры использования команд логических операций

 

Пример 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 и в данном примере специфицирован пользователем для выполнения функций флага паритета.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: