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

144

    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. Sairaammaksi menee: Musk alkaa sensuroida Zelenskyin viestintää X:ssä

      IL: Musk puuttuu Zelenskyin viestintään – X:ään tulossa muutoksia "Elon Musk sanoo korjaavansa X:n, jotta käyttäjät voi
      Maailman menoa
      352
      3184
    2. Mihin sinussa haluan koskea

      Tilanne, että pääsisin tutustumaan eri kohtiin sinussa, mitä haluaisin kokeilla. Käsiin haluaisin tutustua, hieroa niitä
      Ikävä
      67
      2810
    3. Kerro nyt jotain

      Itsestäsi minkä haluaisit kaivattusi tietävän?
      Ikävä
      128
      1806
    4. On tämä meidän ikäero jo turhan suuri

      Kannattaisi tutustua samanikäisiin.
      Ikävä
      118
      1490
    5. Toisen ihmisen sydämellä

      leikkiminen on äärettömän moraalitonta. Antaa turhiaa toiveita ja sitten olla kuin mitään ei olisi tapahtunut. Kuinka vo
      Ikävä
      146
      1400
    6. Oho! Toivo Sukari paljastaa erikoisista iltatoimista Nadja-vaimon kanssa: "Hän aina putsaa mun..."

      Oho! Onpa iltatoimet tällä pariskunnalla. Toivo Sukari ja Nadja Sukari menivät naimisiin v. 2019. Lue lisää: https://
      Suomalaiset julkkikset
      30
      1323
    7. PAM:in mainos, älä mene tänään ruokakauppaan

      kannatan kovasti kaupan työntekijöille lisää liksa. MUTTA lakossa on huonoa, nyt kauppiaat näkevät kuinka vähällä henki
      Ammattiliitot
      155
      1268
    8. Mitä ajattelet kun

      Katsot kaivattuasi silmiin? Mitä näet silmissä?
      Ikävä
      69
      1100
    9. Millaisena luonteena

      Pidät kaivattuasi??
      Ikävä
      74
      1099
    10. Olen otettu, mutta turhaan kulta testailet

      Sinua minä vaan ❤️
      Ikävä
      70
      1040
    Aihe