<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>parrot / Drkcore</title><link>http://blog.kzfmix.com/parrot</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Thu, 02 Apr 2009 20:49:22 +0919</lastBuildDate><item><title>parrotでGCD</title><link>http://blog.kzfmix.com/entry/1238672848</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1238590245"&gt;schemeでレジスタ計算機を書いた&lt;/a&gt;ら、次は&lt;a href="http://www.parrot.org/"&gt;parrotというレジスタ仮想機械&lt;/a&gt;、(そしてPerl6へみたいな。)&lt;/p&gt;

&lt;p&gt;さて、ダウンロードしてきたソースコードについてたexamples/pir/euclid.pirというのがユークリッドの互除法のサンプルなのでこれを使う。&lt;/p&gt;

&lt;p&gt;pirというのはParrot Assembly Language(pasm)よりも抽象度の高い言語らしい。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.sub 'example' :main
        $I1 = 96
        $I2 = 64
        print  "Algorithm E (Euclid's algorithm)\n"
e1:     $I4 = mod $I1, $I2
e2:     unless $I4 goto done
e3:     $I1 = $I2
        $I2 = $I4
        branch e1
done:   print "The greatest common denominator of 96 and 64 is "
        print  $I2
        print  ".\n"
.end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;pasmに変換&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;parrot --output=euclid.pasm euclid.pir 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで、アセンブリコードが吐き出されたので見てみる。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;example:
    set I0, 96
    set I1, 64
    print "Algorithm E (Euclid's algorithm)\n"
e1:
    mod I2, I0, I1
e2:
    unless I2, done
e3:
    set I0, I1
    set I1, I2
    branch e1
done:
    print "The greatest common denominator of 96 and 64 is "
    print I1
    print ".\n"
    end 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ふむふむ。&lt;/p&gt;
</description><pubDate>Thu, 02 Apr 2009 20:49:22 +0919</pubDate><category>perl</category><category>parrot</category></item></channel></rss>