GNU assembler (gas) ja linkkeri (ld ?)

Anonyymi-ap

1. Onko normaalia toimintaa GNU assemblerilta, että vain .o -tiedostoon menee oikea data, ja .lst -tiedostoon tulee väärää dataa ?

Esim. kun on hyppykäsky tai funktiokutsukäsky (jmp, call, rjmp, rcall), niin käskyn ns. opkoodi on oikein, mutta kohdeosoite on .lst -tiedostossa aina sama, eli jos on 2 eri funktiokutsua, niin .lst -tiedostossa molemmille näkyy sama kohdeosoite, ja relatiivisilla kutsutavoilla kohdeosoite ei ole sama, mutta etäisyys kutsusta kohteeseen on sama (taitaa olla aina 0).

Entä, miten on linkkrin (ld ?) laita ?

JOS gas on saanut .lst -tiedostoon väärän kohdeosoitteen, niin korjautuuko tuo esim. .bin tai .hex -tiedostoon oikeaksi, vai jääkö vääräksi ?

Yritän siis tässä kysellä sitä, että muodostavatko gas ja ld siinä mielessä yhden kokonaisuuden, että .lst -tiedosto ei gas:n tapauksessa ole edes tarkoitus olla absoluuttisesti oikea, vaan vasta linkkeri (ld) korjaa kohdeosoitteet oikeaksi, vai jääkö vääräksi kokonaan ?

Tässä on kyse AVR -mikrokontrollerille kääntävästä (gas) ja linkkaavasta (ld) ohjelmasta - mutta käsittääkseni toimintaperiaatteet ovat gas ja ld osalta samat x86 -versiossa ja AVR -crosscompiler -versiossa. Cross siinä mielessä, että vaikka käännetään AVR:lle, niin kääntäminen tapahtuu Windows -PC:ssä.

Voisi (gas, ld) tietysti teoriassa olla 64 -bittinenkin ohjelma, mutta tästä ei ole käytännössä mitään hyötyä - kun AVR:n muisti lasketaan kilotavuissa, niin 32 -bittisen ohjelman kokorajoituksella ei ole mitään merkitystä.

Vaihtoehto toki olisi käyttää jotain muuta assembleria, siis sellaista, joka osaa itse luoda intel hex -formaattia olevan tiedoston AVR:lle siirtoa varten, jolloin erillistä linkkausvaihetta ei tarvita lainkaan. Mutta gas:n kanssa tarvitaan.

Assemblerin vaihto toiseen vain tässä tarkoittaisi sitä, että joutuisin itse koodaamaan apuohjelman, joka muuntaa gas -syntaksia esim. AVRA:lle sopivaksi.

2

