7.12 C および C++ コードのインラインアセンブラの命令の制限

インラインアセンブラによってサポートされていない命令が数多くあります。

特に、以下の命令はサポートされていません。
  • BKPTBXBXJ、および BLX 命令。

    __breakpoint() コンパイラ組み込み関数を使用することで、C および C++ のコードに BKPT 命令を 挿入できます。
  • LDR Rn, =expression 疑似命令。代わりに、MOV Rn, expression を使用して下さい(ただし、リテラルプールからのロードが発生します)。
  • LDRTLDRBTSTRT、および STRBT 命令。
  • MULMLAUMULLUMLALSMULL、および SMLAL フラグ設定命令。
  • 第 2 オペランドが定数である MOV または MVN フラグ設定命令。
  • システムまたはスーパーバイザモードで使用され、ユーザモードバンクレジスタをロードする特別な LDM 命令。以下のようなレジスタリストの後に ^ で書き込まれます。
    LDMIA sp!, {r0-r12, lr, pc}^
    
  • ADR 疑似命令および ADRL 疑似命令

    ADR および ADRL 疑似命令の代わりに、MOV Rn, &expression; を使用できます。
  • 命令および 命令は使用しないことをお勧めします。これは、コンパイラが と の間でロードとストアを生成するかもしれず、 によって設定された排他的モニタをクリアする可能性があるためです。この推奨事項は、バイト、ハーフワード、およびダブルワードのバリアントである 、、、、、および にも当てはまります。
関連する概念
7.7 C および C++ コードのインラインアセンブリ演算の制限
7.8 C および C++ コードのインラインアセンブラのレジスタの制限
7.9 C および C++ コードのインラインアセンブラのプロセッサモードの制限
7.10 C および C++ コードのインラインアセンブラの Thumb 命令セットの制限
7.11 C および C++ コードのインラインアセンブラのベクタ浮動小数点(VFP)の制限
7.13 C および C++ コードのその他のインラインアセンブラの制限
関連する参考文書
10.106 __breakpoint コンパイラ組み込み関数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.