inline assembly

10 отговора 313 прегледа
#1

inline assembly

Nqkoi znae li kak se vika metod v inline asm izraz.Napimer:

class A{
public:
A(){}
.
.
void MethodA();
};

class C{
public:
C(){}
.
.
.
void Caller();
private:
void MethodC();

A m_A;
int m_nVar;
.
.
};

void C::Caller(){
__asm{

????????????? ;vikane na MethodC()

???????????? ;vikane na MethodA()

}
}

Za dannite v class C go pravq taka:

//nVar = m_nVar
void Caller(){
int nVar;
__asm{
mov ebx, this
mov eax, [ebx].m_nVar
mov nLocal, eax
}
}

Отговор
в отговор на CObject #2

Re: inline assembly

Sam si otgovarqm no sega vidqh 4e compilatora ne go pozvolqva.
Moje samo ne predefinirani globalni funkcii.

Taka 4e pitaneto mi ve4e e za nqkakuv alternativen na4in

Отговор
в отговор на CObject #3

Re: inline assembly

статична функция ( която сигурно по нищо не се различава от глобалната ) дето да взима като допълнителен параметър указател към обекта и да му привиква метода, който те интересува не върши ли работа?

само идея...

Отговор
в отговор на Mycлoн #4

Re: inline assembly

Da taka stava
Samo 6te vidq dali si zaslujavat razhodite.
vsimul kak 6te se otrazi na skorostta
10x

Отговор
в отговор на CObject #5

Re: inline assembly

а за какво ти е чак такава скорост? пък знаеш ли дали компилатора няма да го оптимизира по-добре от теб - пък и с по-малко access violations

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на CObject #6

Re: inline assembly

Не се занимавай с глупости. Пиши си на С++. Компилатора ще го оптимизира по-добре от теб. Особено ако си с интелския компилатор.

Отговор
в отговор на lUnknown* #7

освен ако

не иска да ползва разни те му там ММХ.

Отговор
в отговор на CObject #8

Re: inline assembly

мнапиши го на С++, дизасемблирай и виж

Отговор
в отговор на CObject #9

Re: inline assembly

Zasto ne iskash da polzvash code-a generiran ot compilator-a?

Viz tozi code:
__asm{
mov ebx, this
mov eax, [ebx].m_nVar
mov nLocal, eax

Toi e veche po-baven ot originalnia koito ste se generiara ot compilator-a. Poneze tova e method na class C this e veche v ecx ili ebx registrite. Taka che prisvoiavaneto mu na ebx e bezsmislenno i vsastnost izlishna zaguba na vreme :)
Za da izvikash MethodA ste triabva da znaesh v koi register se ochakva da pristigne this pointer-a (obiknovenno ecx ako niamam greshka) i da go zaredish s m_A predi da izvikash method-a.

Отговор
в отговор на dummy #10

Re: inline assembly

Da ne goworim, che indeksiraneto s [ebx] wednaga sled kato e zareden ebx na predishnata instrukcija wodi do zadyrzhane na konwejerite.

Откажи се от тая работа. Асемблерът има своето (крайно ограничено) място в съвременните програми, но главно за чисто изчислителни задачи - отляво масив числа, отдясно масив числа, взимаш мотиката и смяташ до хоризонта със SSE2 (щото с ММХ не можеш да постигнеш кой знае какво, а нормалния код с плаваща запетая компилатора ще го докара по-добре).

Отговор
в отговор на CObject #11

Re: inline assembly

Bez da zaredq qvno this v nqkoi regisrur na stava!
A ina4e povi6ih skorostta s okolo 6% no predi da izpipam asm koda
tozi procent be6e otricatelen:)
Vsi4ko tova pravq s u4ebna cel.No na practika koda trudno 6te se 4ete
osobeno za golemi proecti

Отговор