Zitat Zitat von robotxy
So! Ich habe jetzt mal mit Stopuhr gestoppt(AVR Resetet und gleichzeitig Uhr gestartet)

Für 10 Millionen Multiplikationen hat er 41,31 Sekunden gebraucht.
Dieser Assemblerschnippsel benötigtmit halbwegs realistischen Bedingungen ca: 9,4 sek (so um die 150 Mio Takte).

Anzeige wenn fertig mittels LED an PIN PD0

Halbwegs realistisch heisst:
Ich hole mir die 2 Faktoren aus dem Speicher und das 16 Bit ergebniss wandert auch dort hin.

Das Halbwegs kommt übrigens daher, das 10 Mio Multiplikationen doch schon leicht übertrieben sind. Denn:

1. alleine für die Faktoren würde man so ca: 19 MB Ram benötigen.
2. nur für die Ergebnisse ebenfalls.

Also, wenn man mit dem Mega mal ebend 38 MB externen RAM angesteuert bekommt ist das sicherlich kein Problem.

Code:
;
; Definitionsfile
	.include 	"m32def.inc"

;
; Registeraliase
	.def		temp		= r16
	.def		fak1		= r17
	.def		fak2		= r18
	.def		count1		= r20
	.def		count2		= r21
	.def		count3		= r22

	.cseg
	.org 0x00
;
; ISR Vektoren
	jmp			isr_reset							; Reset

	.org		0x2A
;
; HW Initialisierung
isr_reset:

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

	ldi			temp,		0xFF					; alle ungenutzten Ports -> Eingang + Pullup
	out			PORTA,		temp
	out			PORTB,		temp
	out			PORTC,		temp
	out			PORTD,		temp

	ldi			temp,		1						; Pin D0 -> Ausgang +H
	out			DDRD,		temp

;
; Definierte Werte schaffen
	ldi			ZH,			high(SRAM_START)
	ldi			ZL,			low(SRAM_START)

	ldi			temp,		2
	st			Z,			temp
	ldi			temp,		5
	std			Z+1,		temp

; Main Loop
loop_init:
	ldi			count3,			0x98
	ldi			count2,			0x96
	ldi			count1,			0x7F

loop:
	ld			fak1,			Z
	ldd			fak2,			Z+1

	mul			fak1,			fak2

	std			Z+2,			r0
	std			Z+3,			r1
	
	subi		count1,			1
	sbci		count2,			0
	sbci		count3,			0
	brne		loop

	cbi			PORTD,			0

	break

	jmp		loop_init
Grüße,

da Hanni.