MC404EF    -    Aritmética de 16 bits com o AVR

Prof. Célio Guimarães - IC1

Atualizado em: 14/08/2012

Soma, subtração e comparação de valores inteiros sem sinal de 16 bits

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)