Prof. Célio Guimarães - IC1
Atualizado em: 14/08/2012
Sejam (r1, r0) e (r3, r2) operandos de 16 bits onde r1 e r3 são os bytes mais significativos e r0 e r2 os menos significativos. Seja também cte16 uma constante de 16 bits, por exemplo $1234.
Soma: add r0, r2
adc r1, r3
Subtr: sub r0, r2
sbc r1, r3
Comparacao: ; equivale à subtacao sem alterar os operandos
cp r0, r2
cpc r1, r3
No que se segue suponha que o operando 1 seja (r17, r16) (high, low)
Subtrai constante de 16 bits do operando 1
subi r16, low(cte1) ; subtrai de r16 os 8 bits menos significativos de cte1
sbci r17, high(cte1) ; subtrai com CY de r17 os 8 bits mais significativos de cte1
Comparação com constante de 16 bits
cpi r16, low(cte1)
ldi r20, high(cte1) ; nao altera os flags! (bits de SREG)
cpc r17, r20
Soma constante de 16 bits ao operando 1
subi r16, low(-cte1) ; nao existe soma com imediato no AVR,
sbci r17, high(-cte1) ; subtraindo o negativo da constante = soma!
Calcula o negativo (complemento de 2 ) do operando 1
com r16
com r17,
subi r16, low (-1)
sbci r17, high(-1)