Я пытаюсь создать код, который изменяет два последовательных бита из байта, используя наименьшее количество переменных.
Память должна быть организована следующим образом:
aabbccdd eeffgghh iijjkkll mmnnoopp qqrrsstt uuvvwwxx
Каждыйгруппа букв представляет один байт, а каждая буква представляет интервал, в котором я могу хранить 2-битное значение.
Пока я могу дать частичный ответ, так как этот код никогда не записывает новые нулевые битыв нужный слот. Только один.
MEMORY equ 30h ;pointer to ram
SLOTNO equ 8h ;2-bit Slot unit we want
mov A,#SLOTNO
rrc A
jnc noc
xch A,R2
rl A
rl A
xch A,R2
noc:
rrc A
jnc noc2
xch A,R2
swap A
xch A,R2
noc2:
add A,#MEMORY
mov R1,A ;R1 = memory pointer + (slot # / 4)
mov A,@R1
orl A,R2 ;put the 2 bits in
mov @R1,A
Есть ли способ, которым я могу сделать это, не требуя третьего байта памяти (в этом примере третий байт памяти является регистром R2)?
И что самое простоеспособ обеспечить сохранение правильных 2-битных данных?
Я программирую это для микроконтроллера AT89C4051, и у меня заканчивается память.