2009-08-18 6 views
11

昨日、AMD64およびItaniumターゲットのコンパイル時にMicrosoft Visual C++でインラインアセンブリ(__asmキーワード付き)がサポートされていないことを知りました。MSVCがAMD64およびItaniumターゲットのインラインアセンブリをサポートしないのはなぜですか?

これは間違いありませんか?もしそうなら、なぜそれらのターゲットに対してインラインアセンブリーをサポートしないのか誰にでも分かりますか?それはちょうどドロップするより大きな機能のように思えます...

答えて

9

正しい、それはまだVS 2010 Beta 1でサポートされていません。私の推測では、インラインアセンブリは実装が難しすぎるということです。マイクロソフトが実装した方法、周囲のCコードと統合してデータをCコードの内部と外部に流すことができ、適切なグルーコードが自動的に挿入されます。そのためには、Cコンパイラは実際にアセンブラコードを理解する必要があります。 AMD64とItaniumでは実装されていません。

+1

Cコンパイラは中間ファイルとしてASMを生成しますが、AMD64上でインラインASMを使用できるようにするのは難しくありません。インラインASMがx86用にサポートされているいくつかのコンパイラでx86_64ターゲット用に存在しないのは、プラットフォーム仕様だけです。 –

+0

@ MarkKCowan:MSVCのインラインASMを見たことがありますか?それには、何の意味もありません。 C/C++変数をアセンブリコードのテキストと自由に混在させることができるので、コンパイラは解析コードとすべてのコードを解析する必要があります.GCCのように、アセンブリコード自体がprintfを思い起こさせるスタイルコンパイラがアセンブリを解析しようとするのを避けるために、入力、出力、およびclobberedレジスタの明示的な記述が必要です。正直なところ、GCCのアプローチは、コンパイラを2次的に推測することが少ないためです。 – SamB

+1

@SamB yep、Delphiのインラインアセンブリと同じです。私はちょうどGCCがAT&T構文を使用しないことを望みます:( –

3

限り、あなたはCの慣習に従うよう、アセンブラで記述された関数を呼び出すことは非常に簡単です

...ちょうどドロップにかなり大きな特徴のように思えます。 This tutorialについて説明します。

+0

合意だけです実際の制約は、同じルーチンでCとASMを混在させることができないということです。インラインASMの混合が科学的コードで一般的なパスカルの背景から来て、私は言語を異なる機能に分離するという決定に完全に同意することができます。 –

関連する問題