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?
- 6702 megtekintés
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 - A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
elofordul. gcc, vagy gas? bar nagy kulonbseg nincs
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
gcc-vel ez megy nekem:
asm ("pop %eax; push %eax");Mindenesetre, ha fordítási hibát kapsz, esetleg segít, ha be is idézed.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
:-)
- A hozzászóláshoz be kell jelentkezni
(Off: a [szerkeszt] helyett a [like] gombot nyomtam le, elnézést;)
- A hozzászóláshoz be kell jelentkezni
64 biten is? Neten bogarászva látom, hogy ott okoz gondot.
Szerk: ez vígan végzi a semmittevést:
int main()
{
__asm("call PASS ;\
jmp EXIT ;\
PASS : ;\
pop %rax ;\
push %rax ;\
ret ;\
EXIT :");
return 1;
}
- A hozzászóláshoz be kell jelentkezni
Megjegyzem: soha az életben nem használtam még inline assemblyt gcc alatt. Na jó, most.
- A hozzászóláshoz be kell jelentkezni
Akkor most fordul? Debugger nevű szoftvereszközzel próbáltad? (lásd: display/$i meg stepi/nexti utasítások)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Off: rögtön beírhattad volna a topicba...
Amúgy ezt a "-masm=intel" -lel fordul, fut-ot honnan veszed? Kiegészítve értelmes körítéssel -S nélkül elhal, -S-sel meg assembly kódot generál, hiszen a -S jelentése "Compile only; do not assemble or link"
- A hozzászóláshoz be kell jelentkezni
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).
- A hozzászóláshoz be kell jelentkezni
+1, ld. fentebb, bár nem fogalmaztam meg ilyen szépen.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
igen
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 - A hozzászóláshoz be kell jelentkezni