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

708

    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

      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. Riikka Purra on mukana Suomen huutokauppakeisari -sarjassa

      Suomen huutokauppakeisari on tavallisten suomalaisten ohjelma. Sarjan suosiosta kertoo se, että nyt alkaa jo 19. kausi t
      Maailman menoa
      158
      1473
    2. Kuuleppas

      ensimmäiset naissuhteet toimii miehelle eräänlaisena oppikouluna, mutta hän ei välttämättä itse ymmärrä oppineensa mitää
      Ikävä
      255
      1063
    3. Mulla ei ole Suomessa enää mitään

      4 vuotta joutuu asumaan henkisessä vankilassa. Sitten voi muuttaa takaisin ulkomaille.
      Turku
      183
      702
    4. Kuinka nainen jaksat ja voit

      Toivottavasti hyvin.
      Ikävä
      43
      691
    5. Provider miehistä..

      Tietyt miehet puhuvat ilkeästi naisista, jotka haluavat elää miehen tuloilla. Eikö? Mutta miksi tietyt miehet siitä pah
      Ikävä
      199
      638
    6. Sinulle nainen

      En ehkä koskaan osannut sanoa tätä oikein. Minun vaikeuteni luottaa liittyi ennen kaikkea menettämisen pelkoon. Siihen
      Ikävä
      63
      605
    7. Tiedätkö sitä

      Että sinun äänesi on ihanan pehmeä
      Ikävä
      40
      536
    8. Ethän voinut nainen tietää, että rikot rikotun

      Omaa elämää taas mietin aamuyön tunteina. En vieläkään löytänyt muistin sokkeloista ainuttakaan onnen hetkeä. Kaipuu on
      Ikävä
      66
      496
    9. Ethän mies vielä

      luovu meistä? Haluaisin jo sun syliin.
      Ikävä
      30
      464
    10. Tulisitpa käymään joskus vielä

      Olisi niin kiva nähdä pitkästä aikaa. Oletko vielä joskus tulossa?... Niin monet muutoksen tuulet puhaltavat, olisi lohd
      Ikävä
      23
      449
    11. Haaveilen edelleen

      Sinusta aika ajoin
      Ikävä
      31
      441
    12. Lämpimiä katseita aikoinaan vaihdettiin, siihen se sitten jäi

      Sinulla uudet tuulet ja välttelet kohtaamistamme.
      Ikävä
      26
      440
    13. Yt:t kunnassa päättyi

      Oliko nämä tarpeelliset ja ratkeaako taloushuolet näiden avulla? Lehdessä ilmoitettujen lukujen perusteella lisää on tul
      Lappajärvi
      53
      427
    14. Hei rakkaani.

      Kohtaaminen lähestyy. Miten teemme sen? Kumpi ottaa yhteyttä vai törmäämmekö jossain sattumalta? Tuleva vaimosi
      Ikävä
      25
      425
    15. Sut.

      Tuhotaan. :)
      Tunteet
      37
      422
    16. Martsusta tuli leuhka

      Ja ylimielinen. Hän ei nosta persettäkään ilmaseksi . Luulempa et nämä ei tee hyvää hyvinvointivalmennuksille.... Nannal
      Kotimaiset julkkisjuorut
      159
      419
    17. Valtiomies puhuu?

      "Trump väitti jo aiemmin maanantaina Truth Socialissa, että hän itse riittää suojaamaan maailmaa tekoälyn vaaroilta. – 
      Maailman menoa
      77
      394
    18. Onko meillä mies

      Kakki hyvin?🤨
      Ikävä
      27
      390
    19. 19
      384
    20. Poromiehentien remontti ...

      Mikä tilanne? mistä mennään
      Hyrynsalmi
      6
      383
    Aihe