Cześć,
czy może mi ktoś wyjaśnić dlaczego funkcja 'wstaw' tak działa prawidłowo:
wstaw:
push prosba
call _printf
push temp
push fmt
call _scanf
mov ebx, dword[temp]
mov [tab+esi], ebx
add esp, 12
add esi, 4
dec edi
cmp edi, -1
jne wstaw
ret
... a tak już nie:
wstaw:
push prosba
call _printf
push dword[tab+esi] ; Prawidłowo powinien tutaj być wskaźnik. Napisałem o tym niżej. Niestety tylko tak się kompiluje.
push fmt
call _scanf
add esp, 12
add esi, 4
dec edi
cmp edi, -1
jne wstaw
ret
Pytanie zasadniczo dotyczy tego czemu nie mogę wrzucić sobie bezpośrednio na stos elementu tablicy i tam wpisywać do niego wartość jak do zwykłej zmiennej tylko muszę robić to przez temp?
Niestety nie mogę zrobić tak:
push tab+esi
push fmt
call _scanf
ale już tak mogę:
push tab+4
push fmt
call _scanf
Chodzi też o pytanie dlaczego nie mogę przekazać na stos wskaźnika przesuniętego o rejestr, w którym jest przesunięcie, a mogę przekazać wskaźnik przesunięty o stałą.
Tutaj jest cały kod: http://4programmers.net/Pastebin/4167