rekursive Summe in Assembler

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

rekursive Summe in Assembler
hi ich habe hier assembler code der rekursiv alle Zahlen von1 bis n zusammenzählt (Blatt 2 Aufgabe 6)

Der Code scheint mir jedoch etwas Aufwändig - hat jemand eine simplere Variante für mich?

1.data
2n:
3	.long 16
4
5.text
6sum:
7
8	movl	4(%esp), %ebx
9	cmpl	$0, %ebx
10	je	.CASEZERO	
11	cmpl 	$1, %ebx
12	jne	.ELSE
13	jmp	.IF


14.ELSE:		
15	movl	%ebx, %ecx
16	subl	$1, %ecx
17	pushl	%ecx
18	call 	sum		
19	addl	$4, %esp
20	addl	4(%esp), %eax
21	ret

22.IF:
23	movl	$1, %eax
24	ret

25.CASEZERO:
26	movl	$0, %eax
27	ret
	
28.global main
29main:
30	pushl 	n
31	call	sum		
32	addl	$4, %esp
33	ret

hallo Zusammen, ich habe jetzt noch ein alternative zusammengebaut, aber wirklich besser ist das auch nicht.

.data
n:
	.long 16

.text
sum:

	movl	4(%esp), %ebx
	cmpl	$0, %ebx
	je	.CASEZERO	
	cmpl 	$1, %ebx
	jne	.ELSE
	jmp	.IF


.ELSE:		
	subl	$1, %ebx
	pushl	%ebx
	call 	sum		
	popl	%ebx
	addl	%ebx, %eax
	ret

.IF:
	movl	n, %eax
	ret

.CASEZERO:
	movl	$0, %eax
	ret
	
.global main
main:
	pushl 	n
	call	sum		
	addl	$4, %esp
	ret

.data
n:
    .long 16

.text
sum:
    mov  4(%esp), %ecx
    test %ecx, %ecx
    jle  .zero
    push %ecx
    dec  %ecx
    push %ecx
    call sum
    add  $4, %esp
    pop  %ecx
    add  %ecx, %eax
    ret
.zero:
    xor %eax, %eax
    ret

.globl main
main:
    pushl n
    call sum
    addl $4, %esp
    ret