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.
sasm hyvä työkalu linux asm-editoriksi!
17
119
Vastaukset
- 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.pngHä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.pngOikeissa 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,000sSaattaa 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,000sEli 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,000sLaitetaanpas 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
Miehille kysymys
Onko näin, että jos miestä kiinnostaa tarpeeksi niin hän kyllä ottaa vaikka riskin pakeista ja osoittaa sen kiinnostukse1363895- 851915
Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap151781Haluaisin 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 jos541422Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi511363Ylen uutiset Haapaveden yt:stä.
Olipas kamalaa luettavaa kaupungin irtisanomisista. Työttömiä lisää 10 tai enempikin( Mieluskylän opettajat). Muuttavat1311327VENÄJÄ muuttanut tänään ydinasetroktiinia
Venäjän presidentti Vladimir Putin hyväksyi tiistaina päivitetyn ydinasedoktriinin, kertoo uutistoimisto Reuters. Sen mu981282- 701166
- 691043
Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1131022