Dziwne zachowanie sprawdzarki przy zadaniu dodawanie bignumów

Dziwne zachowanie sprawdzarki przy zadaniu dodawanie bignumów

Napisane przez: Zbigniew Drozd ()
Liczba odpowiedzi: 2

Podczas rozwiązania zadania bignum natknąłem się na następujący błąd. Wklejam poniżej wklejam kod wystarczający do zreprodukowania problemu

 

Dla kodu

 
add_bignum:
    mov (%rdi), %r10
    mov (%rsi), %r11
    mov (%rdx), %rax
    ret

otrzymamy wyjście

 
Zły wynik (0)!

 Co jest zachowaniem oczekiwanym, powyższy kod nic de facto nie robi

 

Natomiast kod

 
add_bignum:
    mov (%rdi), %r10
    mov (%rsi), %r11
    mov (%rdx), %r12
    ret

Wywala błąd na sprawdzaczce. Output dla tego submita to

 
Zły wynik ()!

 

Lokalnie nie ma znaczenia czy rejestr to %r12 czy %rax. Błędy pojawiają się na sprawdzarce przy używaniu rejestru %r12 (nie tylko w tym zadaniu)

W odpowiedzi na Zbigniew Drozd

Odp: Dziwne zachowanie sprawdzarki przy zadaniu dodawanie bignumów

Napisane przez: Marek Glück ()

Przed powrotem z procedury nie przywracasz poprzedniej wartości %r12. W ten sposób łamiesz ABI.