<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>mizzy.org: FizzBuzz &#12450;&#12475;&#12531;&#12502;&#12521;&#29256; for x86/Linux</title>
    <link>http://blog.mizzy.org/articles/2007/05/13/fizzbuzz-x86-assembler-for-linux</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>FizzBuzz &#12450;&#12475;&#12531;&#12502;&#12521;&#29256; for x86/Linux</title>
      <description>&lt;p&gt;&lt;a href="http://labs.cybozu.co.jp/blog/takesako/2007/05/fizzbuzz_x86.html"&gt;&#31481;&#36843;&#12373;&#12435;&lt;/a&gt;&#12289;&lt;a href="http://subtech.g.hatena.ne.jp/yappo/20070511/1178907299"&gt;Yappo &#12373;&#12435;&lt;/a&gt; &#12395;&#35302;&#30330;&#12373;&#12428;&#12390;&#12289;FizzBuzz &#12450;&#12475;&#12531;&#12502;&#12521;&#29256; for x86/Linux &#12434;&#12388;&#12367;&#12387;&#12390;&#12415;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;20&#24180;&#12411;&#12393;&#21069;&#12395; Z80 &#12391;&#12450;&#12475;&#12531;&#12502;&#12521;&#12434;&#12385;&#12423;&#12387;&#12392;&#12363;&#12376;&#12387;&#12383;&#31243;&#24230;&#12398;&#30693;&#35672;&#12375;&#12363;&#12394;&#12356;&#12398;&#12391;&#12289;&#12505;&#12473;&#12488;&#12395;&#12399;&#31243;&#36960;&#12356;&#12467;&#12540;&#12489;&#12384;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&#12384;&#12428;&#12363;&#12418;&#12387;&#12392;&#12356;&#12356;&#12467;&#12540;&#12489;&#12434;&#25945;&#12360;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;p&gt;&#26368;&#21021;&#31481;&#36843;&#12373;&#12435;&#12398;&#12467;&#12540;&#12489;&#12392;&#21516;&#12376;&#12424;&#12358;&#12395;&#26360;&#12369;&#12427;&#12363;&#12394;&#12289;&#12392;&#24605;&#12387;&#12383;&#12398;&#12391;&#12377;&#12364;&#12289;Windows &#12392;&#12385;&#12364;&#12387;&#12390;&#12289;&#30011;&#38754;&#12395;&#34920;&#31034;&#12377;&#12427;&#12384;&#12369;&#12391; EAX, EBX, ECX, EDX &#12524;&#12472;&#12473;&#12479;&#20351;&#12358;&#12398;&#12391;&#12289;&#31481;&#36843;&#12373;&#12435;&#12398;&#12424;&#12358;&#12395; BX &#12524;&#12472;&#12473;&#12479;&#12434;&#35211;&#24373;&#12426;&#24441;&#12395;&#12289;CX &#12524;&#12472;&#12473;&#12479;&#12434;&#12459;&#12454;&#12531;&#12479;&#12395;&#12289;&#12387;&#12390;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12379;&#12435;&#12391;&#12375;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;&#12414;&#12383;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#26360;&#12356;&#12383;&#12384;&#12369;&#12391;&#30130;&#12428;&#12383;&#12398;&#12391;&#12289;&#12467;&#12540;&#12489;&#12468;&#12523;&#12501;&#12395;&#12481;&#12515;&#12524;&#12531;&#12472;&#12377;&#12427;&#27671;&#21147;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;global  _start

_start:
        mov     si, 0

mawasu: 
        call    space
        inc     si
        mov     ax, si

        mov     di, 3
        xor     edx, edx
        div     di
        cmp     dx, 0
        je      pfizz

        mov     ax, si
        mov     di, 5
        xor     edx, edx
        div     di
        cmp     dx, 0
        je      pbuzz

        call    num
        cmp     si, 100
        jb      mawasu

pfizz:
        call    fizz

        mov     ax, si
        mov     di, 5
        xor     edx, edx
        div     di
        cmp     dx, 0
        je      pbuzz

        jmp     mawasu

pbuzz:
        call    buzz
        jmp     mawasu

num:
        mov     ax, si

        mov     di, 100
        cmp     ax, di
        jnge    num2

        jmp     end

num2:
        mov     di, 10
        cmp     ax, di
        jnge    num3

        xor     edx, edx
        div     di
        add     ax, 48
        call    print

num3:   
        mov     ax, si
        mov     di, 10
        xor     edx, edx
        div     di
        mov     al, dl
        add     al, 48
        call    print
        ret

fizz:
        mov     al, 0x46
        call    print
        mov     al, 0x69
        call    print
        mov     al, 0x7a
        call    print
        call    print
        ret

buzz:
        mov     al, 0x42
        call    print
        mov     al, 0x75
        call    print
        mov     al, 0x7a
        call    print
        call    print
        ret

space:
        mov     al, 0x20
        call    print
        ret

print:
        push    eax
        mov     eax, 4
        mov     ebx, 1
        mov     ecx, esp
        mov     edx, 1
        int     0x80
        pop     eax
        ret

end:    
        mov     al, 0x0a
        call    print

        mov     al, 1
        mov     bl, 0
        int     0x80
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;nasm &#12434;&#20351;&#12387;&#12390;&#12371;&#12435;&#12394;&#24863;&#12376;&#12391;&#21205;&#12363;&#12377;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ nasm -f elf fizzbuzz.asm
$ ld -s -o fizzbuzz fizzbuzz.o
$ ./fizzbuzz
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src="/files/fizzbuzz.jpg" alt="fizzbuzz.asm"/&gt;&lt;/p&gt;

&lt;p&gt;&#26360;&#12356;&#12390;&#12356;&#12390;&#12450;&#12475;&#12531;&#12502;&#12521;&#12398; TMTOWTDI &#12387;&#12407;&#12426;&#12399; Perl &#12398;&#27604;&#12376;&#12419;&#12394;&#12356;&#12392;&#24605;&#12387;&#12383;&#12290;&lt;/p&gt;</description>
      <pubDate>Sun, 13 May 2007 21:01:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:b3dd3ff5-a0b9-4046-a2b6-14f2fda8e247</guid>
      <author>Gosuke Miyashita</author>
      <link>http://blog.mizzy.org/articles/2007/05/13/fizzbuzz-x86-assembler-for-linux</link>
      <category>program</category>
      <category>linux</category>
      <trackback:ping>http://blog.mizzy.org/articles/trackback/511</trackback:ping>
    </item>
  </channel>
</rss>
