MicroBlaze ソフト プロセッサ用の mb-as
アセンブラーでは、標準 GNU コンパイラでサポートされているのと同じオプションのセットがサポートされます。標準 GNU アセンブラーでサポートされているアセンブラー指示子がサポートされています。
mb-as
アセンブラーでは、imm
命令以外の MicroBlaze マシン命令セットの opcode がサポートされています。mb-as
アセンブラーでは、imm
命令は、大きい即値が使用される場合に生成されます。imm
命令を含むコードを記述するためのアセンブリ言語プログラマは必要ありません。MicroBlaze 命令セットの詳細は、『MicroBlaze Processor リファレンス ガイド』 (UG081) を参照してください。
mb-as
アセンブラーでは、即値オペランドを使用するすべての MicroBlaze 命令を定数またはラベルとして指定する必要があります。命令に PC 相対オペランドが必要な場合は、mb-as
アセンブラーによりそれが算出され、必要に応じて imm 命令に含められます。
たとえば、beqi
(branch immediate if equal) 命令には PC 相対オペランドが必要です。
アセンブリ プログラマでは、この命令を次のように使用します。
beqi r3, mytargetlabel
ここで、mytargetlabel
は対象となる命令のラベルです。mb-as
アセンブラーにより、命令の即値が mytargetlabel - PC
として算出されます。
即値が 16 ビットより大きい場合は、mb-as
アセンブラーにより imm 命令が自動的に挿入されます。コンパイル時に mytargetlabel
の値が不明な場合、mb-as
アセンブラーにより、常に imm
命令が挿入されます。不要な imm 命令を削除するには、relax オプションを使用してください。
同様に、命令で大きな定数のオペランドが必要な場合は、アセンブリ言語プログラマで imm
命令ではなくオペランドをそのまま使用する必要があります。たとえば次のコードでは、レジスタ r3 の内容に定数 200,000 を追加し、結果をレジスタ r4 に保存します。
addi r4, r3, 200000
mb-as
アセンブラーは、このオペランドに imm 命令が必要であると判断し、自動的に挿入します。
mb-as
アセンブラーでは、アセンブリのプログラムを簡単にするため、標準の MicroBlaze 命令セットに加えていくつかの擬似オペコードサポートされています。次の表に、サポートされる擬似オペコードをリストします。
擬似オペコード | 説明 |
---|---|
nop | 操作は実行されません。命令で置換: or R0, R0, R0 |
la Rd, Ra, Imm | 命令で置換: addik Rd, Ra, imm; = Rd = Ra + Imm; |
not Rd, Ra | 命令で置換: xori Rd, Ra, -1 |
neg Rd, Ra | 命令で置換: rsub Rd, Ra, R0 |
sub Rd, Ra, Rb | 命令で置換: rsub Rd, Rb, Ra |