praegune kellaaeg 19.06.2025 02:14:16
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
18.08.2012 09:00:39
mingw (gcc) assembler C koodis |
|
|
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 |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
Erti-Chris
HV vaatleja

liitunud: 23.07.2011
|
20.08.2012 17:00:12
|
|
|
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 |
|
 |
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
22.08.2012 14:18:12
|
|
|
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 |
|
 |
Aruta
HV vaatleja
liitunud: 29.10.2009
|
04.03.2013 15:49:08
|
|
|
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 |
|
 |
kalvis
Kreisi kasutaja
liitunud: 20.10.2009
|
04.03.2013 16:06:51
|
|
|
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 |
|
 |
Aruta
HV vaatleja
liitunud: 29.10.2009
|
06.03.2013 21:07:03
|
|
|
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 |
|
 |
|
lisa lemmikuks |
|
|
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.
|