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

125

    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. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      18
      5443
    2. MTV: Kirkossa saarnan pitänyt Jyrki 69 koki yllätyksen - Paljastaa: "Se mikä oli hyvin erikoista..."

      Jyrki Linnankivi alias Jyrki 69 on rokkari ja kirkonmies. Teologiaa opiskeleva Linnankivi piti elämänsä ensimmäisen saar
      Maailman menoa
      118
      2828
    3. Tykkään sinusta ikuisesti

      Olet niin mukava ja ihana ihminen rakas. ❤️
      Ikävä
      14
      2688
    4. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      602
      2074
    5. Kirjoita yhdellä sanalla

      Joku meihin liittyvä asia, mitä muut ei tiedä. Sen jälkeen laitan sulle wappiviestin
      Ikävä
      128
      1827
    6. Olet hyvin erilainen

      Herkempi, ajattelevaisempi. Toisaalta taas hyvin varma siitä mitä haluat. Et anna yhtään periksi. Osaat myös ilkeillä ja
      Ikävä
      70
      1372
    7. Yksi syy nainen miksi sinusta pidän

      on se, että tykkään luomusta. Olet luonnollinen, ihana ja kaunis. Ja luonne, no, en ole tavannut vielä sellaista, joka s
      Ikävä
      42
      1345
    8. Paljastavat kuvat Selviytyjät Suomi kulisseista - 1 päivä vs 36 päivää viidakossa - Katso tästä!

      Ohhoh! Yli kuukausi viidakossa voi muuttaa ulkonäköä perusarkeen aika rajusti. Kuka mielestäsi muuttui eniten: Mia Mill
      Suomalaiset julkkikset
      3
      1138
    9. Veda uskonto vs. muut uskonnot

      Mitenkähän tuo Veda(Krisha)uskonto loppujen lopuksi eroaa muista niin sanotuista ilmoitus uskonnoista? Siinäkin vedotaan
      Ateismi
      400
      1084
    10. Hyvää Joulua mies!

      Toivottavasti kaikki on hyvin siellä. Anteeksi että olen hieman lisännyt taakkaasi ymmärtämättä kunnolla tilannettasi, o
      Ikävä
      64
      1077
    Aihe