アセンブラで記述した関数の単体テストを行うことはできますか?
よくある質問(FAQ)
アセンブラで記述した関数の単体テストを行うことはできますか?
はい、可能です。カバレッジマスターは、アセンブラで記述された関数の単体テスト、およびC0カバレッジを計測する機能を備えています。C言語の関数には、関数名や中括弧 { } で囲まれた範囲を一つの単位とする明確な構造があります。一方で、アセンブラ関数にはそのような定型構造はなく、任意のアドレスに命令(ニーモニック)を記述することで柔軟に構成されます。カバレッジマスターは、こうしたアセンブラ関数の特性に対応した検証が可能です。
<アセンブラ関数の例>
開始位置ラベル→ SUB_ASM_FUNC:
//アセンブラ処理↓例
SUBR:
MOV R6, #12H
MOV R7, #10H
ADD R6, R7
MOV R0, R6
終了位置ラベル→ END_SUB_ASM_FUNC:
NOP
このため、アセンブラ関数をカバレッジマスターでテストするためには、ユーザーが自分で関数の開始位置と関数の終了位置を指定して、アセンブラ関数の範囲を定義する必要があります。
上記の場合であれば、アセンブラ関数の先頭は SUB_ASM_FUNC のラベル関数の終了位置は、END_SUB_ASM_FUNC のラベルになります。
アセンブラ関数の単体テストを行う手順は以下の通りです。
1)「開始アドレス~終了アドレス-テスト用CSV」を選択し、CSV雛形作成画面を表示します。
2)「スタートアドレスに飛んで実行」のチェックボックスを ON にします。
(このオプションにより、指定したアセンブラ開始アドレスからテストが実行されます。OFFの場合、スタートアップコマンドファイル等でPC(プログラムカウンタ)を開始アドレスへセットする必要があります。)
3) 「アセンブラのテスト」のチェックボックスを ON にします。
(このオプションにより、指定範囲のC0カバレッジが記録されます。)
4) 「変数一覧」タブを表示し、オプションの「アセンブラのラベルを含む」にチェックを入れます。
5) 一覧から関数先頭のラベルを選択し、開始アドレスの「決定→」ボタンを押します。
6) 同様に終了位置のラベルを選択し、終了アドレスの「決定→」を押します。ラベルがない場合はアドレスを直接入力してください。
7)テストに必要なINPUT/OUTPUTを指定します。アセンブラ関数の場合、内部レジスタも直接指定可能です。
※ C関数内に記述された「インラインアセンブラ」は、実行は可能ですが、命令ごとのカバレッジ計測には対応していません。