Assembler algorytm Euklidesa

0

Witam o to mam problem . Napisałem algorytm Euklidesa metodą odejmowania no i przy linijce:

pushl 7
pushl 5

gdy liczby są w takiej kolejności to wyskakują mi głupoty typu że NWD jest 3

a gdy mam na odwrót

pushl 5
pushl7

to już jest w porządku. Mój kod:

.section .data

.section .text

.globl _start
_start:
pushl $7
pushl $5
call euklides
addl $8, %esp
popl %ebx
movl %eax, %ebx
movl $1, %eax
int $0x80

.type euklides, @function
euklides:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ebx
movl 12(%ebp),%ecx
movl %ebx, -4(%ebp)
euklides_loop_start:
cmpl %ebx , %ecx
jz end_euklides
ja odejmuje_euklides
subl %ecx, %ebx
movl %ebx, -4(%ebp)
odejmuje_euklides:
subl %ebx , %ecx
movl %ecx ,-4(%ebp)
jmp euklides_loop_start
end_euklides:
movl -4(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
1

A nie zapomniałeś tam jednego jmp? Np tuż przed odejmuje_euklides: wstaw jmp euklides_loop_start

Poza tym po co pakujesz pośrednie wyniki do -4(%ebp)? Na końcu przecież ebx == ecx == -4(%ebp), więc zapis do -4(%ebp) można wywalić.

0

Ok dzięki wielkie za odpowiedź :) pomogło, trochę jestem laikiem w programowaniu w asm i myślałem, że jeden jmp na końcu wystarczy, teraz zastanawia mnie tylko jak przerobić program, żeby wczytywać liczby z klawiatury, a nie wprowadzać bezpośrednio w kodzie

1 użytkowników online, w tym zalogowanych: 0, gości: 1