inkrementacja duzej liczby z wykorzystaniem stosu

0

Witam,

Mam problem ze zrozumieniem operacji na stosie w asamblerze.
Treść zadania: W składni AT&T uzupełnij zapisu funkcji realizującej inkrementację duzej liczby o rozmiarze N słów maszynowych. Adres i rozmiar liczby są przekazywane przez stos.

Początek programu jaki był dany:

inkrem:
push %ebp
movl %esp, $ebp
movl 8(,%ebp, 4), %ecx # rozmiar liczby ze stosu do rejestru %ecx
movl 12(,%ebp,4), ... # adres liczby do rejestru (PYTANIE 1)

...
...
...

movl %ebp, %esp #przywrocenie wskaznikow poziomu wywołania
pop %ebp

Przedstawię ogólny zarys programu według mnie oraz pseudo kod.
Pobieramy kolejne słowa (32b) z pamięci (little endian), zwiększamy je o 1 uwzględniając przeniesienia między kolejnymi słowami.

inkrem:
push %ebp
movl %esp, $ebp
movl 8(,%ebp, 4), %ecx # rozmiar liczby ze stosu do rejestru %ecx
movl 12(,%ebp,4), %esi # adres liczby do rejestru (PYTANIE 1)

petla:
movl liczba(,%esi,4), %eax #wczytujemy slowo z pamieci do %eax
adc $1, $eax # zwiekszamy rejestr o 1 uwzledniajac przeniesienie (jesli petla wykonuje sie 1 raz mozna uzyc adc?)
inc %esi # nastepna liczba w pamieci
dec %ecx # zmniejszamy licznik
cmp $0,%ecx
jnz petla

movl %ebp, %esp #przywrocenie wskaznikow poziomu wywołania
pop %ebp

Pozdrawiam,
Marek

0

jeden dodajesz tylko do najmłodszego (pierwszego) słowa, bez przeniesienia (add)
do kolejnych dodajesz zero z przeniesieniem (adc)

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