един въпрос

9 отговора 445 прегледа
#1

един въпрос

как да компилирам това с борландски компилатор(bcc32):

inline func_name(void)
{
__asm mov eax,-1

//return _EAX; //маха warning-ите че не се връща нищо функцията
}


има ли някакви ключове ?, или ..........?

Аз съм!
Отговор
в отговор на a3 #2

Re: един въпрос

Добре, не можеш ли да го направиш така:

inline func_name(void)
{
__asm
{
mov eax, -1
ret eax
}
}
Така би трябвало директно да ти се върне eax със стойност -1...
Между другото, не видях никаква дефиниция на това което си го изкоментарчил (_EAX), така че не знам как функцията би ти върнала нещо.
А също така не знам как компилатора не ти е дал грешка, че няма дефинирано _EAX.
Но така, както съм го написал по-горе би трябвало да работи.
Успех,
Ал

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

Re: един въпрос

да де но } на функцията възстановява еbp, тъй като

any_func ()
{

се транслира в моя случай до

_any_func proc near
push ebp
mov ebp,esp

Аз съм!
Отговор
в отговор на Neznaest #4

Re: един въпрос

ret eax??? tova puk zashto

tirulirutatuutuu
Отговор
в отговор на a3 #5

Re: един въпрос

naj-dobre e da widish w debug/release (ili s optimizatzii/bez optimizatzii) kakuv kod se geneira na assembler.

wizh kakuv ti e epiloga/prologa, wuw MSVC mozhe da zadadesh naked funckia - bez epilog/prolog - wuw GCC sushto ima podobni sredstwa - no za BCC - hmm.. neznam. Navremeto si spomnjam che _EAX ili EAX (ili kakvoto tam si napisal) direktno se mapvashe kum x86 registur - no si beshe malko riskowano.

A kakuv e problema sus samo return -1?

tirulirutatuutuu
Отговор
в отговор на malkia #6

Уточнение

Когато го компилирам (с bcc32) ми казва, че видите ли не може аз току тъй да пиша inline asm команди в inline дефинирана функция.

В документацията на MSVC++ (каква съвместимост, а!) се казва за тоя проблем и има разрешение - да се подадат някакви ключове за оптимизация на cl. Обаче..... нов проблем - мойта версия на компилатора (Learning Edition), не поддържа въпросните опции (да му .... .......та двоична !@#$!@#^&! ). На току що възникналия въпрос за документацията на bcc32 не мога да кажа нещо по-малко нецензурно.

На уместния вече въпрос защо не ползвам gcc отговора е липса на място за линукс(...., я още веднъж ).

За върнатата стойност си прав, но аз искам и вариант в който да мога да връщам променлива, което само по себе си може да стане:


int var;
__asm
{
;бла - бла
mov var,ecx
}
return var;


но като нищо може да се получи нещо от рода на mov eax,eax. Всичко зависи от това тази локална променлива регистрова ли е, или в стека....
(Виждал съм как една register int variable си се заделя в стека, и то без видимата нужда от това!).
Въобще започвам да се питам дали да не напиша цялата функция на asm.

Аз съм!
Отговор
в отговор на a3 #7

Win32: Cygwin ili mingw32, puk i DJGPP

GCC ima za Win32 - CYGWIN ili MINGW32.

Za poslednoto dori ima free IDE (samo za Win32) - Bloodshed Dev C/C++ - kojato ich ne izglezhda zle ;)

tirulirutatuutuu
Отговор
в отговор на malkia #8

Re: Win32: Cygwin ili mingw32, puk i DJGPP

тъй де с cygwin-а имам разни проблеми - нещо не мога да отсея вярната комбинация от пакети и не ми работи добре. А пък нямам broadband връзка към мрежата.

Това второто тутакси го пробвам!

Благодарности за вниманието!... и отговорите разбира се!


P.S. bcc32 категорично отказва да прави inline функции, в които има __asm изречения

Аз съм!
Отговор
в отговор на a3 #9

Re: един въпрос

//return _EAX; //маха warning-ите че не се връща нищо функцията

А как ти хрумна пък това? Защо просто не си кажеш, че не искаш функцията да ти връща нищо, тоест да е void:

inline void func_name(void)

Отговор
в отговор на Bat Pesho #10

FYI

kogato f-ta e int resultata e w EAX
obache compilatora iska da imas return
toi ne iska f-ta da e void, iska da si e int

Отговор