MN-Core エミュレータには、各種メモリの内容を表示したり、値を設定したりするための制御命令が用意されています。
提出の際にこれらの行は取り除かれ、行数としてはカウントされませんが、コードテストなどでは使用することができます。
詳しい使い方は
を御覧ください。
コードテストで Testcase として Plus 2
を選択し、以下の VSM を実行してみてください。
Standard Error をスクロールするか、D-GET ボタンを押すと、以下のような行が見つかると思います。
d get
命令はエミュレータ専用のダンプ命令です。MN-Core 2 の実機で使うことはできませんが、エミュレータで実行する際のデバッグに使えます。
d get
文のフォーマットとしては
となっています。
「group や mab とは何?」という方は、n0c0b0m0p0
は一旦おまじないだと思ってください。
先の例は、指定された PE の $lm4
を \(1\) 個、(浮動小数点数としては Double 値として、)表示せよ、という命令です。
出力の読み方は、
となっています。
ということでこれは、指定された PE の $lm4
には 0x19
= \(25\) が格納されていることが分かります。
$m0
などの単語を表示させたい際は、Int でも Float でも、getd
の代わりに getf
を使います。
d get
の n0c0b0m0p0
の部分は、どのメモリを表示したいか編集する際によく誤って一部を消してしまい(特に先頭の n0
)、意図しない動作を引き起こすことが多々あるので、注意してください。
連続した領域を表示するには、[num_of_words] を使用すると便利です。
は、
と同等の結果を得られます。
n0c0b0m0p0
の部分を適宜省略すると、複数の PE の値を取得できます。
peid = 0 を指定していた p0
を省略すると、範囲内の全 PE の値を取得できます。
は、
と同等の結果を得られます。
以下のように、d set
を使い、\(16\) 進数で表現された整数値を設定することもできます。
これは LM0 の \(0\) 番地 ($ln0
) に \(1\) 長語、長語値 \(3\) を書き込む、という指示です。
コードテスト で実行する際は「d set を有効にする」にチェックを入れてください。ローカルで judge.py
を使用する際は --enable-set
オプションが必要です。
以下のコードは $ln0
から \(4\) 長語、長語値 \(16,32,48,64\) を書き込む、というものです。
以下の様に単語のロケーションを指定することもできますが、書き込み値は長語値を受け取るため、各長語の下位の単語は無視されます。
出力は以下の通りです。
LM1(n0c0b0m0p0,0)
= $n0
には \(1\) が、LM1(n0c0b0m0p0,1)
= $n1
には \(3\) が格納された事が分かります。
d set
では PE を指定して、特定の PE に値を書き込むこともできます。
d get
のときと同じく、 $ln0n0c0b0m0p0
のようにロケーションを指定すると、対象の PE にのみ値が書き込まれます。