Hier mal in Assembler, weniger als 3,3 sekunden

Code:
.include "m32def.inc"


.def temp	=	r16
.def temp2	=	r17
.def temp3	=	r18

.def counter1	=	r20			
.def counter2	=	r21
.def counter3	=	r22

init:

	ldi temp, 0xff				;Ausgänge schalten um das Ende mit 
	out DDRB, temp				;einer LED mitzuteilen
	out PortB, temp

	ldi counter1, 128			;24bit Zahl (=1000000)
	ldi counter2, 150
	ldi counter3, 152

start:

	ldi temp, 5					;Werte laden
	ldi temp2, 2	


multiplikation:

	mul temp, temp2				;multiplizieren


	dec counter1				;Schleife abarbeiten
	brne multiplikation	

	dec counter2
	brne multiplikation

	dec counter3
	brne multiplikation


fertig:

	cbi PortB, 2				;LED an um Ende zu singalisieren


ende:

	rjmp ende
Zu multiplizierende Werte in temp und temp2 laden, das Ergebniss steht dann in r0 und r1.

Das Ergebniss könnte man dann auch gleich verarbeiten, nach erfolgter multiplikation kurze subroutine aufrufen und wieder zurückspringen.

Code:
.include "m32def.inc"


.def temp	=	r16
.def temp2	=	r17
.def temp3	=	r18

.def counter1	=	r20			
.def counter2	=	r21
.def counter3	=	r22

init:

	ldi		temp,high(RAMEND)	;Stack einrichten
	out		SPH,temp
	ldi		temp,low(RAMEND)
	out		SPL,temp


	ldi temp, 0xff				;Ausgänge schalten um das Ende mit 
	out DDRB, temp				;einer LED mitzuteilen
	out PortB, temp

	ldi counter1, 128			;24bit Zahl (=1000000)
	ldi counter2, 150
	ldi counter3, 152

start:

	ldi temp, 5					;Werte laden
	ldi temp2, 2	


multiplikation:

	mul temp, temp2				;multiplizieren
	rcall subroutine			;Ergebniss auswerten

;schneller wäre es die subroutine gleich hier auszuführen


	dec counter1				;Schleife abarbeiten
	brne multiplikation	

	dec counter2
	brne multiplikation

	dec counter3
	brne multiplikation


fertig:

	cbi PortB, 2				;LED an um Ende zu singalisieren


ende:

	rjmp ende



;===========================

subroutine:

	;hier kann man etwas mit dem in r0 und r1 stehenden Ergebniss machen


	ldi temp, 4					;neue Werte laden
	inc temp2


ret								;zurück zum rechnen
Allerdings braucht das dann schon 9 Sekunden.

Wie weit wird denn das Ergebniss verarbeitet?
das sollte auf jeden fall auch in Assembler erfolgen, sonst werden aus den 3,3 Sekunden 3,3 Minuten

Gruß,
Sven