gcc: long long a asm
Milan Pikula - WWW
www na fornax.elf.stuba.sk
Čtvrtek Květen 27 17:34:01 CEST 1999
On Tue, 25 May 1999, Pavel Machek wrote:
W>Ahoj!
W>
W>> potrebuji v C pouzit assembler (i386) a z nej zavolat funkci, ktera
W>> vraci typ long long, tedy asi takto:
W>
W>Podle me tohle nesmis.
zdar.. priznavam sa, ze som to v zivote nerobil, takze som sa neozval ked
som cital prvy mail. ked som videl toto, uz mi to nedalo, tak som naklepal
takyto program:
unsigned long long testik(int x)
{
printf ("Testik 0x%.8x\n", x);
return 0x10101010f0f0f0f0ll;
}
void main(void)
{
long long bla = -1;
printf ("0x%.16Lx\n", bla);
__asm__(
"pushl $0x12345678\n\t"
"call testik\n\t"
: "=da" (bla)
);
printf ("0x%.16Lx\n", bla);
}
na moje velke prekvapenie na prvy krat bezal.
W>> Jeste otazka: k cemu presne jsou pouzity registry edi, esi a ebx? Gcc,
W>> pokud je pouziva, si je vzdy uschova a na konci funkce obnovi.
W>
W>To bude souviset s volaci konvenci...
spravil som si programcek, ktory mi tie registre vypisal. vyzera to takto:
ESI=0x00000000
EDI=0xbffffb60
EBX=0xbffffb40
v preklade do slovenciny je ESI asi pointer na zaciatok pamati alebo podobna
hovadina, EDI je 4A0 od konca zasobnika a EBX 480 od konca. co konkretne tam
je bude treba pozriet asi v zdrojakoch c0, ktore tu teraz nemam..
--
Milan Pikula, WWW. Finger me for Geek Code.
http://fornax.elf.stuba.sk/~www, www na fornax.elf.stuba.sk
.. dajte mi pewnu linku a pohnem zemegulow ..
Další informace o konferenci Linux