ATmega128: addition et la soustraction des nombres 16 bits (de l'assemblée)

Je travaille avec un ATmega128 microcontrôleur et les soi-disant besoin d'ajouter deux nombres 16 bits. Je suis à l'aide d'AVR Studio et c'est ce que j'ai obtenu jusqu'à présent:

.include "m128def.inc";

.equ    ramstart = 0x100
.def    temp = r16

.dseg
.org ramstart
number1: .byte 2
number2: .byte 2

.cseg
.org 0

rjmp start

start:
    ; number1 := 0x7856
    ldi temp, low(number1)
    sts number1, temp
    ldi temp, high(number1)
    sts number1+1, temp

    ; number2 := 0x34B2
    lds temp, number1
    sts number2, temp
    lds temp, number1+1
    sts number2+1, temp

slutt:
    rjmp slutt

Ce n'est pas loin d'être la première fois que je suis en utilisant n'importe quel type d'assemblée, je sais que je suis en train de faire quelque chose de mal, mais n'arrive pas à comprendre quoi. Ai-je raté le drapeau de portage?

est-ce un devoir? Si oui, veuillez étiqueter comme tel. oui, vous devez d'abord charger des registres, alors vous devez ajouter tous ou la soustraction. Vous pouvez toujours revenir à ajouter/adc ou sub/sbc à effectuer un grand nombre de bits/octet ajoute ou soustrait.
Si j'utilise ajouter ou adc, comment dois-je stocker le résultat de la bonne façon?

OriginalL'auteur Lasse A Karlsen | 2012-02-09