[Asm]Tryb adresowania

0

Hej Bracia w Bitach

nurtuje mnie następujące zagadnienie:czy adresując trybem indeksowanym z przesunięciem,moge do tego celu użyć jakiejś zmiennej?W książce "turbo asembler-biblia użytkownika" coś takiego przyuwazyłem,ale w praktyce to nie idzie,natomiast poszukiwania w googlach i wice nie dały mi zadawalających odpowiedzi.Zatem zwracam się do Was Bracia.
wg przykładu:

DWORD indeks;
char znak,tabela[]="ABCDEFGHIJK";

main()
{
indeks=2;
_asm{
lea edi,tabela
mov al,byte ptr[edi+indeks]//DUPA,daje mi komunikat "Acess Violation",czyli że gdzieś w kosmos trafia
mov znak,al
}
cout<<znak;
}

Bardzo będę wdzięczny,jeśli ktoś podzieli się ze mną wiedzą jak czegoś takiego użyć,albo potwierdzi że w taki sposób nie da się adresować

0

Możesz, ale jak to już kwestia tego jakiego kompilatora używasz. Przykład dla G++

#include <iostream>

int main(){
   int indeks;
   char znak, tabela[] = "ABCDEFGHIJK";

   indeks = 2;
   asm(".intel_syntax noprefix\n\t"
       "mov %0, [%1 + %2]\n\t"
       ".att_syntax prefix\n\t"
       : "=r" (znak)
       : "r" (tabela), "r" (indeks)
       );

   std::cout << znak;
   return 0;
}

Aczkolwiek zwykłe indeksowanie w C wyjdzie pewnie lepiej ;)

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