PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 500 werte in assembler addieren



freddy0815
07.02.2005, 16:33
sorry, dass ich schon wieder störe....
aber ich such mir immer das schwerste aus. addieren in assembler.

programmiere in avr studios.
habe schon ein paar kleine codes gefunden um zwei 16bit zahlen zu addieren. aber ich versuche 500 8bit werte zu addieren. maximal kann dabei eine 24bit zahl rauskommen.
sprich: 500*256 = 128000 entspricht 1 F4 00

die 500 werte stehen im daten register. mit dem zeiger (x) gehe ich alle werte nacheinander durch. dabei will ich sie addieren.


ld temp, x+
add r1, temp

aber was wenn r1 nun überläuft??

addieren in assembler ist ja schwerer als in der grundschule....

danke im voraus
freddy0815

Thorsten
07.02.2005, 16:38
gibt es da nicht irgendwo ein overflow flag ( asm ist bei mir schon ein bischen her)?

EDIT:
Habs gefunden:
SREG:0 Carry flag, wird bei einem Überlauf gesetzt.

Thorsten
07.02.2005, 16:46
Hab hier ein Tutorial von Gerhard Paulus gefunden, da ist gut beschrieben wie
man mit großen Zahlen umgeht. Der Rest ist auch sehr lesenswert.

07.02.2005, 17:29
das mit dem carry flag stimmt zwar schon, aber wenn ich z.b. 200 + 200 rechne, dann sollte nach adam riese 400 rauskommen. aber das carry flag hat ja nur '0' und '1'. dann weiss ich ja immernoch nicht, wie gross das 2.byte sein muss.

naja. ich werd mir mal dieses tutorial reinziehn. das wird ne weile dauern ;-)

danke für den download!
freddy0815

Thorsten
07.02.2005, 18:04
schau mal ins Tutorial, da gibts nen Befehl "add with carry", das carry bit steht
ja dann für die nächstgrößere zahl z.B.



200 11001000
+200 11001000
--------------------------------
400 1 10010000
^.......................... Das ist das carry Bit, und muss zum nächsten Byte
dazugerechnet werden. In Byte 1 Steht dann nur noch
400-256=144.


EDIT: Ist ne ganz schöne Bastellei bis das gut aussieht :-)

freddy0815
08.02.2005, 08:53
danke für die tipps. habs so hinbekommen:

ld temp, x+
add r1,temp
adc r2,r4
adc r3,r4

die schleife geh ich für die 500 werte durch.

freddy0815

Thorsten
08.02.2005, 13:25
jupp, so meinte ich das.