🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
7 messages
7 total messages Started by Michal Fri, 27 Jul 2007 21:06
gcc + asm
#1393
Author: Michal
Date: Fri, 27 Jul 2007 21:06
21 lines
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
#1394
Author: Wojciech Muła
Date: Fri, 27 Jul 2007 22:32
44 lines
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
#1395
Author: Kicer
Date: Sat, 28 Jul 2007 04:59
19 lines
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
#1396
Author: Wojciech Muła
Date: Sat, 28 Jul 2007 07:50
24 lines
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
#1397
Author: Bogdan (bogdro)
Date: Sat, 28 Jul 2007 12:26
24 lines
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
#1398
Author: Wojciech Muła
Date: Sat, 28 Jul 2007 21:49
17 lines
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
#1399
Author: Michal
Date: Sun, 29 Jul 2007 21:30
21 lines
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