gcc: long long a asm

Vojta Filip vojta na kolej.mff.cuni.cz
Čtvrtek Květen 27 19:15:56 CEST 1999


Milan Pikula - WWW wrote:
> 
> 
> 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.

Aha, netusil jsem, ze mohu pouzit neco jako "=da", vzdy jsem pouzival
jen "=r" nebo "=g", budu si muset lepe precist dokumentaci. Diky, je to
presne co jsem potreboval.

> 
> 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..
> 

Zkoumal jsem par C zdrojaku prelozenych do asm a prislo mi ze je pouziva
na jine veci. Spise by me zajimalo, kde sehnat nejaky presny popis
volaci konvence gcc na i386. Prohledaval jsem prozatim predevsim jen
info, ale tam jsem to nenalezl.

Jeste jednou diky

   Vojta


Další informace o konferenci Linux