704

    Vastaukset 2

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi00002

      Saattaa tulla vähän myöhässä vastaus, mutta vastaanpa silti. En ole tarkkaan tutustunut juuri tuohon kuvailemaasi tapaukseen, mutta totta tosiaan linkkeri on osa käännösvaiheiden kokonaisuutta. Se on ensimmäinen apuohjelma, joka käsittelee ohjelmaa yhtenä kokonaisuutena.

      Linkkerin tehtävä on sijoitella eri osiot suoritustiedoston imageen (elikkä erilliset muistiavaruudet yhdistyvät yhteen loogiseen avaruuteen), josta syystä tietysti muistiosoitteita sisältävät käskyt pitää käydä korjaamassa, mikä on toinen tehtävä linkkerille. Objektitiedostothan eivät tiedä toisistaan mitään eivätkä tiedä minne ne tullaan sijoittamaan valmiissa suoritustiedostossa. Niissä pitäisi kyllä olla jonkunlainen tietorakenne osoitteista, mitä pitää linkkerin käydä korjaamassa. Lisäksi kolmantena linkkerin tehtävänä olisi löytää ulkoiset symbolit (muuttujat, funktiot esim.), joita ei löydy samasta objektitiedostosta vaan muista linkkerille samassa yhteydessä syötetyistä objektitiedostoista. Näistäkin pitäisi olla joku tietorakenne objektitiedostossa, missä luetellaan omat symbolit ja tavara joka pitäisi löytyä muualta.

      Tarkka toimintatapa toki riippuu tietokonearkkitehtuurista ja muista sovituista käytänteistä.

    • Anonyymi00003
      UUSI

      kaikissa muissa assemblereissa EI OLE noin hölmösti!

      Esim Turbo Assembler tuottaa sekä .obj että .lst -tiedostoon juuri sitä mitä pitääkin.

      Siinä käytetään ORG -ohjauslausetta (jos ei käytetä, se on oletuksena sama kuin ORG 0).

      Toki linkkeri voi muuttaa osoitteita jos useita .obj -tiedostoja linkataan yhdeksi kokonaisuudeksi.

      Mutta: vaikka joku ei haluaisi käyttää linkkeriä vaan jostain syystä haluaisi tehdä homman manuaalisesti, voisi kullekin .asm -tiedostolle laittaa oman ORG -lauseensa niin, ettei mikään osoite mene päällekkäin - tällöin manuaalisesti yhdistämällä koodia jopa .lst -tiedostosta periaatteessa saisi toimivan ohjelman (jos koodi muuten on kirjoitettu oikein).

      huom: tuossa kyllä pitäisi tarkistaa että antaa oikeat komentorivioptiot! .lst tiedosto ei ole alunperin tarkoitettu "manuaaliseen linkkaamiseen" - eli JOS sitä silti siihen käyttää - pitäisi varmistaa että optiot on siten, että .lst -tiedostoon tulee jokainen generoitu tavu eikä mitään jätetä pois esim. liian pitkän rivin takia.

      No, Turbo Assembler onkin paremmin tehty kuin gas. mutta valitettavasti Turbo Assembler on vain x86 -Assembler - eli AVR:stä se ei mitään ymmärrä.

      mitä kaikkia vaihtoehtoja muuten on AVR:n ohjelmointiin?

      gavrasm on sekin 1 - tosin se tuottaa suoraan .hex - se ei osaa tuottaa .o tai .obj -tiedostoja - jos on yhden modulin ohjelma - tuo voi olla jopa etu - mutta monen modulin ohjelmissa tuo on iso haitta - kun ei osata tuottaa .obj --- miten saat kokonaisuuteen yhdistettyä useita moduleja?

    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Oot upea nainen, älä vähättele ittees

      Ja tietojeni mukaan 2 muuta on susta kiinnostuneit mun lisäks. 👀
      Ikävä
      68
      1307
    2. KP-Sesongilla ongelmia?

      Tarvitsen luotettavaa katonpuhdistajaa ja kuulin, että KP-Sesonki Oy tekee hommat edullisesti ja asiakkaan tarpeet huomi
      Ylöjärvi
      20
      1162
    3. Mikä kaivatussasi ärsyttää

      Juuri nyt, tällä hetkellä?
      Ikävä
      89
      1101
    4. Jämsän Paras Ravintola

      Särkijärven kioskiin on avattu uusi upea Maucas ravintola joka on jämsän paras. Loistava palvelu ja herkullinen ruoka. R
      Jämsä
      66
      1025
    5. Salaisuudet paljastuu

      Viimeiset hetket meneillään ottaa yhteyttä. Kertoa totuus ja selvittää asioita. Viimeiset hetket meneillään jos joku
      Ikävä
      84
      719
    6. Ihmettelet nainen, miten vielä sinua rakastan

      No jos en enää sinua ajattelisi, niin ei se mitään rakkautta olisi alunperinkään. En tarvi sinusta nähdä merkkiäkään, ni
      Ikävä
      47
      693
    7. Poliisi pamputti Variskankaalla

      Mistä lie alkanut ja miksi poliisit kutsuttu, mutta mielestäni hyvin toimittu. Jos haluaa rähistä eikä rauhoitu puheella
      Kajaani
      28
      667
    8. Kiellettyjä ajatuksia

      Istutaan sylikkäin, katson sun silmiin, vastaat kstseeseen ja kiedon kädet sun ympärille. Huulet koskettaa sun huulia,
      Ikävä
      43
      636
    9. vapaa

      sana :) 🚮
      Ikävä
      63
      636
    10. Onko ihan pakko

      olla niin hiton pitkävihainen? Sinulle nainen...
      Ikävä
      38
      609
    Aihe