Olen pitänyt C:tä ja Assemblyä eri kielinä. Näin kuitenkin osoitteesta http://en.wikipedia.org/wiki/GNU_Multi-Precision_Library , että GMP olisi kirjoitettu C:llä. Toisaalta GMP:n dokumentin kohdassa 3.13 Profiling lukee: Most of the GMP assembly code has the necessary symbol information.
Eli onko kyseessä kaksi eri kieltä vai onko Assembly C:n osajoukko?
Eli onko kyseessä kaksi eri kieltä vai onko Assembly C:n osajoukko?
Vastaukset 3
Vanhimmat
että sitä ohjelmoijan konekilistä koodia tarvitsee kääntää enää ykkösnollille: joskus ohjelmoija voi kuvitella, että hän pystyy tuottamaan parempaa konekieltä kuin kone ja siksi kone kääntäjineen antaa ohjelmoijalle tilaisuutensa näyttää tällä tavalla Assemblyllä kyntensä olemalla optimoimatta tai muutenkaan ronkkimatta sitä kohtaa koodista millään tavalla enänpi mieleisekseen.
"Eli onko kyseessä kaksi eri kieltä vai onko Assembly C:n osajoukko?"
Koska C-ohjelma käännetään konekoodiksi, niin sitä voi myös sorkkia Assembly-koodilla, joko inline:nä tai erillinen assembly-tiedosto, joka linkitetään mukaan tai vaikkapa kääntää C-tiedosto ensin assembly-koodiksi, sitten editointi ja lopullinen käännös.
Sama on mahdollista *kaikissa* konekoodia pukkaavissa kieli kääntäjä yhdistelmissä, ei vain C:ssä.
Jos vertaa tavukoodiksi kääntyviä kieliä, niin lienee selvää ettei niissä ole assembly mahdollisuutta. Toki epäsuorasti voidaan esim. Pythonissa kutsua C-kielistä osaa, josta taas osa on käsin kirjoitettua assembly-koodia.
C-kielen kääntäjä toimii kaksiosaisesti, ensin C-käännetään assemblyksi
ja se sitten vasta kohdekoneen konekoodiksi.
Näin siksi, että jos kohdeprosessorin konekieli vaihtuu niin varsinaiseen
C-koodiin ei tarvitse tehdä mitään muutoksia, ainostaan jälkimmäinen
kääntäjän osa vaihdetaan kohteen mukaan.
Tämä mahdollistaa sen, että koodaaja voi C-kielen joukkoon laittaa
assemblyä vähän samaan tapaan kuin html:n joukkoon PHP:ta.
Tarkemmin en osaa nykyohjelmoijia tässä neuvoa, en ole koodannut
C:tä vakavissani enää 20:een vuoteen.