7.13 C および C++ コードのその他のインラインアセンブラの制限

armasm または組み込みアセンブリ言語と比較した場合、インラインアセンブラには数多くの制限があります。

特に、以下の制限があります。
  • インラインアセンブラはハイレベルのアセンブラなので、人間が記述したとおりのコードが生成されない場合もあります。コンパイラにより生成されるコードよりも効率的なコードを生成する目的で、インラインアセンブラを使用しないで下さい。そのような目的には、組み込みアセンブラまたは ARM アセンブラ armasm を使用して下さい。
  • PC への書き込みなど、ARM アセンブラ armasm で使用できるローレベルの機能の一部はサポートされません。
  • ラベル式はサポートされません。
  • ドット記法(.)または {PC} を使用して、現在の命令のアドレスを取得することはできません。
  • & 演算子を使用して、16 進定数を表すことはできません。16 進定数を表すには、接頭文字 0x を使用します。例えば、
    __asm { AND x, y, 0xF00 }
  • インラインアセンブリ言語では、8 ビット定数の実際のローテートを指定する表記法を使用できません。つまり、シフトした 8 ビット定数を使用すると、NZCV フラグが更新される場合に、C フラグが壊れていると見なされます。
  • スタックポインタを変更しないで下さい。作業レジスタは必要に応じて自動的にスタックされたり復元されるので、スタックの変更は不要です。作業レジスタを明示的にスタックしたり復元したりすることはコンパイラでは容認されていません。
関連する概念
7.7 C および C++ コードのインラインアセンブリ演算の制限
7.8 C および C++ コードのインラインアセンブラのレジスタの制限
7.9 C および C++ コードのインラインアセンブラのプロセッサモードの制限
7.10 C および C++ コードのインラインアセンブラの Thumb 命令セットの制限
7.11 C および C++ コードのインラインアセンブラのベクタ浮動小数点(VFP)の制限
7.12 C および C++ コードのインラインアセンブラの命令の制限
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.