MicroBlaze アセンブラー - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

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 命令セットに加えていくつかの擬似オペコードサポートされています。次の表に、サポートされる擬似オペコードをリストします。

表 1. GNU アセンブラーでサポートされる擬似オペコード
擬似オペコード 説明
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