Thread View: pl.comp.lang.asm
7 messages
7 total messages
Started by Michal
Fri, 27 Jul 2007 21:06
gcc + asm
Author: Michal
Date: Fri, 27 Jul 2007 21:06
Date: Fri, 27 Jul 2007 21:06
21 lines
1013 bytes
1013 bytes
Witam,
mam mniej wiecej taki kod,
int foo()
{
torche kodu w c
wstawka asm
troche kodu w c
return 0;
x:
troche kodu w c
return -1;
}
W jaki sposob moge z wstawki asm przeskoczyc do x? Chce to zrobic
bezposrednio z wstawki (jnz ???), odpada ustawienie zmiennej i if
(zmienna) goto x;
Pozdrawiam,
Michal
Re: gcc + asm
Author: Wojciech Muła
Date: Fri, 27 Jul 2007 22:32
Date: Fri, 27 Jul 2007 22:32
44 lines
1614 bytes
1614 bytes
Michal wrote:
> Witam,
> mam mniej wiecej taki kod,
>
> int foo()
> {
> torche kodu w c
> wstawka asm
> troche kodu w c
>
> return 0;
> x:
> troche kodu w c
> return -1;
> }
>
> W jaki sposob moge z wstawki asm przeskoczyc do x? Chce to zrobic
> bezposrednio z wstawki (jnz ???), odpada ustawienie zmiennej i if
> (zmienna) goto x;
Bezpośrednio ze skokiem warunkowym by się może dało, jakby wyliczyć
przesunięcie, ale ja nie znam za dobrze gas. Natomiast ze zwykłym
skokiem, to będzie tak:
int foo()
{
torche kodu w c
asm(
"jmp *%0"
: // nic na wyjściu
: "0" (&&x) // dwa && pobierają adres
// etykiety (rozszerzenie GCC)
);
troche kodu w c
return 0;
x:
troche kodu w c
return -1;
}
w.
Re: gcc + asm
Author: Kicer
Date: Sat, 28 Jul 2007 04:59
Date: Sat, 28 Jul 2007 04:59
19 lines
1327 bytes
1327 bytes
Wojciech Muła wrote: a ja bede miał pytanie troche offtopicowe próbowalem kiedys poszukac w googlach ale nawet nie do konca wiem jak o to zapytac :) mianowicie gdzie moge poczytac o tym jak mozna przekazywac parametry do wstawek w asm? > asm( > "jmp *%0" > : // nic na wyjściu > : "0" (&&x) // dwa && pobierają adres dokładnie o powyższa linijke się rozchodzi, poza "0" z tego co widziałem można kilka innych znaków użyć tylko nie wiem co oznaczaja :) -- Michał Walenciak, gg: 3729519, mail: Kicer86 na gmail kropka com http://kicer.elsat.net.pl
Re: gcc + asm
Author: Wojciech Muła
Date: Sat, 28 Jul 2007 07:50
Date: Sat, 28 Jul 2007 07:50
24 lines
1785 bytes
1785 bytes
Kicer wrote: > a ja bede miał pytanie troche offtopicowe > próbowalem kiedys poszukac w googlach ale nawet nie do konca wiem jak o to > zapytac :) > mianowicie gdzie moge poczytac o tym jak mozna przekazywac parametry do > wstawek w asm? >> asm( >> "jmp *%0" >> : // nic na wyjściu >> : "0" (&&x) // dwa && pobierają adres > > dokładnie o powyższa linijke się rozchodzi, poza "0" z tego co widziałem > można kilka innych znaków użyć tylko nie wiem co oznaczaja :) W dokumentacji GCC, rozdział "Extensions to the C Language Family": http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/C-Extensions.html sekcje: Extended Asm, Constraints, Asm Labels, Explicit Reg Vars, ale najważniejsza to Constraints. I jeszcze to: http://gcc.gnu.org/onlinedocs/gccint/Output-Template.html gdybyś potrzebował jakiś niestandardowych podstawień. w.
Re: gcc + asm
Author: Bogdan (bogdro)
Date: Sat, 28 Jul 2007 12:26
Date: Sat, 28 Jul 2007 12:26
24 lines
1785 bytes
1785 bytes
Kicer pisze: > Wojciech Muła wrote: > > a ja bede miał pytanie troche offtopicowe > próbowalem kiedys poszukac w googlach ale nawet nie do konca wiem jak o to > zapytac :) > mianowicie gdzie moge poczytac o tym jak mozna przekazywac parametry do > wstawek w asm? >> asm( >> "jmp *%0" >> : // nic na wyjściu >> : "0" (&&x) // dwa && pobierają adres > > dokładnie o powyższa linijke się rozchodzi, poza "0" z tego co widziałem > można kilka innych znaków użyć tylko nie wiem co oznaczaja :) Poza podręcznikiem gcc, którego adres już znamy, podam jeszcze http://www.cs.put.poznan.pl/adanilecki/inline_asm/index.php -- Pozdrawiam/Regards - Bogdan (Linux & FreeDOS) Kurs asemblera x86 (DOS & Linux): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Re: gcc + asm
Author: Wojciech Muła
Date: Sat, 28 Jul 2007 21:49
Date: Sat, 28 Jul 2007 21:49
17 lines
1341 bytes
1341 bytes
Wojciech Muła (czyli ja) wrote:
> Bezpośrednio ze skokiem warunkowym by się może dało, jakby wyliczyć
> przesunięcie, ale ja nie znam za dobrze gas.
Ok, mam:
asm(
"jnz %c0"
: /**/
: "i" (&&nazwa_etykiety)
)
Zapis %c{argument} wstawia w wynikowym kodzie wprost wartość argumentu.
Gdyby zastosować tylko %{argument} wówczas w kodzie wartość stałej
zostanie poprzedzona "$" (jak to na stałą przystało).
w.
Re: gcc + asm
Author: Michal
Date: Sun, 29 Jul 2007 21:30
Date: Sun, 29 Jul 2007 21:30
21 lines
1465 bytes
1465 bytes
Wojciech Muła wrote:
> Wojciech Muła (czyli ja) wrote:
>> Bezpośrednio ze skokiem warunkowym by się może dało, jakby wyliczyć
>> przesunięcie, ale ja nie znam za dobrze gas.
>
> Ok, mam:
>
> asm(
> "jnz %c0"
> : /**/
> : "i" (&&nazwa_etykiety)
> )
>
> Zapis %c{argument} wstawia w wynikowym kodzie wprost wartość argumentu.
> Gdyby zastosować tylko %{argument} wówczas w kodzie wartość stałej
> zostanie poprzedzona "$" (jak to na stałą przystało).
Dzieki. Po porzejrzeniu rozszerzen gcc zamienilem cala wstawke
odpowiednikami z __builtin_ia32_XXX.
Michal
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads