<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>プログラミング言語</title><link>http://blogs.wankuma.com/nagase/category/1114.aspx</link><description>プログラミング言語について</description><managingEditor>ながせ</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>ながせ</dc:creator><title>正弦関数を実装してみる試み。</title><link>http://blogs.wankuma.com/nagase/archive/2008/07/25/150417.aspx</link><pubDate>Fri, 25 Jul 2008 20:29:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/07/25/150417.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/150417.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/07/25/150417.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/150417.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/150417.aspx</trackback:ping><description>正弦関数を実装してみるテストのエントリ３つほど、作成しました。こちら。&lt;p&gt;
&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/udongein/20080724/1216902428"&gt;正弦関数 sin(x)をプログラムで実装するにあ？&lt;/a&gt;&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/udongein/20080725/1216954367"&gt;正弦関数 sin(x)をプログラムで実装するにあ？（２）&lt;/a&gt;&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/udongein/20080725/1216967329"&gt;正弦関数 sin(x)をプログラムで実装するにあ？（３）&lt;/a&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/150417.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>インラインアセンブラ使ってみようぜ　CPUID</title><link>http://blogs.wankuma.com/nagase/archive/2008/03/27/130020.aspx</link><pubDate>Thu, 27 Mar 2008 15:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/03/27/130020.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/130020.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/03/27/130020.aspx#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/130020.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/130020.aspx</trackback:ping><description>&lt;P&gt;CPUID命令を使って、CPUの情報をプログラムで探ってみましょう。&lt;/P&gt;
&lt;P&gt;もちろん、アセンブラ命令はCPUIDを使います。ちなみにここで扱うのはIntelCPUです。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;CPUIDって命令がたくさん使える上に、動作の種類が大量にあるので、ファンクション０（ベンダー文字列の取得）と、ファンクション１（CPU情報の取得）をやってみます。&lt;/P&gt;
&lt;P&gt;CPUIDは、EAXに命令を入れて、cpuidを実行することで、eax, ebx, ecx, edxレジスタにそれぞれ情報が返ってきます。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;まず、ファンクション０。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;mov eax, 0&lt;/P&gt;
&lt;P&gt;cpuid&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;上記の命令を実行すると、ASCII文字列で、GenuireIntelという文字が返ってきます。（ソース参照）&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;次にファンクション１です。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;mov eax, 1&lt;/P&gt;
&lt;P&gt;cpuid&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;この命令を実行することで、EAXにプロセッサシグネチャ、EBXにファンクションフラグ、ECXにFeatureFlag2, EDXにFeatureFlag1が返ってきます。&lt;/P&gt;
&lt;P&gt;プロセッサシグネチャの内部構成は次の通りです。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;プロセッサシグネチャ&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Bit 0～3: Stepping ID &lt;/P&gt;
&lt;P&gt;Bit 4～7: Model Number&lt;/P&gt;
&lt;P&gt;Bit 8～11: Family Code &lt;/P&gt;
&lt;P&gt;Bit 12～13: Processor Type&lt;/P&gt;
&lt;P&gt;Bit 14～15: Reserved&lt;/P&gt;
&lt;P&gt;Bit 16～19: Extended Model &lt;/P&gt;
&lt;P&gt;Bit 20～27: Extended Family &lt;/P&gt;
&lt;P&gt;Bit 28～31: Reserved&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;このうち、Model NumderとFamily Codeの組み合わせでCPUを判断することができます。&lt;/P&gt;
&lt;P&gt;（厳密にはProcessor TypeでOverdriveがあったり、Extended Modelでさらに分岐があったりしますが）&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;ファンクションフラグは、&lt;A href="http://www.wdic.org/w/SCI/CPUID%20(%E5%91%BD%E4%BB%A4)"&gt;通信用語の基礎知識&lt;/A&gt;を見ると以下の通りのようです。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Bit 31～24: APIC ID &lt;/P&gt;
&lt;P&gt;Bit 23～16: 論理CPU数 &lt;/P&gt;
&lt;P&gt;Bit 15～8: CLFLUSH &lt;/P&gt;
&lt;P&gt;Bit 7～0: ブランドID &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Feature Flag1および2については、CPUにSSEやHTTなどの機能が存在するかかどうかをCPUのフラグで判別できます。&lt;/P&gt;
&lt;P&gt;ここでは長くなるので、割愛さしてもらいますが・・・。&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;詳しくは、こちらから。&lt;A href="http://download.intel.com/design/processor/applnots/24161832.pdf" htef="http://download.intel.com/design/processor/applnots/24161832.pdf"&gt;http://download.intel.com/design/processor/applnots/24161832.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ということで、ここではプロセッサシグネチャについて、実際にプログラムで確認してみます。&lt;/P&gt;
&lt;P&gt;コンパイラーはVisual C++ 9.0 Express Editionです。&lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;&lt;FONT color=#008080&gt;001 &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#include&lt;/FONT&gt; &lt;FONT color=#000000&gt;"stdafx.h"&lt;/FONT&gt;
&lt;FONT color=#008080&gt;002 &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#include&lt;/FONT&gt; &amp;lt;&lt;FONT color=#000000&gt;iostream&lt;/FONT&gt;&amp;gt;
&lt;FONT color=#008080&gt;003 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;004 &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;_tmain&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;argc&lt;/FONT&gt;, &lt;FONT color=#000000&gt;_TCHAR&lt;/FONT&gt;* &lt;FONT color=#000000&gt;argv&lt;/FONT&gt;[])
&lt;FONT color=#008080&gt;005 &lt;/FONT&gt;{
&lt;FONT color=#008080&gt;006 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;typedef&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;unsigned&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;DWORD&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;007 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;008 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;struct&lt;/FONT&gt; &lt;FONT color=#000000&gt;_cpumatrix&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;009 &lt;/FONT&gt;        &lt;FONT color=#0000ff&gt;unsigned&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;char&lt;/FONT&gt; &lt;FONT color=#000000&gt;cpu_code&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;010 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;string&lt;/FONT&gt; &lt;FONT color=#000000&gt;desc&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;011 &lt;/FONT&gt;    } &lt;FONT color=#000000&gt;cpumatrix&lt;/FONT&gt;[] = 
&lt;FONT color=#008080&gt;012 &lt;/FONT&gt;    { 
&lt;FONT color=#008080&gt;013 &lt;/FONT&gt;        &lt;FONT color=#008000&gt;// CPUのマトリックステーブル。左側にFamilyCode, ModelNumberと右側にCPUの文字列を対応づけます。&lt;/FONT&gt;
&lt;FONT color=#008080&gt;014 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x40&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel486 DX processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;015 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x41&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel486 DX processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;016 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x43&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"IntelDX2 processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;017 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x44&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel486 SL processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;018 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x45&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"IntelSX2 processors"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;019 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x47&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Write-Back Enhanced IntelDX2 processors"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;020 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x48&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"IntelDX4 processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;021 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x51&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium processors(60,66)"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;022 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x52&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium Processors(75,90,100,120,133,150,166,200)"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;023 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x54&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium processor with MMX technology(166,200)"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;024 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x61&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium Pro processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;025 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x63&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium II processor, model03"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;026 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x65&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium II processor, model05, PentiumII Xeon processor, Intel Celeron processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;027 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x66&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Celeron processor, model06"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;028 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x67&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium III processor, model07, and Pentium III Xeon processor, model07"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;029 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x68&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium III processor, model 08,Pentium III Xeon processor, model 08,and Celeron processor, model 08"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;030 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x69&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel Pentium M processor, Intel Celeron M processor model 09"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;031 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x6A&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium III Xeon processor, model0Ah"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;032 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x6B&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium III processor, model 0Bh"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;033 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x6D&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel Pentium M processor,90 nm process."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;034 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x6E&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel Core Duo processor, 65 nm process."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;035 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x6F&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Intel Core2 Duo processor, 65 nm process."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;036 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF0&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 processor."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;037 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF1&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 Processor 0.18um process."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;038 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF2&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 Processor 0.13um process."&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;039 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF3&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 Processor, Celeron D Processor"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;040 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF4&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 Processor, Pentium D Processor 90nm process"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;041 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0xF6&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"Pentium 4 Processor, Pentium D Processor 65nm process"&lt;/FONT&gt;},
&lt;FONT color=#008080&gt;042 &lt;/FONT&gt;        { &lt;FONT color=#000000&gt;0x00&lt;/FONT&gt;, &lt;FONT color=#000000&gt;"unknown processor"&lt;/FONT&gt;}
&lt;FONT color=#008080&gt;043 &lt;/FONT&gt;    };
&lt;FONT color=#008080&gt;044 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;045 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;046 &lt;/FONT&gt;    &lt;FONT color=#008000&gt;// ベンダーIDのチェック&lt;/FONT&gt;
&lt;FONT color=#008080&gt;047 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;char&lt;/FONT&gt; &lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt;[&lt;FONT color=#000000&gt;13&lt;/FONT&gt;];
&lt;FONT color=#008080&gt;048 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;049 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;eax&lt;/FONT&gt;, &lt;FONT color=#000000&gt;0&lt;/FONT&gt;;                                &lt;FONT color=#008000&gt;/* EAXに0を入れる */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;050 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;cpuid&lt;/FONT&gt;;                                    &lt;FONT color=#008000&gt;/* CPUID実行 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;051 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt; + &lt;FONT color=#000000&gt;0&lt;/FONT&gt;], &lt;FONT color=#000000&gt;ebx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* 最初の4文字 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;052 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt; + &lt;FONT color=#000000&gt;4&lt;/FONT&gt;], &lt;FONT color=#000000&gt;edx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* 次の4文字 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;053 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt; + &lt;FONT color=#000000&gt;8&lt;/FONT&gt;], &lt;FONT color=#000000&gt;ecx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* 最後の4文字 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;054 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;byte&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt; + &lt;FONT color=#000000&gt;12&lt;/FONT&gt;], &lt;FONT color=#000000&gt;0&lt;/FONT&gt;;        &lt;FONT color=#008000&gt;/* ラストに \0 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;055 &lt;/FONT&gt;    }
&lt;FONT color=#008080&gt;056 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;057 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"Vender String = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;vender_sig&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;058 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;059 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;060 &lt;/FONT&gt;    &lt;FONT color=#008000&gt;// プロセッサシグネチャ, ファクションフラグ、Featureフラグのチェック&lt;/FONT&gt;
&lt;FONT color=#008080&gt;061 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;DWORD&lt;/FONT&gt; &lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt;, &lt;FONT color=#000000&gt;function_flag&lt;/FONT&gt;, &lt;FONT color=#000000&gt;feature_flag2&lt;/FONT&gt;, &lt;FONT color=#000000&gt;feature_flag1&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;062 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;063 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;eax&lt;/FONT&gt;, &lt;FONT color=#000000&gt;1&lt;/FONT&gt;;                        &lt;FONT color=#008000&gt;/* EAXに1を入れる */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;064 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;cpuid&lt;/FONT&gt;;                            &lt;FONT color=#008000&gt;/* CPUID実行 */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;065 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt;], &lt;FONT color=#000000&gt;eax&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* プロセッサシグネチャ */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;066 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;function_flag&lt;/FONT&gt;], &lt;FONT color=#000000&gt;ebx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* ファンクションフラグ */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;067 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;feature_flag2&lt;/FONT&gt;], &lt;FONT color=#000000&gt;ecx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* Featureフラグ */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;068 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;dword&lt;/FONT&gt; &lt;FONT color=#000000&gt;ptr&lt;/FONT&gt; [&lt;FONT color=#000000&gt;feature_flag1&lt;/FONT&gt;], &lt;FONT color=#000000&gt;edx&lt;/FONT&gt;;    &lt;FONT color=#008000&gt;/* Featureフラグ */&lt;/FONT&gt;
&lt;FONT color=#008080&gt;069 &lt;/FONT&gt;    }
&lt;FONT color=#008080&gt;070 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;071 &lt;/FONT&gt;    &lt;FONT color=#008000&gt;// ステッピングID, モデルナンバー, ファミリーコード, プロセッサタイプ&lt;/FONT&gt;
&lt;FONT color=#008080&gt;072 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;DWORD&lt;/FONT&gt; &lt;FONT color=#000000&gt;SteppingID&lt;/FONT&gt;, &lt;FONT color=#000000&gt;ModelNumder&lt;/FONT&gt;, &lt;FONT color=#000000&gt;FamilyCode&lt;/FONT&gt;, &lt;FONT color=#000000&gt;ProcessorType&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;073 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;SteppingID&lt;/FONT&gt; =   &lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt; &amp;amp; &lt;FONT color=#000000&gt;0x0000000F&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;074 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;ModelNumder&lt;/FONT&gt; =   ( &lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt; &amp;amp; &lt;FONT color=#000000&gt;0x000000F0&lt;/FONT&gt; ) &amp;gt;&amp;gt; &lt;FONT color=#000000&gt;4&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;075 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;FamilyCode&lt;/FONT&gt; =    ( &lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt;  &amp;amp; &lt;FONT color=#000000&gt;0x00000F00&lt;/FONT&gt; ) &amp;gt;&amp;gt; &lt;FONT color=#000000&gt;8&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;076 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;ProcessorType&lt;/FONT&gt; = ( &lt;FONT color=#000000&gt;prosessor_sig&lt;/FONT&gt; &amp;amp; &lt;FONT color=#000000&gt;0x000003000&lt;/FONT&gt; ) &amp;gt;&amp;gt; &lt;FONT color=#000000&gt;12&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;077 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;078 &lt;/FONT&gt;    &lt;FONT color=#008000&gt;// マトリックステーブルから一致する文字列を探します。&lt;/FONT&gt;
&lt;FONT color=#008080&gt;079 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;string&lt;/FONT&gt; &lt;FONT color=#000000&gt;cpustring&lt;/FONT&gt; = &lt;FONT color=#000000&gt;"unknown processor"&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;080 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;for&lt;/FONT&gt; ( &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;i&lt;/FONT&gt; = &lt;FONT color=#000000&gt;0&lt;/FONT&gt; ; ( &lt;FONT color=#000000&gt;cpumatrix&lt;/FONT&gt;[&lt;FONT color=#000000&gt;i&lt;/FONT&gt;].&lt;FONT color=#000000&gt;cpu_code&lt;/FONT&gt; != &lt;FONT color=#000000&gt;0x00&lt;/FONT&gt; ) ; &lt;FONT color=#000000&gt;i&lt;/FONT&gt;++ ) {
&lt;FONT color=#008080&gt;081 &lt;/FONT&gt;        &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; ( ( &lt;FONT color=#000000&gt;FamilyCode&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;4&lt;/FONT&gt; ) + &lt;FONT color=#000000&gt;ModelNumder&lt;/FONT&gt; == &lt;FONT color=#000000&gt;cpumatrix&lt;/FONT&gt;[&lt;FONT color=#000000&gt;i&lt;/FONT&gt;].&lt;FONT color=#000000&gt;cpu_code&lt;/FONT&gt; ) {
&lt;FONT color=#008080&gt;082 &lt;/FONT&gt;            &lt;FONT color=#000000&gt;cpustring&lt;/FONT&gt; = &lt;FONT color=#000000&gt;cpumatrix&lt;/FONT&gt;[&lt;FONT color=#000000&gt;i&lt;/FONT&gt;].&lt;FONT color=#000000&gt;desc&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;083 &lt;/FONT&gt;        }
&lt;FONT color=#008080&gt;084 &lt;/FONT&gt;    }
&lt;FONT color=#008080&gt;085 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;086 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"ProcessorType = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;ProcessorType&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;087 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"SteppingID = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;SteppingID&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;088 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"ModelNumder = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;ModelNumder&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;089 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"FamilyCode = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;FamilyCode&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;090 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"Processor Desciption = ["&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;cpustring&lt;/FONT&gt;.&lt;FONT color=#000000&gt;c_str&lt;/FONT&gt;() &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"]"&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;091 &lt;/FONT&gt;
&lt;FONT color=#008080&gt;092 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#000000&gt;0&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;093 &lt;/FONT&gt;}
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;このコードを実行すると、&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Vender String = GenuineIntel&lt;/P&gt;
&lt;P&gt;ProcessorType = 0&lt;/P&gt;
&lt;P&gt;SteppingID = 7&lt;/P&gt;
&lt;P&gt;ModelNumder = 4&lt;/P&gt;
&lt;P&gt;FamilyCode = 15&lt;/P&gt;
&lt;P&gt;Processor Desciption = [Pentium 4 Processor, Pentium D Processor 90um process.]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;のように、CPUの情報が出力されることを確認することができます。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/130020.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>インラインアセンブラ使ってみようぜ 書き方編</title><link>http://blogs.wankuma.com/nagase/archive/2008/03/25/129555.aspx</link><pubDate>Tue, 25 Mar 2008 18:18:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/03/25/129555.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/129555.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/03/25/129555.aspx#Feedback</comments><slash:comments>280</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/129555.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/129555.aspx</trackback:ping><description>&lt;P&gt;アセンブラ言語は、コンピュータの命令を直接（と言っても機械語でもありませんが、ほぼ１対１で対応するってことで）記述する言語です。&lt;/P&gt;
&lt;P&gt;ですが、この言語を使ってプログラミングを行うと、メモリの値を直接のデータアドレスで指定しないといけません。&lt;/P&gt;
&lt;P&gt;もともとアセンブラには変数っていう概念はないのでアドレスを計算してあげなければいけないんですけど。&lt;/P&gt;
&lt;P&gt;そこで、Visual C++のインラインアセンブラを使うと、C++コードの途中にアセンブラ言語を混ぜることができます。&lt;/P&gt;
&lt;P&gt;こうすることで、必要最低限の作業量でMMXやSSEなど、通常のコンパイラが吐いてくれないアセンブラ命令を使うことができたり、CPUIDなどの特殊命令も実行することができます。&lt;/P&gt;
&lt;P&gt;インラインアセンブラは次のような記述で使えます。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008080&gt;001 &lt;/FONT&gt;&lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;002 &lt;/FONT&gt;    // &lt;FONT color=#000000&gt;インラインアセンブラコードをここに記述&lt;/FONT&gt;
&lt;FONT color=#008080&gt;003 &lt;/FONT&gt;}
&lt;FONT color=#008080&gt;004 &lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;PRE&gt;こんな感じ。&lt;/PRE&gt;
&lt;P&gt;まずは、C++で変数を定義して、そこにアセンブラでデータを突っ込んでみましょう。&lt;/P&gt;
&lt;P&gt;データのロードにはmov命令を使います。たぶんアセンブラで最も使う命令と思われます。 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008080&gt;001 &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#include&lt;/FONT&gt; &amp;lt;&lt;FONT color=#000000&gt;iostream&lt;/FONT&gt;&amp;gt;
&lt;FONT color=#008080&gt;002 &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; &lt;FONT color=#000000&gt;main&lt;/FONT&gt;()
&lt;FONT color=#008080&gt;003 &lt;/FONT&gt;{
&lt;FONT color=#008080&gt;004 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;005 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;006 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;, &lt;FONT color=#000000&gt;256&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;007 &lt;/FONT&gt;    }
&lt;FONT color=#008080&gt;008 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"a = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;    // &lt;FONT color=#000000&gt;a&lt;/FONT&gt; = &lt;FONT color=#000000&gt;256&lt;/FONT&gt; &lt;FONT color=#000000&gt;と出力される&lt;/FONT&gt;
&lt;FONT color=#008080&gt;009 &lt;/FONT&gt;}
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;MOV命令は &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;mov dest, src&lt;/P&gt;
&lt;P&gt;dest レジスタ,メモリ &lt;/P&gt;
&lt;P&gt;src レジスタ,メモリ,即値 &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;となっています。ですので、 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008080&gt;001 &lt;/FONT&gt;{
&lt;FONT color=#008080&gt;002 &lt;/FONT&gt;    &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;,&lt;FONT color=#000000&gt;b&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;003 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;b&lt;/FONT&gt; = &lt;FONT color=#000000&gt;256&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;004 &lt;/FONT&gt;    &lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {
&lt;FONT color=#008080&gt;005 &lt;/FONT&gt;        &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;, &lt;FONT color=#000000&gt;b&lt;/FONT&gt;;
&lt;FONT color=#008080&gt;006 &lt;/FONT&gt;    }
&lt;FONT color=#008080&gt;007 &lt;/FONT&gt;}
&lt;FONT color=#008080&gt;008 &lt;/FONT&gt;
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;というのは動きません。&lt;/P&gt;
&lt;P&gt;次に、足し算命令を使ってみましょう。&lt;/P&gt;
&lt;P&gt;足し算命令はaddを使います。 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;add dest, src &lt;/P&gt;
&lt;P&gt;flag OF, SF, ZF, AF, CF, PF &lt;/P&gt;
&lt;P&gt;dest レジスタ,メモリ &lt;/P&gt;
&lt;P&gt;src レジスタ,メモリ,即値 &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;これをインラインアセンブラで記述してみます。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#008080&gt;001&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;#include&lt;/FONT&gt; &amp;lt;&lt;FONT color=#000000&gt;iostream&lt;/FONT&gt;&amp;gt;&lt;BR&gt;&lt;FONT color=#008080&gt;002&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; &lt;FONT color=#000000&gt;main&lt;/FONT&gt;()&lt;BR&gt;&lt;FONT color=#008080&gt;003&lt;/FONT&gt;{&lt;BR&gt;&lt;FONT color=#008080&gt;004&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;;&lt;BR&gt;&lt;FONT color=#008080&gt;005&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;__asm&lt;/FONT&gt; {&lt;BR&gt;&lt;FONT color=#008080&gt;006&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;mov&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;, &lt;FONT color=#000000&gt;256&lt;/FONT&gt;;&lt;BR&gt;&lt;FONT color=#008080&gt;007&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;add&lt;/FONT&gt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt;, &lt;FONT color=#000000&gt;128&lt;/FONT&gt;;&lt;BR&gt;&lt;FONT color=#008080&gt;008&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#008080&gt;009&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;cout&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;"a = "&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;a&lt;/FONT&gt; &amp;lt;&amp;lt; &lt;FONT color=#000000&gt;std&lt;/FONT&gt;::&lt;FONT color=#000000&gt;endl&lt;/FONT&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;FONT color=#000000&gt;a&lt;/FONT&gt; = &lt;FONT color=#000000&gt;384&lt;/FONT&gt; &lt;FONT color=#000000&gt;と出力される&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;010&lt;/FONT&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;このときに、MOV命令と違って演算を行うとフラグが立ちます。これは、算術演算を行った時の結果に対して出てくるものです。&lt;/P&gt;
&lt;P&gt;CF（キャリーフラグ）&lt;/P&gt;
&lt;P&gt;算術命令を行った際に、最上位ビットが繰り上げもしくは繰り下げを行ったときにセットされます。&lt;/P&gt;
&lt;P&gt;PF（パリティーフラグ）&lt;/P&gt;
&lt;P&gt;演算結果のパリティビット。二進数で１の数が偶数のときに１になる。使ったことがないｗ&lt;/P&gt;
&lt;P&gt;AF（補助フラグ）&lt;/P&gt;
&lt;P&gt;あまり使わない&amp;#8230;かも。調べて分かったら書く。&lt;/P&gt;
&lt;P&gt;ZF（ゼロフラグ）&lt;/P&gt;
&lt;P&gt;演算結果が0になった場合に１になる。とても使う。&lt;/P&gt;
&lt;P&gt;SF（サインフラグ）&lt;/P&gt;
&lt;P&gt;演算結果がマイナスになったときに１になる。signedコードなので基本的には最上位ビットと同じ。&lt;/P&gt;
&lt;P&gt;OF（オーバーフローフラグ）&lt;/P&gt;
&lt;P&gt;&lt;STRIKE&gt;ビットが越えたときに１になる。たとえば、&lt;/STRIKE&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRIKE&gt;mov AX, 65530;&lt;BR&gt;add AX, 100;&lt;/STRIKE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRIKE&gt;とすると、AXレジスタは16ビットなのでオーバーフローとなり、ビットが立ちます。&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;符号付き演算で、符号が変化したときに１になります。&lt;/P&gt;
&lt;P&gt;この値をチェックすることもあります。たとえば、INT 21Hなんかは異常時にCFが1になってくるので、関数の戻り値みたいに使う人もいたり。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;といことで、次回はCPUID命令で。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/129555.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>nagase</dc:creator><title>フツーにやってみたAnimal問題</title><link>http://blogs.wankuma.com/nagase/archive/2007/11/09/107195.aspx</link><pubDate>Fri, 09 Nov 2007 11:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/11/09/107195.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/107195.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/11/09/107195.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/107195.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/107195.aspx</trackback:ping><description>&lt;P&gt;ネタ元：&lt;A href="http://blogs.wankuma.com/episteme/archive/2007/11/08/106927.aspx"&gt;オブジェクト指向におけるFizzBuzz問題&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;# チラ裏と同一です。ごめんなさいEclipseのJava2Htmlを使ってみたかったテストです。スミマセン。&lt;/P&gt;
&lt;P&gt;ってことでSoundインタフェースを別にしてみました。鳴かない動物はない、とのことでAnimalクラスにSoundableインタフェースをくっつけちゃいました。鳴かない動物をわける場合。 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;abstract class Animal&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;を親にもち、 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;abstract class SoundableAnimal extends Animal implements Soundable&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;っていうやつと &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;abstract class Disoundable Animal extends Animal&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;っていうのに分かれることになりますね。いろいろ問題点多いけれど、ここはひとつ多めにみてくださいまし。 &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;!-- ======================================================== --&gt;&lt;!-- = Java Sourcecode to HTML automatically converted code = --&gt;&lt;!-- =   Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard  markus@jave.de   = --&gt;&lt;!-- =     Further information: http://www.java2html.de     = --&gt;
&lt;DIV class=java align=left&gt;
&lt;TABLE cellSpacing=0 cellPadding=3 bgColor=#ffffff border=0 unselectable="on"&gt;
&lt;TBODY&gt;
&lt;TR&gt;&lt;!-- start source code --&gt;
&lt;TD vAlign=top noWrap align=left&gt;&lt;CODE&gt;&lt;BR&gt;&lt;FONT color=#3f7f5f&gt;import&amp;nbsp;java.io.*;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#3f7f5f&gt;import&amp;nbsp;java.lang.*;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#3f7f5f&gt;/*&amp;nbsp;鳴けるインタフェース&amp;nbsp;*/&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;interface&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Soundable&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;abstract&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;void&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Sound&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;abstract&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;void&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SetCount&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;int&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;n&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#3f7f5f&gt;/*&amp;nbsp;動物クラス&amp;nbsp;*/&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;abstract&amp;nbsp;class&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Animal&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;implements&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Soundable&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;int&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;sndCount&amp;nbsp;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;String&amp;nbsp;crystring;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Animal&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;sndCount&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#990000&gt;1&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;void&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SetCount&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;int&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;n&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;sndCount&amp;nbsp;=&amp;nbsp;n;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;void&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Sound&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;for&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;int&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;i&amp;nbsp;=&amp;nbsp;sndCount&amp;nbsp;;&amp;nbsp;i&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#990000&gt;0&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&amp;nbsp;--i&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.out.print&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#000000&gt;crystring&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.out.println&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;class&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Dog&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;extends&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Animal&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Dog&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;crystring&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2a00ff&gt;"わん"&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;class&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Cat&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;extends&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Animal&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Cat&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;crystring&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2a00ff&gt;"にゃー"&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;class&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Main&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;public&amp;nbsp;static&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;void&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;main&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#000000&gt;String&lt;/FONT&gt;&lt;FONT color=#000000&gt;[]&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;args&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&amp;nbsp;{&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Animal&amp;nbsp;animal;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;new&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Dog&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal.Sound&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal.SetCount&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#990000&gt;3&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal.Sound&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#7f0055&gt;&lt;B&gt;new&amp;nbsp;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Cat&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;animal.Sound&lt;/FONT&gt;&lt;FONT color=#000000&gt;()&lt;/FONT&gt;&lt;FONT color=#000000&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#ffffff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;/CODE&gt; &lt;/TD&gt;&lt;!-- end source code --&gt;&lt;/TR&gt;&lt;!-- start Java2Html link --&gt;
&lt;TR&gt;
&lt;TD align=right&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;!-- end Java2Html link --&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/107195.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>関数ポインタでC構造体に関数を入れよう</title><link>http://blogs.wankuma.com/nagase/archive/2007/10/25/104031.aspx</link><pubDate>Thu, 25 Oct 2007 10:32:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/10/25/104031.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/104031.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/10/25/104031.aspx#Feedback</comments><slash:comments>217</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/104031.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/104031.aspx</trackback:ping><description>&lt;P&gt;ネタ元：&lt;A href="http://blogs.wankuma.com/torikobito/archive/2007/10/25/104008.aspx"&gt;Visual Basic でなんとなくイベントとデリゲート　その４。 - デリゲートとは？ - &lt;/A&gt;&lt;BR&gt;チラ裏でも書いたので、関数ポインタ（だけ）について。&lt;/P&gt;
&lt;P&gt;変数にポインタがありますが、これと同様に関数にもポインタが使えます。&lt;BR&gt;関数にはアドレス定義されていますので、このアドレスをさすポインタを作ってやることで関数ポインタとして動作させることができます。&lt;BR&gt;ただし、関数は変数と違って、引数や戻り値というものが存在しますので、関数ポインタの宣言は定義先の関数ポインタを同じものを定義します。&lt;/P&gt;
&lt;P&gt;戻り値 (*ポインタ名)(引数);&lt;/P&gt;
&lt;P&gt;このようにすることで、classの定義がないC言語でもクラス（の、ようなもの）と同じような書き方ができます。&lt;/P&gt;
&lt;P&gt;あまりよろしくないですが、使用例。&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;#include "stdio.h"&lt;/P&gt;
&lt;P&gt;/* console構造体を定義 */&lt;BR&gt;typedef struct _console {&lt;BR&gt;int (*Write)(const char *, ...);/* Writeという関数ポインタを定義する */&lt;BR&gt;} console;&lt;/P&gt;
&lt;P&gt;console Console;/* グローバル変数領域 */&lt;/P&gt;
&lt;P&gt;int main(int argc, char* argv[])&lt;BR&gt;{&lt;BR&gt;int a,b,c;&amp;nbsp;&amp;nbsp; /* 整数を定義 */&lt;BR&gt;a = 2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 変数にテキトーに値を突っ込む */&lt;BR&gt;b = 3;&lt;BR&gt;c = a + b;&lt;/P&gt;
&lt;P&gt;Console.Write = printf;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Console構造体内部Writeポインタをprintfと同等にする */&lt;/P&gt;
&lt;P&gt;Console.Write("a= %d, b= %d, c = %d\n",a,b,c);/* printfと同様に使える */&lt;/P&gt;
&lt;P&gt;return 0;&lt;BR&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;実行結果&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;a = 2, b = 3, c = 5&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Console構造体に配置されているWrite関数ポインタを呼び出すと、内部的にprintfが呼ばれます。&lt;BR&gt;# 余談ですが、最初C++のclassというものがわけわからなかったときにこういう理解をしました^-^;&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/104031.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>メモリ番地</title><link>http://blogs.wankuma.com/nagase/archive/2007/10/15/102059.aspx</link><pubDate>Mon, 15 Oct 2007 13:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/10/15/102059.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/102059.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/10/15/102059.aspx#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/102059.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/102059.aspx</trackback:ping><description>&lt;P&gt;DSPのアセンブラのプログラミングをやっていると、どうも奇数番地にメモリが配置されていて気になります。&lt;BR&gt;基本的にマイコンと違って、16bitまたは、32bit「しか」扱えないので、x86のように&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&amp;nbsp;mov&amp;nbsp;ah,2&amp;nbsp;&amp;nbsp;# AXのHighレジスタに2を8ビットで代入&lt;BR&gt;&amp;nbsp;mov&amp;nbsp;ax,4c00h&amp;nbsp;# AXレジスタに4C00を16ビットで代入&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;みたいな柔軟性はありません。そんなわけですから、すべてのメモリ番地に32bitのDWORDデータが存在しているわけですが&amp;#8230;。&lt;BR&gt;x86の16bitレジスタもレジスタを上下分割するだけで、実際のメモリ番地としては16bitごとに配置されるわけで奇数には置かれないはずなんですよね。&lt;/P&gt;
&lt;P&gt;ところで、Javaのバイトコードなんていうのはどんなインタプリタなんでしょう？&lt;BR&gt;バイトコードっていうからには、8ビットのインタプリタコードのような気がするけれど。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/102059.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>初級アドミニストレータがなくなる</title><link>http://blogs.wankuma.com/nagase/archive/2007/09/08/94752.aspx</link><pubDate>Sat, 08 Sep 2007 11:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/09/08/94752.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/94752.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/09/08/94752.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/94752.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/94752.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.jitec.jp/1_00topic/topic_20070907_public_comment_(1).pdf"&gt;http://www.jitec.jp/1_00topic/topic_20070907_public_comment_(1).pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;斜め読みなので、詳しくはまだ見ていないのですが初級アドミニストレータがなくなって、レベル別になり、&lt;/P&gt;
&lt;P&gt;レベル１：エントリー試験&lt;/P&gt;
&lt;P&gt;レベル２：基本情報処理技術者試験&lt;/P&gt;
&lt;P&gt;レベル３：応用情報処理技術者試験&lt;/P&gt;
&lt;P&gt;レベル４：旧テクニカルエンジニア・アプリケーションエンジニア&lt;/P&gt;
&lt;P&gt;のような体系になるそうですね。情報セキュリティなんてものもなくなり、アドミニストレータ系はなくなる方向です。&lt;/P&gt;
&lt;P&gt;ところで、私は以下のようにかなり前の区分でしかもっていないんですが、&lt;/P&gt;
&lt;P&gt;(1)&amp;nbsp;第2種情報処理技術者 H9秋合格&lt;/P&gt;
&lt;P&gt;(2)第1種情報処理技術者試験 H10春合格&lt;/P&gt;
&lt;P&gt;(3)ネットワークスペシャリスト H11秋合格&lt;/P&gt;
&lt;P&gt;そろそろ、更新がてらレベル３くらい受けておかないとそろそろ化石と科しそうですなぁ。ベンダー系だと更新があるけれど、情報処理試験って更新不要だし。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/94752.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>型付けの強い言語</title><link>http://blogs.wankuma.com/nagase/archive/2007/09/02/93468.aspx</link><pubDate>Sun, 02 Sep 2007 22:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/09/02/93468.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/93468.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/09/02/93468.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/93468.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/93468.aspx</trackback:ping><description>&lt;P&gt;と、言えば私はVHDLだとおもふ。こいつは、物理的な配線配置をするために記述するためにものすごい制約があるんですよね。&lt;BR&gt;たとえば、&lt;/P&gt;
&lt;P&gt;C / VHDL&lt;BR&gt;char / std_logic_vector(7 downto 0)&lt;BR&gt;という関係になる。そういうもんだから、&lt;/P&gt;
&lt;P&gt;char + char は回路的には本来 std_logic_vector(8 downto 0)にならんといけまへん。&lt;BR&gt;# 8bit同士で足し算すると9bit相当の値を持つってこと。&lt;BR&gt;# CPU的な動作をする場合、8bit + 8bit = 8bitにするならキャリーフラグを立てるので9bit目をキャリーフラグTにするとか。&lt;/P&gt;
&lt;P&gt;するってーと、掛け算・割り算とかはどのようにしたら良いのだろう？&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/93468.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>スクリプト系は忘却するって</title><link>http://blogs.wankuma.com/nagase/archive/2007/08/31/93027.aspx</link><pubDate>Fri, 31 Aug 2007 21:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/08/31/93027.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/93027.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/08/31/93027.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/93027.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/93027.aspx</trackback:ping><description>&lt;P&gt;前回のコメントでちょっと書きましたが、実は学生時代は電気メインじゃなくてPerlメインでした。CGI関係でデビューしたくらい。で、今はほとんど忘却した罠。&lt;/P&gt;
&lt;P&gt;PerlにしてもJavaScriptにしてもなんつーかスクリプト系って忘れるんですよね。逆にC++とかJavaのように型の関連付けがしっかりした言語だと、記憶に留まっていて今頃Javaの言語をまったくできないかっていうと、そうでもなくたぶんそれなりに書けると思われます。&lt;/P&gt;
&lt;P&gt;むかしむかし大昔、Visual Basic 2.0なんてプログラムで関数全部common.basなんてファイルに全部突っ込むような仕事をして、たぶん一番大量のソースコードを書いたと思われる昔のVBも、ほとんど忘れてしまった。&lt;/P&gt;
&lt;P&gt;で、思えることはスクリプト系が会わない体質なんじゃないかと^-^;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/93027.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>7年も前からだったのか</title><link>http://blogs.wankuma.com/nagase/archive/2007/07/23/86546.aspx</link><pubDate>Mon, 23 Jul 2007 13:10:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2007/07/23/86546.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/86546.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2007/07/23/86546.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/86546.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/86546.aspx</trackback:ping><description>&lt;P&gt;blogのプロファイルの部分がどーも表示されなかったもんだから、とりあえずほかの人のHTMLソースをコピペしてやろうかと思って、とりあえずいっぱい書いてありそうな&lt;A href="http://blogs.wankuma.com/mymio/"&gt;けろ&lt;/A&gt;さんところのソースを覗いてみました。&lt;/P&gt;
&lt;P&gt;＞主な著書：C/C++ 300の技&lt;/P&gt;
&lt;P&gt;(　ﾟдﾟ)&lt;BR&gt;(つд⊂)ｺﾞｼｺﾞｼ&lt;BR&gt;(；ﾟдﾟ)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;なぜ俺がここに？？&lt;/P&gt;
&lt;P&gt;複数人の共著だったんですけれど、先日までというか先日も気がつきませんでした。7年もたっていまや廃刊になってから同じ本を書いていた方と会うことになるとは。。&lt;/P&gt;
&lt;P&gt;世の中不思議な縁っていうものがあるもんだなぁ。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/86546.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>