9-Bit Wert addieren

Gast #1965578
Lesenswert?

Hallo,

Stehe hier vor einem (ziemlich blöden) Problem... Addition in Assembler, 
8-Bit werte sind ja einfach mit ADD und ADC zu berechnen.

Aaaber....
Problem: Ich lese von einem DIP-Schalter einen Wert ein
1
in    XL, PinC   ;get start address
2
com   XL
3
clr   XH
4
sbis  PinE, PE2  ;9th bit
5
inc   XH

Zuerst die ersten 8 Bytes, dann das neunte Byte hinterher. Wert von 
0-512.
Und jetzt will ich diesen Wert um die Zahl 8 erhöhen, also wenn vom 
Eingang z.B. 20 gelesen werden, soll der Wert dann 28 sein usw...

Irgendwie blick ich da nicht ganz durch, vor allem XL und XH sind mir 
nicht ganz klar... bis jetzt sind meine Assemblerkenntnisse noch nicht 
so weit, komme eher aus der C-Welt.

Hintergrund des ganzen: den DMX-Demultiplexer (Quellcode ist auch daher) 
von hier http://www.hoelscher-hi.de/hendrik/light/demux.htm so 
modifizieren, dass die eingestellte Adresse für den Startkanal um 8 
verschoben ist.

Hoffe ihr könnt mir mit diesem vermutlich doch recht simplen Problem 
helfen!

cyberLink
Gast #1965588
Lesenswert?

du kannst recht simpel eine 16 bit-Addition vornehmen:

clc
add operand_1_low, operand_2_low
adc operand_1_high, operand_2_high

was du jetzt davor in die jeweiligen Operanden gespeichert hast, ist ja 
deine Sache :-)
#1965635
Lesenswert?

Genau, der AVR kann mit add/adc nur Register addieren.
Ansonsten gäbe es noch ADIW. Das macht genua das was du willst 
(Konstante zu 16bit-Zahl addieren), allerdings mit der Einschränkung auf 
die letzten vier Registerpaare (R25:R24, X,Y,Z)...
(Wenn eins dieser Registerpaare noch frei ist, kannst du ADIW nehmen. 
Wenn nicht, dann bleib ruhig bei der add/adc-Variante. Das ist bloß ein 
Befehl mehr im Flash. Schneller ist es nicht, ADIW braucht auch zwei 
Takte.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren