- ベストアンサー
C++ インラインアセンブラでdoubleの計算
プログラム初心者です。 インラインアセンブラで浮動小数点を計算したいのですが、 計算出来ません。fmov、faddで浮動小数点演算が可能との事ですが。 整数の演算と同様では計算できないのでしょうか? 下記の様にまず、aとbを足し算をしてみました。 double a=2.1; double b=1.1; __asm{ fmov st1,a fmov st2,b fadd st1,st2 fmov a,st1 } cout << a << endl;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 ちょっと自分にツッコミ。 >たとえば0x86なら 0ってなんだよ!16進数かよ! さて本題ですが、x86なようなので、以下から技術資料をダウンロードして下さい。 http://www.intel.com/jp/download/index.htm 最低限必要なのは ・IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、中巻 A: 命令セット・リファレンス A-M [日本語: PDF 形式 5,251 KB] ・IA-32 インテル® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、中巻 B: 命令セット・リファレンス N-Z [日本語: PDF 形式 4,215 KB] です。たとえばmaddの使い方に関してはA-Mの方に記載されています。 ただし、アセンブラには方言があり、VC++のインラインアセンブラはMASMと呼ばれるアセンブラですので、その表記法に従う必要があります。 http://ja.wikipedia.org/wiki/Microsoft_Macro_Assembler MASMに関しては検索すると色々出てくるので参考にすると良いかと思います。 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&hs=bLW&rls=org.mozilla%3Aja%3Aofficial&q=MASM&aq=f&aqi=&aql=&oq=
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
この質問に限らないんだけど, 質問するときには「答えやすい質問」を心掛けてほしい. たとえば, この文章を読んで「何がどう『計算できない』のか」理解できますか? 「コンパイルエラーになる」ならメッセージが出ているはずだからそれを (下手に解釈しようとせず) 一字一句正確に書く. 「コンパイルはできるけど期待した結果が得られない」というなら, どのような結果を期待して実際に得られたのがいかなる結果だったのかを書く. これらはどちらも質問者にしかできないことだよ. あと, 「(可能な限り) 完全なプログラムを出す」ことと, コンパイラや OS といった処理系の情報をきちんと書くことも忘れないでほしい.
- LOHA
- ベストアンサー率52% (203/388)
基本的にアセンブラをやるなら、たとえば0x86ならIntelのサイトから該当する技術資料をダウンロードして自分で読み解く、というぐらいの能力が必要となります。 というのも、アセンブラはCPUのアーキテクチャによって変わるからです。なので一概に「こうすればできる」と言うことはできません。 まず、こういった質問をする際は、開発環境(今回のケースでは特にCPUのアーキテクチャ)を示すのが重要です。 #それと、「プログラム初心者です」と自称する方がインラインアセンブラやるのは #荷が重いのでは?という気もします。
補足
補足いたします。 他に、足りない情報あるでしょうか? CPU:Intel Core2 Duo CPU P8400 OS:Windows Vista (32bit) 統合開発環境:VC++2010Express
お礼
いや、意味は伝わりましたよ。x86の事だろうなと。 ありがとうございます。 MASMと検索するとかなりヒットしますね。 下記にFPUを使用した浮動小数点のサンプルがありましたので、 確認してみます。 http://www7.plala.or.jp/keny01/asm/win32/#sub7-1
補足
以下にもサンプルがありました。 http://7ujm.net/C++/asm1.html