ljmp start
Org 100h
start:
mov sp, #60h
mov dptr, #00h
movx a, @dptr ;младший байт
mov 20h, a ;чтобы иметь возможность адресовать биты
inc dptr
movx a, @dptr ;старший байт
mov 21h, a
inc dptr
movx a, @dptr ;номер бита (1-4), бит (0)
mov 22h, a
rrc a ;номер бита 0-7
mov r2, a ;сохраним как счетчик
jz SetBit ;если бит 0, то на установку бита
mov r3, a ;дубль счетчика, он нам еще понадобится
RightLoop: ;цикл сдвига двойного слова вправо так,
; чтобы нужный бит оказался на месте 0 бита
mov c, 20h.0 ;младший бит младшего байта
mov a, 21h ;ст байт
rrc a ;сдвиг вправо, acc.7 = мл биту мл слова,
; С = мл биту ст байта
mov 21h, a ;сохраним
mov a, 20h ;мл байт
rrc a ;сдвиг вправо, acc.7 = мл биту ст байта (из C)
;мл бит теряем (не нужен)
mov 20h, a ;сохраняем
djnz r3, RightLoop ;сдвинаем "номер бита" раз
SetBit: ;установка бита 0 в младшем байте
mov c, 22h.0 ;новое значение бита
mov a, 20h ;изменяемый байт
mov acc.0, c ;устанавливаем
mov 20h, a ;сохраняем
;вернем слово на место
mov a, r2 ;счетчик сдвигов
jz SaveData ;если бит 0, то сдвигать не надо
LeftLoop: ;цикл сдвига влево
mov c, 21h.7 ;ст бит ст байта
mov a, 20h ;мл байт
rlc a ;сдвиг влево, acc.0 = ст биту ст слова,
; С = ст биту мл байта
mov 20h, a ;сохраняем
mov a, 21h ;ст байт
rlc a ;сдвиг влево, acc.0 = стл биту мл байта (из C)
;ст бит теряем (не нужен)
mov 21h, a ;сохраняем
djnz r2, LeftLoop ;сдвинаем "номер бита" раз
SaveData: ;сохраним во внешней памяти
mov dptr, #00h
mov a, 20h
movx @dptr, a
inc dptr
mov a, 21h
movx @dptr, a
Wait: ;бесконечный цикл
jmp Wait
End
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.