Ako neki ASM guru zna da odgovori na ovo bilo bi jako lepo :)
dakle, problem je sledeci - C projekat je poprilicno veliki i radi se na optimizaciji nekih funkcija mixovanjem asm i c koda.
Simulacija asm-koda u posebnom test.c fajlu (odvojenog od projekata) radi sasvim lepo, ali kada se ubaci u funkciju koja meni treba (u projektu) nastaju vrlo cudni problemi kod adresiranja C varijabli i nizova.
Dakle, imamo globalno definisani niz:
float table[16384];
i funkciju:
int fja()
{
/* c kod */
/* ... */
__asm {
// .. asm kod
mov edx, table
// ...
}
}
I sad, kod puca - debugger kasnije kaze da pokusavam da adresiram nesto (indirektno kroz EDX) i EDX je NULA?
EDX uopste ne dobija adresu table, iako u step-by-step modu table pokazuje na memorijsku adresu niza? Posle mov edx, table (i verifikacije da je adresa table OK) edx je i dalje nula u mom projektu?
Zamena table, sa indirektnim pointerom table_ptr (table_ptr = &table[0]) radi posao, ali kasnije kada se ucitava float (fld) dobije se #IND - iako table[n] pokazuje na korektno formatiran float.
Menjanje kompajlera (VC++, ICL) ne pomaze. Napomena - kod radi u posebnom c fajlu koji je test projekat, samo ne radi u velikom projektu?
Da li neko ima ideju? Kod je i386 32-bitni flat model. VC 6.0, ICL 7.0 kao kompajleri?
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey