sasm hyvä työkalu linux asm-editoriksi!

Anonyymi

Mielenkiintoinen työkalu asm-koodin tuottamiseen linux-ympäristössä. Osaa 32/64 bittisen koodin ja tarjoaa mukavuusmakroja tulostukseen/näppäimistön lukuun molempia varten. Lisäksi em. makroja voi tehdä lisää eli sitä saa varsin joustavasti laajennettua. Debuggaus onnistuu ja ohjelmaa voi ajaa rivi riviltä/asettaa break-pointeja.
Koska kyseessä on editori(SimpleASM), tukee se useampaa asm-kääntäjää, kuten ainakin: NASM eli netwide-assembler, MASM, GAS ja FASM. Netwidea olen kokeillut ja todennut varsin toimivaksi. Helppo lisätä vaikkapa omia mnemonic:eja prosessorin dokumentoimattomille käskyille. Ohjekirjasta löytyy tietysti myös integrointi, miten saa tuotettua objekti-tiedoston, joka toimii gcc tai pascal ympäristössä sellaisenaan - noissahan on eroa riippuen kielestä. Kannattaa lukea myös sen korkeamman tason kielen manuaalista vähän asm-integroinnista, jotta pysyy kärryillä mitä manuaalissa itse asiassa kerrotaan.

17

119

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Kiitos vinkistä. Olisikin tarkoitus hieman opiskella aihetta.

    • Anonyymi

      Asensin, mutta eihän siitä mitään tullut.

      • Anonyymi

        Kokeilitko myös avata esimerkkiprojekteja /usr/share/sasm/Projects:n alta? Sieltä vaikkapa NASMhello.asm tai x64-versio jos 64-bittinen kone? Ei tarvitse kuin painaa play-nappulaa ja ohjelma kääntyy ja oikeasta laidasta löytyy lopputulos! Seuraavaksi haluat varmaankin ladata manuaalit nasm:lle ja tuo nyt kannattaa myös vilkaista:
        https://dman95.github.io/SASM/english.html
        Ei ole ihan joka iikan työkalu - toisaalta niille jotka tartvitsee vaikka optimointia tehdä varmasti vaivan arvoista opeteltavaa. Ja tarkoitan tässä nyt vaikka gcc-kääntäjän optimointia. Etuhan on se ettei tarvitse välttämättä käyttää gas-assembleria, jonka syntaksi on syvältä.


      • Anonyymi
        Anonyymi kirjoitti:

        Kokeilitko myös avata esimerkkiprojekteja /usr/share/sasm/Projects:n alta? Sieltä vaikkapa NASMhello.asm tai x64-versio jos 64-bittinen kone? Ei tarvitse kuin painaa play-nappulaa ja ohjelma kääntyy ja oikeasta laidasta löytyy lopputulos! Seuraavaksi haluat varmaankin ladata manuaalit nasm:lle ja tuo nyt kannattaa myös vilkaista:
        https://dman95.github.io/SASM/english.html
        Ei ole ihan joka iikan työkalu - toisaalta niille jotka tartvitsee vaikka optimointia tehdä varmasti vaivan arvoista opeteltavaa. Ja tarkoitan tässä nyt vaikka gcc-kääntäjän optimointia. Etuhan on se ettei tarvitse välttämättä käyttää gas-assembleria, jonka syntaksi on syvältä.

        Siitäkö ei itsenäisesti ajettavaa tiedostoa saa. Vähän iloa jos pitää editorin omassa pääte-emulaattorissa ajella.


      • Anonyymi
        Anonyymi kirjoitti:

        Siitäkö ei itsenäisesti ajettavaa tiedostoa saa. Vähän iloa jos pitää editorin omassa pääte-emulaattorissa ajella.

        Annapas kun vähän selittelen miksi tämä kiinnostaa juuri nyt.

        Eilen vielä kovasti haluttiin Python mollata hitaammaksi kuin C. Sehän ei tietenkään kokonaisuudessaan pidä paikkaansa. Ai, miksikö?

        Siksi että kun puhutaan perus Pyhonista sillä tarkoitetaan PythonC kielisiä sovelluksia, ja taas tämä PythonC on tuotettu C ja C koodilla.

        Sitten se supernopea Python, jolla tarkoitetaan PyPy tulkkia, joka tuottaa koodin JIT-kääntäjän tekemänä muistivaraisesti ja on yhtä alkukantaista kuin tämä NASM editorinkin käsittelemä.

        Olisin halunnut tehdä tuollaisen While silmukan ja verrata PyPy tulkin ja ASM koodin keskinäistä nopeutta. Enempää en häneen aio aikaani tuhlata, koska se on vääjäämättä historiaa.

        Silloin ennen vanhaan assemblerit tuotti COM tiedostoja joiden maksimikoko oli 64kt, ja nämä olivatkin sitten erittäin nopeita. mutta nopeus putosi kun haluttiin mennä yli tuon 64kt jolloin ohjelmista tuli EXE päätteisiä. Sekin kiinnostaa että mikä se on tämän päivän tilanne, ja nimenomaan Linux ympäristössä.


      • Anonyymi
        Anonyymi kirjoitti:

        Kokeilitko myös avata esimerkkiprojekteja /usr/share/sasm/Projects:n alta? Sieltä vaikkapa NASMhello.asm tai x64-versio jos 64-bittinen kone? Ei tarvitse kuin painaa play-nappulaa ja ohjelma kääntyy ja oikeasta laidasta löytyy lopputulos! Seuraavaksi haluat varmaankin ladata manuaalit nasm:lle ja tuo nyt kannattaa myös vilkaista:
        https://dman95.github.io/SASM/english.html
        Ei ole ihan joka iikan työkalu - toisaalta niille jotka tartvitsee vaikka optimointia tehdä varmasti vaivan arvoista opeteltavaa. Ja tarkoitan tässä nyt vaikka gcc-kääntäjän optimointia. Etuhan on se ettei tarvitse välttämättä käyttää gas-assembleria, jonka syntaksi on syvältä.

        Nykyään optimoidaan niin, että lasketaan GPU:lla kun pitää laskea paljon. Saa laskentatehoa kivasti lisättyä käyttämällä GPU:a missä enemmän laskentaytimiä tai lisäämällä GPU:jen määrää.

        En ihan heti keksi mihin optimointiin sasm kävisi.


      • Anonyymi
        Anonyymi kirjoitti:

        Nykyään optimoidaan niin, että lasketaan GPU:lla kun pitää laskea paljon. Saa laskentatehoa kivasti lisättyä käyttämällä GPU:a missä enemmän laskentaytimiä tai lisäämällä GPU:jen määrää.

        En ihan heti keksi mihin optimointiin sasm kävisi.

        Ajatteles nyt neljä miljardia kierrosta, pyörähtää 0,001 sekunnissa. Kyllä sillä jotain varmaan pystyy nopeuttamaan. En tosin ole varma, menikä tuo oikein, mutta jostakin luvin että ebx olisi 32 biitinen rekisteri. While silmukan vastinetta sillä tavoittelin, onko se sitä en osaa sanoa.

        https://s7.gifyu.com/images/speed-asm.png


      • Anonyymi
        Anonyymi kirjoitti:

        Ajatteles nyt neljä miljardia kierrosta, pyörähtää 0,001 sekunnissa. Kyllä sillä jotain varmaan pystyy nopeuttamaan. En tosin ole varma, menikä tuo oikein, mutta jostakin luvin että ebx olisi 32 biitinen rekisteri. While silmukan vastinetta sillä tavoittelin, onko se sitä en osaa sanoa.

        https://s7.gifyu.com/images/speed-asm.png

        Häirikkö polki parissa minuutissa tämän ketjun seuraavalle sivulle. Vaikuttaa ärsyyntyvän jos joku asiaa kirjoittelee väliin.


      • Anonyymi
        Anonyymi kirjoitti:

        Ajatteles nyt neljä miljardia kierrosta, pyörähtää 0,001 sekunnissa. Kyllä sillä jotain varmaan pystyy nopeuttamaan. En tosin ole varma, menikä tuo oikein, mutta jostakin luvin että ebx olisi 32 biitinen rekisteri. While silmukan vastinetta sillä tavoittelin, onko se sitä en osaa sanoa.

        https://s7.gifyu.com/images/speed-asm.png

        Oikeissa ohjelmissa ei pyöritetä silmukassa numeroa vaan on jotain dataa mitä käsitellään. Ohjelma joka nimenomaisesti laskee paljon ottaa sitä dataa sisään, laskee, ja tulostaa lopputuloksen. Lopputulos voi olla data jota on käsitelty.

        Sitten sitä laskentaa nopeutetaan niin, että se datamöhkäle laitetaan pieniksi paloiksi joita lasketaan rinnakkain kun siellä GPU:ssa on niitä pieniä laskentaytimiä.

        Sama temppu toimii tietysti CPU-laskennassa ja palaset jaetaan CPU-ytimille. Sitäkin käytetään jos dataa on hyvin vähän, koska GPU:lle siirto vie aikaa ja tuo latenssia.

        Latenssia tekee myös se säikeiden (tai prosessien) käynnistäminen, että aina ei kannata ajaa useammassa säikeissä, tai prosessissa.

        Ohjelmointikielellä on myös merkitystä. Esimerkiksi C:llä on tuo nimiavaruusongelma, että ohjelman palastelu moduuleihin tapahtuu ensisijaisesti jakamalla useammalla prosessiin (latenssia).

        Ja ajettaessa laskentaa rinnakkain on joutuu olemaan hyvin tarkka siitä, että koodissa ei ole niin sanottuja sivuvaikutuksia: https://en.wikipedia.org/wiki/Side_effect_(computer_science)

        Sivuvaikutukset rinnakkaisessa laskennassa nimittäin johtaa helposti bugeihin mitä on hyvin vaikea jäljittää.

        Laskennan palastelua sitten tehdään myös niin, että samaa asiaa laskee useampi tietokone samanaikaisesti kun on vaikka paljon dataa.


      • Anonyymi
        Anonyymi kirjoitti:

        Oikeissa ohjelmissa ei pyöritetä silmukassa numeroa vaan on jotain dataa mitä käsitellään. Ohjelma joka nimenomaisesti laskee paljon ottaa sitä dataa sisään, laskee, ja tulostaa lopputuloksen. Lopputulos voi olla data jota on käsitelty.

        Sitten sitä laskentaa nopeutetaan niin, että se datamöhkäle laitetaan pieniksi paloiksi joita lasketaan rinnakkain kun siellä GPU:ssa on niitä pieniä laskentaytimiä.

        Sama temppu toimii tietysti CPU-laskennassa ja palaset jaetaan CPU-ytimille. Sitäkin käytetään jos dataa on hyvin vähän, koska GPU:lle siirto vie aikaa ja tuo latenssia.

        Latenssia tekee myös se säikeiden (tai prosessien) käynnistäminen, että aina ei kannata ajaa useammassa säikeissä, tai prosessissa.

        Ohjelmointikielellä on myös merkitystä. Esimerkiksi C:llä on tuo nimiavaruusongelma, että ohjelman palastelu moduuleihin tapahtuu ensisijaisesti jakamalla useammalla prosessiin (latenssia).

        Ja ajettaessa laskentaa rinnakkain on joutuu olemaan hyvin tarkka siitä, että koodissa ei ole niin sanottuja sivuvaikutuksia: https://en.wikipedia.org/wiki/Side_effect_(computer_science)

        Sivuvaikutukset rinnakkaisessa laskennassa nimittäin johtaa helposti bugeihin mitä on hyvin vaikea jäljittää.

        Laskennan palastelua sitten tehdään myös niin, että samaa asiaa laskee useampi tietokone samanaikaisesti kun on vaikka paljon dataa.

        Epäilemättä, joo.

        Mutta pysytäänpä vielä hetki, ihan käytännön tasolla. Tuo sama neljä miljardia kierrosta tekevä While silmukka C kielellä käännettynä ilman minkäänlaista optimointia vie suoritus aikaa:

        Normaali kääntäminen
        gcc speed.c -o speed
        real 0m6,708s
        user 0m6,703s
        sys 0m0,000s

        Kun tuo sama koodi käännetään käyttäen optimointi valitsinta, suoritus nopeus kasvaa huimasti:

        Optimointi mukana käännettäessä:
        gcc -O speed.c -o speed
        real 0m1,093s
        user 0m1,092s
        sys 0m0,000s


      • Anonyymi
        Anonyymi kirjoitti:

        Epäilemättä, joo.

        Mutta pysytäänpä vielä hetki, ihan käytännön tasolla. Tuo sama neljä miljardia kierrosta tekevä While silmukka C kielellä käännettynä ilman minkäänlaista optimointia vie suoritus aikaa:

        Normaali kääntäminen
        gcc speed.c -o speed
        real 0m6,708s
        user 0m6,703s
        sys 0m0,000s

        Kun tuo sama koodi käännetään käyttäen optimointi valitsinta, suoritus nopeus kasvaa huimasti:

        Optimointi mukana käännettäessä:
        gcc -O speed.c -o speed
        real 0m1,093s
        user 0m1,092s
        sys 0m0,000s

        Saattaa tulla lisää vauhtia laittamalla vaikka -O3

        Enemmän kyllä kiinnostaa nopeus kun suoritetaan jotain käytännöllisempää.


      • Anonyymi
        Anonyymi kirjoitti:

        Saattaa tulla lisää vauhtia laittamalla vaikka -O3

        Enemmän kyllä kiinnostaa nopeus kun suoritetaan jotain käytännöllisempää.

        Näin on -O3 vie samoihin kuin tuo speed.asm koodin aika oli, eli

        gcc -O3 speed.c -o speed
        real 0m0,001s
        user 0m0,001s
        sys 0m0,000s


      • Anonyymi
        Anonyymi kirjoitti:

        Näin on -O3 vie samoihin kuin tuo speed.asm koodin aika oli, eli

        gcc -O3 speed.c -o speed
        real 0m0,001s
        user 0m0,001s
        sys 0m0,000s

        Eli speed.asm ei tuossa auttanut optimoimaan mitään.


      • Anonyymi
        Anonyymi kirjoitti:

        Näin on -O3 vie samoihin kuin tuo speed.asm koodin aika oli, eli

        gcc -O3 speed.c -o speed
        real 0m0,001s
        user 0m0,001s
        sys 0m0,000s

        Laitetaanpas tähän vielä tuo C kielinen koodi jota tässä on käsitelty, vaikka se löytyy tuolta aiemin jo julkaisemastani viestistäkin, on vain polettu niin kauaksi etsittäviin, toivottavasti ei nyt ropo poista tätä:

        #include <stdio.h>

        int main(void) {

        unsigned long i = 0;
        while ( i < 4000000000) { i = 1; };

        return(0);

        }


      • Anonyymi
        Anonyymi kirjoitti:

        Eli speed.asm ei tuossa auttanut optimoimaan mitään.

        Siltähän tuo näyttää, mutta toimiiko tuo optimointi, kun mennään rakentelemaan isompia juttuja, tosin ASM on pirun hankala ympäristö sellaiseen. Joko me hyllytetään koko ASM, taitaa olla historiaa. Kohta kuullaan NASM fanin mielipiteet tästä.


      • Anonyymi
        Anonyymi kirjoitti:

        Siltähän tuo näyttää, mutta toimiiko tuo optimointi, kun mennään rakentelemaan isompia juttuja, tosin ASM on pirun hankala ympäristö sellaiseen. Joko me hyllytetään koko ASM, taitaa olla historiaa. Kohta kuullaan NASM fanin mielipiteet tästä.

        Kääntäjät kun optimoi niin ne voivat analysoida koko lähdekoodin läpi ja hakea koko laajuudelta sitä parasta tapaa.

        Formaalin kielen kääntäminen osataan todella hyvin, että koneellisesti tehtyt optimoinnit on helposti parempia kuin mitä käsin nysväämällä saa.

        Se mikä haittaa eniten suorituskykyä on käytännössä sellainen koodi mikä näyttää ripulipaskalta. Selkeästä koodista ihminen voi helpommin valita tehokkaimman algoritmin ja kääntäjä osaa myös optimoida sitä hyvin. Yksi tapa parantaa suorituskykyä voikin helposti olla se ohjelmointikielen vaihto mikä pakottaa ohjelmoimaan siistimmin.

        Esimerkiksi Haskellilla saa usein helposti tehokkaampaa koodia kuin vaikka C:llä kun ohjelmointikieli pakottaa ohjelman toimimaan niin, että ohjelman tila ei muutu miten sattuu niin mahdollistaa mielenkiintoisia optimointeja missä kääntäjä vain vaihtaa pointteria kun voi olla varma missä tilassa rakenteet on. Säikeistyskin on erittäin helppoa tässä kun ohjelmointikielen keskeinen idea on estää sivuvaikutukset.

        Vastaavasti joku Java tai C# voi myös toimia tehokkaammin kuin C kun muistia ei tarvitse vapauttaa vaan ajoympäristö hoitaa sen automaattisesti silloin kun aikaa, ajamalla roskienkerääjää.

        Itsellä ei tule nyt mieleen missä ASM:ssa olisi hyötyä kun koodissa on niin paljon optimoitavaa ilman assembleriakin.

        Jos jossain sisäsilmukassa voisi saada käsin hinkkaamalla vauhtia kääntäjään nähden, silloinkin varmaan kannattaisi kirjoittaa softa mikä hakee nopeimman sen nopeimman käsky-yhdistelmän jollain hakualgoritmilla.


    • Anonyymi

      Tietokone ei ole pelkästään CPU.

      ASM:sta on hyötyä jos pitää tehdä esim. grafiikkakiihdyttimelle ohjelmia, kontrolloida DMA:n muistisiirtoja laitteiden välillä manuaalisesti, suora fyysisen muistin käsittely jossain laitteessa.

      Lisälaitteet kuten lisäkortit eivät yleensä pysty ajamaan omia RISC-koodejaan keskusmuistissa, vaan niillä on oma muistinsa niiden ohjelmakoodia varten, joka on siirrettävä DMA-siirron avulla esim... juurikin grafiikkakiihdyttimen omaan muistiinsa ajettavaksi keskusmuistista johon on itse ensin tallentanut sen.

      Näin voimme "helposti " optimoida näytönohjaimen sekä myös keskusprosessorinkin omaa micro-koodia, jos tuntuu että prosessori on liian tehoton, niin teemmepä hieman paremman koodin sille itse.

      ELI: jos löytyy hyödyllisiä ominaisuuksia lisäkorteista niin miksi et käyttäisi niitäkin optimoidessasi omaa ohjelmaasi nopeuden suhteen?

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

    Luetuimmat keskustelut

    1. Miehille kysymys

      Onko näin, että jos miestä kiinnostaa tarpeeksi niin hän kyllä ottaa vaikka riskin pakeista ja osoittaa sen kiinnostukse
      Tunteet
      136
      3895
    2. Miksi kaivattusi on

      erityinen? ❤️‍🔥
      Ikävä
      85
      1915
    3. Olen tosi outo....

      Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap
      Ikävä
      15
      1781
    4. Haluaisin jo

      Myöntää nämä tunteet sinulle face to face. En uskalla vain nolata itseäni enää. Enkä pysty elämäänkin näiden kanssa jos
      Ikävä
      54
      1422
    5. Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta

      https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi
      Kotka
      51
      1363
    6. Ylen uutiset Haapaveden yt:stä.

      Olipas kamalaa luettavaa kaupungin irtisanomisista. Työttömiä lisää 10 tai enempikin( Mieluskylän opettajat). Muuttavat
      Haapavesi
      131
      1327
    7. VENÄJÄ muuttanut tänään ydinasetroktiinia

      Venäjän presidentti Vladimir Putin hyväksyi tiistaina päivitetyn ydinasedoktriinin, kertoo uutistoimisto Reuters. Sen mu
      Maailman menoa
      98
      1282
    8. Nainen olet valoni pimeässä

      valaiset tietäni tietämättäsi ❤️
      Ikävä
      70
      1166
    9. Mitä toivot

      Tulevilta päiviltä?
      Ikävä
      69
      1043
    10. Hommaatko kinkkua jouluksi?

      Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k
      Sinkut
      113
      1022
    Aihe