[Asm]Tryb adresowania

Odpowiedz Nowy wątek
2006-08-07 14:11
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ć


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2006-08-07 17:16
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 ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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