GCC és Assembly

Fórumok

Sziasztok!

Elég fura a kérdés, ezért talán fura a megfogalmazás is. Linux/Gcc vel Assemblyzik közületek valaki?

Hozzászólások

Valahol a vilagban biztos van valaki, aki latta mar a $RANDOM dolgot.

Attol mert talalsz itt valakit, aki assemblyzik, meg nem biztos, hogy meg fogja tudni oldani a problemadat. Vagy meg fog tudni tanitani az alapokra.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Csak kódszintű ellenőrzésre használom a gcc -S kimenetét - főként mikrovezérlőnél időkritikus részeken.
Legutóbb a Raspberry-n jött jól, kibogózva hogy a C-ben írt tesztprogimra miért vert rá a lua-ban írt és luaJIT-tel futtatott kódom.
Csak akkor javaslom az assemblyt, ha a C kódod átrendezésével sem érsz célt. Ekkor ebbe a .s fájlba nyúlnék bele és ezt fordítanám tovább.

Lásd: mpg123 forráskódját. Ott is így csinálják SSE optimalizálás miatt, de adnak generic C megoldást is.
Assembly egyik veszélye: nem lesz hordozható a kódod. Óvatosan vele, csak ahol tényleg indokolt.

elofordul. gcc, vagy gas? bar nagy kulonbseg nincs

--
NetBSD - Simplicity is prerequisite for reliability

Hmm. Próbáld ki. :-)

Egyébként fordul pöpecül, fut pöpecül, csak nem csinál semmi látványosat.

Amúgy ha megnézed, annyit csinál, hogy leveszi a stack tetejéről a legfelső értéket (ami régmúlt emlékeim szerint, mivel nincsen argumentumod, a visszatérés címe, de rég használtam már :-) ), aztán vissza is rakja.
Persze felmerül számomra a kérdés, hogy a kolléga ezzel mit is akart csinálni. Ha argumentumokat használna, akkor miért nem építi fel a veremkeretet, ha meg nem, (például mert regisztert mentene), akkor miért cserélte fel a push és pop utasításokat.

Meg miért nem tud kérdést feltenni :-).

Megjegyzem, az utolsó INTEL processzor assembly kód, amit írtam/olvastam, az a 80386-os processzorhoz volt. Ami azért kevés már.

Legyen szabad megjegyeznem, hogy ez egy rettenetesen kreten modon feltett kerdes. Mi a fenenek kell megkerdezni, hogy valaki ert-e hozza, majd egy fel nappal kesobb leirni a tenyleges problemat? Ird le a kerdest elsore _ertelmesen_ (mondjuk meg a kodot sem sikerult helyesen idebiggyeszteni) es vagy kapsz ra egy hasznalhato valaszt, vagy nem. Na mindegy, vissza a problemadhoz. A gcc azert mekeg, mert 64 bites architekturan (bar meg ez sem derult ki a kerdesbol) a pop es push 64 bites utasitas, viszont te egy 32 bites regisztert hasznalsz. Az EAX ugyanis a RAX regiszter also 32 bitjenek felel meg. A kerdes most az, hogy 32 bites vagy 64 bites kodot akarsz generalni? Ha 64 bit a cel, akkor hasznald a RAX regisztert a fenti kodban, ha viszont 32 bites kodot szeretnel, akkor ezt kozold a gcc-vel: gcc -m32 asm.c Az utobbihoz persze szukseged lesz a 32 bites libekre (gcc-multilib csomag, disztrotol fuggoen).

Külön köszönöm mindenkinek! Sokat segítettetek! :)

Ilyen időszakom volt és most így sikerült feltennem a kérdést.

Ja, es legkozelebb, mikor azt irnad le, hogy "nem fordul le", inkabb kopipasztazz egyet. Ertjuk, hogy melyen elkeserit, hogy nem fordul le, es ezt kozlod velunk - csakhogy ez szamunkra tokeletesen erdektelen. Viszont egy hibauzenet - na az aztan jo zaftos talalgatasok taptalaja lehet. :-)
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal