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