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.

1

702

    Vastaukset

    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ä.

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

    Luetuimmat keskustelut

    1. Keitä täällä on??

      Kertokaa nimenne!! 🤔
      Ikävä
      110
      1084
    2. Tiedät, että en voi enää laittaa viestiä

      Aikaa kulunut. Eikä se näyttäisi enää luontevalta vastata näin pitkän ajan jälkeen. Tiedän myös, että sinä et enää lait
      Ikävä
      82
      814
    3. Tuleeko Martinasta rouva Muhis

      Saako vihdoinkin ne haaveilemansa prinsessa häät Hajjin entinen Muhammad kanssa, 😂 yhteistä heillä on se, että molemmat
      Kotimaiset julkkisjuorut
      264
      606
    4. Nostetaanpas kissa pöydälle: Onko Kuhmossa työpaikkakiusaamista?

      Kuka uskaltaa puhua? Vai uskaltaako kukaan? Naisvaltaisella alalla on kuulemma Kuhmossa ruma tilanne. Mitä aikuiset ede
      Kuhmo
      17
      595
    5. Mitä hyvää

      Mitä hyvää hän on tuonut elämääsi?
      Ikävä
      66
      548
    6. Ei enää kauaa rakkaani

      Ensin minun pitää saatella narsistit oikeuden eteen ❤️
      Ikävä
      93
      535
    7. Miten näytät / näytit ihastumisesi hänelle?

      Toimiko, miten hän vastasi? vinkki5
      Ikävä
      26
      512
    8. Oletko miettinyt sitä

      Että jos meidän persoonat ei sovi yhtään yhteen ;) No onneksi kumpikin on fiksu eikä halua toiselle mitään pahaa.
      Ikävä
      47
      491
    9. Mitä sanoisit

      juuri nyt kaivatullesi jos uskaltaisit/kehtaisit?
      Ikävä
      43
      476
    10. Mökötätkö, kun jäit ilman vastausta?

      Vai mitä ajattelet...
      Ikävä
      47
      437
    Aihe