Kun tässä ny assembly kieltä rupesin kokeilemaan niin olen huomannut että kääntäjiä tuntuu olevan aika paljon. Onko niillä sitten mitään näkyvää eroa kun koodivinkeissäkin on eri kääntäjille tehtyjä koodeja? Ja mikä ny niistä kääntäjistä vois olla sellanen hyvä?
Ehei assemblylle ole mitään kääntäjiä, assemblylle on assemblereja (empä tiedä miksi... Joku professori sanonut niin?). Mutta joo, riippuu mihin tarkotukseen haet assembleria. MASM32:sta ja WinAsm studiota (IDEnä) käytän itse windows-ohjelmointiin.
Lainaampas hieman MASM32:n sivuilta (masm32.com) että tiedät mihin olet ryhtymässä, jos olet:
masm32.com kirjoitti:
MASM32 assumes that the programmers who will use it already have experience in 32 bit Windows API programming using compilers and have done some work in assembler. It is not designed as a beginners package and it does not have the support for beginners to learn the basic concepts about assembler. It is recommended that beginners to programming learns a compiler like C/C++ Pascal/Delphi or PowerBASIC before they start on an assembler as this will produce the necessary experience to deal with concepts like registers, data sizes or registers, data types, assembler mnemonics, system API calls and different calling conventions. The learner can always come back to assembler once they are familiar and confortable with a compiler.
Kääntäjissä ei ole merkittäviä eroja. Koodivinkit voi yleensä kääntää toisella kääntäjällä muutaman koodirivin muutoksella. Assembly-kielen komennot vastaavat suoraan konekielen komentoja, mutta kääntäjissä on jonkin verran omia merkintöjä, jotka liittyvät esim. muistin käsittelyyn. Minä olen käyttänyt kääntäjistä MASMia, NASMia ja TASMia, ja mikä tahansa niistä on minusta kelpo valinta.
No en kyllä aloittelija ole ohjelmoimisessa, mutta muuten vaan uteliasuudesta haluan kokeilla assemblya =P
Yksi aika oleellinen ero on, mille prossulle kääntäjä koodin tekee. Jotkut osaavat tehdä jopa usemmille eri prossuille tarpeen mukaan. Myös eri käyttikset saattavat samalle prossullekin vaatia erilaisia binäärejä.
Mutta ilmeisesti täällä oletusarvoisesti puhutaan vain i386 ympäristöistä ja normaaleista kotikäyttäjien pc-koneista.
Toinen aika oleellinen ero jo ihan x86:lla on se, että yleisiä syntakseja on kaksi, AT&T-syntaksi ja Intel-syntaksi. Siitäkin selviää kyllä, mutta se vaatii jo useimpien koodirivien muuttamista. Siihen varmasti on työkalujakin. Näköjään vinkeissä ei ollut yhtään AT&T-syntaksin vinkkiä, mutta esimerkiksi joissakin C-vinkeissä sitä näkyy inline-assemblynä.
x86-asmin jälkeen onkin sitten mukava tutustua ARMin asmiin jossa on esimerkiksi sellainen nätti pervous, että jokaisella komennolla on ehto. Voit vaikkapa verrata rekisterin arvoa nollaan ja tämän jälkeen vain kirjoittaa komentoja jotka ajetaan jos on nolla, pienempi tai isompi. Tietysti komennot eivät saa vaikuttaa lippuihin, muuten homma menee rikki.
Siinä saa ainakin miettiä miten liput muuttuvat ja keksittyä optimointeja kun ei tarvitse hyppiä jokaisen komennon yli.
Aihe on jo aika vanha, joten et voi enää vastata siihen.