<?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/</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>テキストの逆順表示</title><link>http://blogs.wankuma.com/nagase/archive/2008/07/09/148108.aspx</link><pubDate>Wed, 09 Jul 2008 11:55:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/07/09/148108.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/148108.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/07/09/148108.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/148108.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/148108.aspx</trackback:ping><description>&lt;p&gt;某所（チラ裏）のお題。&lt;/p&gt; &lt;p&gt;「テキストファイルを読み込んで、行ごとに逆順に表示しなさい。言語はおまかせ。」&lt;/p&gt; &lt;p&gt;たとえば、&lt;/p&gt; &lt;blockquote&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;というテキストファイルを&lt;/p&gt; &lt;blockquote&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;のように出力します。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ということで作ってみました。「ドC言語」で。&lt;/p&gt; &lt;p&gt;こちら。↓&lt;/p&gt; &lt;p&gt;&lt;a href="http://d.hatena.ne.jp/udongein/20080709/1215570535" target="_blank"&gt;&lt;strong&gt;そんなわけで昨日のお題&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;rubyとか持ち出しちゃったら、とても簡単に実現できそうですね。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/148108.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ながせ</dc:creator><title>Twitter始めています</title><link>http://blogs.wankuma.com/nagase/archive/2008/05/07/136516.aspx</link><pubDate>Wed, 07 May 2008 09:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/05/07/136516.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/136516.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/05/07/136516.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/136516.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/136516.aspx</trackback:ping><description>&lt;p&gt;そういえば、公開していなかったことに気が付きました。&lt;/p&gt; &lt;p&gt;こちらです。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://twitter.com/udonge"&gt;http://twitter.com/udonge&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;たまに更新しますので、お気軽にFollowしてくださいませ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/136516.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>いちねん</title><link>http://blogs.wankuma.com/nagase/archive/2008/03/20/128777.aspx</link><pubDate>Thu, 20 Mar 2008 20:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/03/20/128777.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/128777.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/03/20/128777.aspx#Feedback</comments><slash:comments>48</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/128777.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/128777.aspx</trackback:ping><description>わんくま同盟に参加して、一年になりました。
&lt;p&gt;
そもそも、わんくま同盟に申請出したときには、存在が何をしているのかすら知りませんでした。
&lt;p&gt;

某SNSで、「Web記事でも書けるようにならんかなー。」とぼやいていたところ、
とあるかたから、
&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;
めざせ、月１エントリ… orz&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/128777.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>nagase</dc:creator><title>Re: 電流電圧変換回路</title><link>http://blogs.wankuma.com/nagase/archive/2008/02/04/120894.aspx</link><pubDate>Mon, 04 Feb 2008 18:29:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/02/04/120894.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/120894.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/02/04/120894.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/120894.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/120894.aspx</trackback:ping><description>&lt;p&gt;半年くらい前のエントリ：&lt;a class="moz-txt-link-freetext" href="http://blogs.wankuma.com/nagase/archive/2007/08/31/92916.aspx#120872"&gt;&lt;font color="#0000ff"&gt;http://blogs.wankuma.com/nagase/archive/2007/08/31/92916.aspx#120872&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ですが、&lt;/p&gt; &lt;p&gt;＞この回路図を基に0-10V入力に対して4-20mA出力になるような回路にするにはどうしたら宜しいでしょうか？&lt;/p&gt; &lt;p&gt;ということで、返信をテキストで記述しようとしたが、それを書くには余白が狭すぎるので新しく起こしました。&lt;/p&gt; &lt;p&gt;&lt;img src="http://nagase.wankuma.com/Teiden.png"&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;前段の加算回路で、2.5Vのオフセットをつけて、0Vから10Vを2.5Vから12.5Vに変換してます。&lt;/p&gt; &lt;p&gt;これを、1V=1.6mAの演算式で、R11をセットします。これで、（計算上は）出力に、4mA - 20mAを流せます。&lt;/p&gt; &lt;p&gt;ただし、上の回路はそもそもuAオーダーの出力を出すためものなので、オペアンプが飽和します。通常利用の場合は、電圧検出抵抗で検出した電流を電圧に変換して、増幅器の反対側に入れるのをオススメしておきます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/120894.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>nagase</dc:creator><title>delegateを使ったfizzbuzz</title><link>http://blogs.wankuma.com/nagase/archive/2008/02/04/120836.aspx</link><pubDate>Mon, 04 Feb 2008 13:57:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/02/04/120836.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/120836.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/02/04/120836.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/120836.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/120836.aspx</trackback:ping><description>&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;font color="#000000"&gt;C#の練習用にDelegateを利用したFizzBuzz問題をやってみた。&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&lt;font color="#000000"&gt;なんかメソッドがことごとくstaticになってるんで、見た目はあまりよくはないですが…。&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Linq;
&lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; System.Text;

