wskaźnik do zmiennej funkcji w asm

0

Witam.

Wiem już jak w c++ używając assemblera pobrać wskaźnik do zmiennej globalnej tj. poprzez LEA ale LEA nie działa na zmienne przekazywane do funkcji. Dla przykładu, mam kod:

function ( char zmienna[15] )
{

}

i teraz moje pytanie jest następujące, otóż jak odczytać wskaźnik do zmiennej zmienna. Jest ona przekazywana na stosie, więc LEA nie działa. Nie działa jednak także wrzucenie do DS zawartości SS i wywołanie LEA, ani użycie komendy LDS.

0

Mozesz mi powiedziec do czego jest ci potrzebny wskaznik do zmiennej na stosie? Jakos nie moge sobie wyobrazic takich kombinacji.

0

http://4programmers.net/Forum/viewtopic.php?id=51637
http://4programmers.net/Forum/viewtopic.php?id=51606

W Twoim przypadku zmienna jest na stosie (ss), a lea daje przesunięcie wzgledem ds... Stąd wniosek załadować do ds ss zanim odpalisz lea, to wbrew temu, co napisałes musi zadziałać, albo ... poprzez ss:bp+costam

ale ...

void a(char b[10]){
asm{
// i to działa: w ss:bx jest adres
push ds
push ss
pop ds
lea bx,[b]
pop ds

// i to działa : tak samo ss:bx , to jest szybsze i chyba b. klasyczne
mov bx,bp
add bx,6

}
}

void main(){
a("ala");
}

...to dziala.

// Dopisane... Jak nie działa ? Dostałeś kod sprawdzony pod debuggerem :] Sprawdzony dodatkowo dla wszystkich 6-ciu modeli ;p Działa i łachy nie robi. Akurat w tym przypadku na stosie nie ma wskaznika do danych, tylko same dane.

0

Ech, Dryobates, chodziło mi o to, że jeżeli przekazujemy do funkcji dane w formie tablicy to program kładzie na stos pointer do tej tablicy i ja własnie chciałem go wydobyć.

flabra, Twój pierwszy sposób nie działa ( ale jeszcze się tym pobawię ), natomiast drugi ( ten z użyciem bp ) działa bez zarzutów. Dzięki [browar]

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