Assembler algorytm Euklidesa

DI
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:4
0

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

Kopiuj
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

Kopiuj
pushl 5
pushl7

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

Kopiuj
.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
edytowany 1x, ostatnio: dix
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:2 minuty
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ć.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
DI
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:4
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

Wibowit
Niestety nie programowałem na Linuksy/ Uniksy w asemblerze, więc ci nie podpowiem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.