&lt;span style="color: rgb(0,0,255)"&gt;namespace&lt;/span&gt; DelegateFizzBuzz
{
    &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Program
&lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="code"&gt;        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt;[] FizzBuzzMap = &lt;/pre&gt;&lt;pre class="code"&gt;           {3,  0,  0,  1,  0,  2,  1,  0,  0,  1,  2,  0,  1,  0,  0 };

        &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;delegate&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; n);

        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Other(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(n);
        }

        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Fuzz(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Fuzz"&lt;/span&gt;);
        }

        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Buzz(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Buzz"&lt;/span&gt;);
        }

        &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; FuzzBuzz(&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"FuzzBuzz"&lt;/span&gt;);
        }
        

        &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Main(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;[] FizzBuzzFunc = 
            {
                &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;( Other ),
                &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;( Fuzz ),
                &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;( Buzz ),
                &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;doFuzzBuzz&lt;/span&gt;( FuzzBuzz )
            };

            &lt;span style="color: rgb(0,0,255)"&gt;for&lt;/span&gt; (&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 100; i++)
            {
                FizzBuzzFunc[FizzBuzzMap[i % 15]](i);
            }
        }
    }
}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/120836.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>nagase</dc:creator><title>1月勉強会</title><link>http://blogs.wankuma.com/nagase/archive/2008/01/27/119406.aspx</link><pubDate>Sun, 27 Jan 2008 00:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/01/27/119406.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/119406.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/01/27/119406.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/119406.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/119406.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;最近は、何年ぶりかにASP.NETを触りつつC#もやっていたんですが、やっぱりプログラミング言語って面白いですよね。&lt;/P&gt;
&lt;P&gt;なんというか、久しぶりにプログラミングに燃えてきました。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/119406.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>nagase</dc:creator><title>株価が下がるとなぜ困る？</title><link>http://blogs.wankuma.com/nagase/archive/2008/01/22/118575.aspx</link><pubDate>Tue, 22 Jan 2008 12:42:00 GMT</pubDate><guid>http://blogs.wankuma.com/nagase/archive/2008/01/22/118575.aspx</guid><wfw:comment>http://blogs.wankuma.com/nagase/comments/118575.aspx</wfw:comment><comments>http://blogs.wankuma.com/nagase/archive/2008/01/22/118575.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nagase/comments/commentRss/118575.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nagase/services/trackbacks/118575.aspx</trackback:ping><description>&lt;P&gt;私のはてなダイヤリーからの転載です^-^;&lt;/P&gt;
&lt;P&gt;えーと、株価っていうかここでは日経平均株価とかTOPIX、ニューヨークダウなどの株価指数です。&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;株価が下がって原油・小麦とかの価格があがる　→　会社はつぶれるわ、物価は大暴騰するわ、失業率があがりまくるわ&lt;/P&gt;
&lt;P&gt;ということですね。ただですねー。今回の下げがこれだけ止まらないっていうのは、福田超先生が明確な改革路線を見出さないからいかんのです。&lt;/P&gt;
&lt;P&gt;小泉内閣時代にも問題は多々ありましたが、改革路線だけは絶対に貫くっていうメッセージがあったものだから、ここまでひどくはならんかったのですが･･･。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/nagase/aggbug/118575.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>