Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Headache

tesmu [02.04.2007 18:30:52]

#

Elikkäs nyt on tullut aika kun alan väkertämään headacheen kääntäjää http://koodataan.aineissa.com/headache mutta ongelmaksi muodostui se että mistä löydän mitäkin assembly käskyä vastaavan hexakoodin?

Pekka Karjalainen [02.04.2007 19:44:01]

#

Olisiko täällä jotain auttavaista?

http://mirror.href.com/thestarman/asm/index.html

Olikohan tuo x86 oikea prossukanta? Kaipa se on, kun et muutakaan sanonut.

Heksakoodien sijasta voit tuottaa myös asm-sorsia, jotka jokin assembler sitten käsittelee loppuun.

tesmu [02.04.2007 19:57:28]

#

Juu asm-sorsa oli mielessäni, mutta tehdään nytten alusta loppuun :)

Kiitokset tuosta!

FooBat [02.04.2007 21:32:43]

#

Itse suosittelen, että teet ensin version, joka tulostaa asm-sorsia. Näitä on paljon helpompi debugata ja koodin toimivuuden voi tarkistaa jonkin toimivan assemblerin avulla. Kun olet todennut, että kääntäjä tältä osin toimii kunnolla, voit tehdä myös viimeisen vaiheen itse. Kannattaa varmaan tehdä se niin, että se ohjelma tulostaa sen asm-sorsan johonkin sisäiseen rakenteeseen aina, vaikka sitä ei haluttaisikaan näkyviin ja sitten syöttää sen toiselle ohjelmamoduulille, joka tekee lopullisen muutoksen. Näin jos sitten joskus tulet tehneeksi jonkun toisen kielen, niin ei tarvitse sitten uudestaan pähkäillä niiden heksanumeroiden kanssa ja kirjoittaa sitä assembleria toistamiseen, kun se on kerran jo kirjoitettu.

Itse asiassa eräällä kääntäjäkurssilla tämä idea vietiin asetetta korkeammalle ja ohjelmakoodi käännettiin ensin hyvin yksinkertaiselle välikielelle. Kaikki optimointi tehtiin vasta tälle välikielellä ja tästä sitten muodostettiin lopulta asm-koodia. Idea tässä on, että tällöin kääntäjien kirjoittaminen on nopeampaa, kun ei tarvitse tehdä kuin koodi->välikieli muunnos ja kaikki optimointi ja välikielen kääntäminen on jo valmiina.

Joissakin kielissä tämä viedään vielä astetta korkeammalle ja koodi käännetään jonkin muun paremmin tuetun kielen lähdekoodiksi (esim. C) ja sitten käytetään sen toisen kielen kääntäjää. Muistaakseni esim. GHC haskell-kääntäjä teki näin.

Pekka Karjalainen [02.04.2007 22:46:25]

#

GHC tekee yhdessä vaiheessa C-kieltä (jos optimoidaan) ja syöttää sen gcc:lle, mutta tuotettua asmia jatkokäsitellään vielä. Tämän tekee muuten Perl-skripti nimeltä Evil Mangler. Sen nimi on ghc-asm virallisesti.

Suuri osa GHC:stä on tehty Haskell-kielellä itsellään kuitenkin. Onhan se silti hupaista, että gcc.exe ja perl.exe tulevat mukana :-)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta