Цитата(TamTam @ Mar 15 2006, 10:11)

вопрос ка зделать так
есть 2 пина к примеру PORTB.2 и PORTB.3
надо в одну строчьку уложиться
на ассемблере пришло в голову следующее решение, может быть можно и за меньшее число команд.. однако, одной командой точно такое не сделать.
Код
.def AL = R16
.macro IncBits23OfPortB
in AL, PortB
bst AL, 4; сохранить bit4
andi AL, ~(1 << 4); погасить bit4 (чтобы не было переполнения при инкременте
subi AL, -4 ; прибавить 4
bld AL, 4; восстановить bit4
out PortB, AL
.endmacro
Казалось бы простенькая задачка, ан нет.. чтобы получить решение в общем виде целая куча команд нужна и 2 вспомогательных регистра.
Код
.def AL = R16
.def AH = R17
.macro IncBits23OfPortB2
in AL, PortB
mov AH, AL
subi AL, -4
andi AH, ~( (1 << 2)|(1 << 3) )
andi AL, (1 << 2)|(1 << 3)
or AL, AH
out PortB, AL
.endmacro