[ Ramirez @ 06.06.2004. 13:40 ] @
Ako imam recimo 3 instrukcije i ja zelim da mi prva bude skok na trecu ja to mogu da uradim ovako:

JMP SKOK
INC EAX
SKOK:
DEC EAX

Ali to mi je extra glupo.... kako ja da mu kazem da skoci na trecu instrukciju ako ne znam njenu adresu (bar mislim da je ne znam)... znam samo poziciju te instrukcije u odnosu na skok? Nadam se da ste me razumeli?
[ Mikky @ 06.06.2004. 14:05 ] @
1. Ne razumem zasto ti je ovo "extra-glupo".
2. Ne razumem sta zapravo zelis. JMP instrukcija radi tako sto skace za neki br bajtova u odnosu na nju a ne na tacno odredjenu adresu. Npr
jmp skok:
ce se kompajlirati u jmp XX, gde je XX broj bajtova u napred ili nazad koliko treba skociti.
[ Ramirez @ 06.06.2004. 15:40 ] @
ma znam ja to.... nego ako ja napravim lupam 100 linija koda u kojima imam 15 skokova, za svaki skok moram da imam label (ako se to tako zove) koji govori mom skoku gde da skoci.... kada ja otvorim neki vec iskompajlirani exe... on lepo kaze JMP 0040A65C. Pa sam ja mislio da to moze da se uradi tako nekako...???
[ system0verride @ 07.06.2004. 15:28 ] @
Ne razumem zasto ce ti tako nesto onda moras da znas tacno mesto svakog dela koda u memoriji i heksa oznake masinskih operacija ?
[ Ramirez @ 07.06.2004. 15:59 ] @
pa meni je sasvim ok da imam label koji mi oznacava petlju... pa svaki put kada idem u petlju skok skace na nju... ali ako u toku programa imam samo obicno racvanje (recimo da preskacem neku instrukciju) kod mi izgleda smesno :) prosto vise ne znam kako da nazovem svaki label a da mi to ima smisla??? ali nije vazno.....

Imam nesto drugo da pitam:

u .exe fajlu imam insturkciju:
LEA EDX,DWORD PTR DS:[ECX+ECX*2]
mene zanima kako ja da znam sta se tamo nalazi (debuger mi kaze sta tamo ima)... tacnije kako da naprisem svoj .asm kod koji ce dobiti istu vrednost u EDX kao u fajlu iz kog je ova instrukcija?

I mozda jos vaznije pitanje je: meni nije jasan taj nacin indexiranja.... sta od cega zavisi i cela ta segment:offset prica... citao sam o tome ali nisam bas najbolje skapirao pa ako neko zna neki tutor ili knjigu (uglavnom sam procitao ono sto je u TOP-u )?
[ Bojan Kopanja @ 07.06.2004. 20:47 ] @
Pa sto se tice skokova, kada bi radio tako kako ti kazes iamo bi ogromnih problema... Zamisli situaciju: Napisao si program od, recimo, 1500 linija koda, sto i nije nesto veliko i u njemu imas 30 skokova. Ti si radio skokove kao jmp 0FF32C0h ( primer samo za jedan skok, zamisli da su svi takvi... ) i sada si nesto dodao u svom kodu ili si nesto izbacio zbog optimizacije koda. Posle toga tebi vise ni jedan skok nece radi kako treba, jer su svi pomereni u memoriji "gore" ili "dole", tako da bi morao rucno da prodjes kroz ceo kod i da za svaki od tih 30 skokova ponovo racunas na koju adresu sada treba da skace...

Eto, to je jednostavan primer problema koji bi bio neizbezan takvim nacinom rada, a inace linker i uradi to sto ti pricas, tj. napravi tabelu relokacija za skokove i onda i kada se nesto promeni on na osnovu te tabele relokacija zna opet gde treba da "prebaci" skokove.

Eto, nadam se da sam ovo dobro objasnio ( a ako sam negde pogresio, molim kolege koji imaju veci staz rada u asembleru da me odmah isprave ... ).

Pozdrav!
[ Sundance @ 08.06.2004. 17:05 ] @
ako su instrukcije na koje to primjenjujes dosta slicne, implementiraj ih preko makroa i prefiksiraj lokalne labele sa @(TASM) ili koja je vec sintaxa u asembleru koji koristis. primjer koji si naveo nema smisla, pa ne znam sto da napisem, ali mislim da ces se vec snaci.. :)

ono pitanje u vezi "pronalazenje vrijednosti u registru" je extra-glupo :) pa vidi u debuggeru koji su brojevi, dodijeli ih registrima i simuliraj! indeksiranje na x86 je milost bozja u odnosu na, recimo, ARM. Zato suti i uci :-))