Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  mingw (gcc) assembler C koodis märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
kalvis
Kreisi kasutaja

liitunud: 20.10.2009




sõnum 18.08.2012 09:00:39 mingw (gcc) assembler C koodis vasta tsitaadiga

asm("käsk1 käsk2 ... käsk n"); töötab korralikult, kuid kui kirjutada
asm (" käsk1
käsk2
...
käsk n");
siis annab viga. Kas see ongi gcc põhistes kompilaatorites (momendil linuxis pole katsetanud) kõikjal nii. See pikk rida paremalt vasakule ei ole ülevaatlik ja sooviks normaalsel moel assemblerit C koodi kirjutada, seda enam on plaanis palju pikemad koodilõigud kui senised 10 realised.
Muidu asm("käsk 1 /t/n"
"käsk 2 /t/n"
toimib kuid välimuselt on see kole lahendus (eriti kui labelit kasutada) ja teistes kompilaatorites pole sellist jama näinud.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 18.08.2012 10:46:46 vasta tsitaadiga

Tudndub, et ei saa jah: http://stackoverflow.com/questions/3666013/gcc-c-and-inline-assembly-code
_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Erti-Chris
HV vaatleja
Erti-Chris

liitunud: 23.07.2011




sõnum 20.08.2012 17:00:12 vasta tsitaadiga

Kui vaja pikemaid, kui 10 realisi, siis tee uus .asm fail, sinna sisse siis funktsioon ja lase kompillaatoril ning linkeril maagiat teha ja hiljem kutsu lihtsalt välja see funktsioon C failist.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
kalvis
Kreisi kasutaja

liitunud: 20.10.2009




sõnum 22.08.2012 14:18:12 vasta tsitaadiga

Oli sama mõte, et kirjutaksin otse gcc (GAS) assembleris ühe librari valmis ja lingiksin hiljem kokku. Kui väga vaja siis kopeerimisega saaks otse C-sse kopida ja kannataks mega pika rea ära.
Nüüd jäi selle taha, et gcc pakub assemblerit vaid lähtekoodina ja ei viitsinud selle kompileerimisega vaeva näha.
Mitte kuskilt ei leidnud ühtegi howto -d kuidas nullist algaja võiks mõne gcc assembleri näiteprogrammi teha ja "Hello world" assembleris valmis treida (Nasm-dele ja TASM-dele oli küll). Keerulisemaks tegi asjaolu, et lähtekood on linuxis ja tuleb krosskompileerimist kasutada ja sama hiljem assembleriga. Superuniversaalne väljund, kuid kuidagi peab algselt ühe näiteprogrammi windowsile saama valmis treitud, et võtmed ja muu mudru ilusasti selged oleksid.

Momendil jään selle rohmaka lahenduse juurde, et C-s on koleda välimusega assembleri lõik. Assembleris on ikkagi vaid mõnede funktsioonide triviaalsed bititeisendused koos for käsu ja mõningate lihtsate tingimustega. Teine lahendus oleks kasutada instrinc assembleri käske C-s, kuid mulle ei meeldi mitte üks raas nende süntaks, andmetüübid jne, kood on veel vähem ülevaatlikum, ja ei usu teps mitte üks raas, et kompilaator saaks assembleri, C käskude ja instrinc SIMD käskude ja iga ühe erinevate andmetüüpidega kokteili ka optimaalselt kompileeritud.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Aruta
HV vaatleja

liitunud: 29.10.2009




sõnum 04.03.2013 15:49:08 vasta tsitaadiga

Oli netis üks näide, mis paistis täitsa töötavat.
Vähemalt mingw midagi paha ei öelnud.
(Neti versioon oli 1. näites // abil read välja kommitud.
Siis hoiatas et multiline kommentaar.
)
Kehval ajal ikka natuke abiks.

#define cpuid1(index, a, b, c, d)\
__asm \
{\
mov esi, ebx\
mov eax, index\
cpuid\
mov ebx, esi \
mov a, eax\
mov b, esi\
mov c, ecx\
mov d, edx\
};


#define cpuid2(func,a,b,c,d)\
__asm mov eax, func\
__asm mov esi, ebx\
__asm cpuid\
__asm mov ebx, esi \
__asm mov a, eax\
__asm mov b, ebx\
__asm mov c, ecx\
__asm mov d, edx\
tagasi üles
vaata kasutaja infot saada privaatsõnum
kalvis
Kreisi kasutaja

liitunud: 20.10.2009




sõnum 04.03.2013 16:06:51 vasta tsitaadiga

Momendil sain notepad++ juba oma librari tehtud (on need kõik C lihtsad assembleri funktsioonid koos) ja õnnestus ka notepad++ otse kompileerima panna otse notepadis. Leidsin, et codeblockil saab isegi külge pookida assembleri süntaksi toe ja seega saab ühel lehel C-d ja teisel assemblerit ja veel kokku ka kompileerima panna.
Aga kunagi ei tea kui vaja vaid väike jupp koodi assembleris kirjutada.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Aruta
HV vaatleja

liitunud: 29.10.2009




sõnum 06.03.2013 21:07:03 vasta tsitaadiga

Vaatasin et translaator oli täitsa nõus kui reale

mov ebx, esi; siia saab veel pika jutu panna\

Komm vahele kirjutada. Oleks nagu päris asm.
Ainult seda \ ei luba ära jätta.

Aga mis sulge translaator siia tahab:
DICONDITION ccf[2] = {0};
Annab hoiatuse

Ja mis hala see uuid.lib üle käib?
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  mingw (gcc) assembler C koodis
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.