平成31年春期午後問12

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
カツオのホネさん
(No.1)
https://www.fe-siken.com/kakomon/31_haru/pm12.html
質問です。
アセンブラのLD命令についてですが、
LD GR3,1,GR1でなぜGR1[1]をRG3に代入する形になるのでしょうか?
これが  LD GR3,GR1,1  の順番ならなんとなく理解できるのですが
アセンブラはまだ習い始めたばかりなので、色々わからないことだらけです。
よろしくお願いします<(_ _)>
2020.09.10 12:39
健闘お祈りしますさん
(No.2)
この投稿は投稿者により削除されました。(2020.09.10 16:00)
2020.09.10 16:00
健闘お祈りしますさん
(No.3)
> LD GR3,1,GR1でなぜGR1[1]をRG3に代入する形になるのでしょうか?
> これが  LD GR3,GR1,1  の順番ならなんとなく理解できるのですが
そういう仕様だからです。

IPAの「試験で使用する情報技術に関する用語・プログラム言語など」に書かれています通り、FE専用のプログラム言語であるCASLⅡ、およびそれが動作するシステムCOMETⅡでは、オペランドが3つの場合は必ず「GR*, アドレス, GR*」の順で記述しなさいということが決まっています。
LD命令以外でもオペランドが3つなら上記の順序で記述します。
https://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver4_2.pdf

ルールだから従いましょう、ということにはなりますが、これは合理的な意図がある仕様だと思います。
CASLⅡがいわゆる人間語に近い高水準言語ではなく、機械に分かりやすいことを考慮した低水準言語だからではないでしょうか。

以下、想像で記述します。
LD命令は、オペランドが2つの場合と3つの場合で動作が異なります。
しかもオペランド3つの場合、3つ目のオペランドは省略可能です。これでは、単純にオペランドの数だけでどちらの動作を行うかCOMETⅡは判断できません。
人間は目で見てどちらの動作を行うか分かりますが、機械にはそうはいきません。

そこで、「LD GR1, GR2」とオペランドとしてレジスタが二個続いたら、GR2をGR1にコピーする、と決める。
「LD GR1, adr」ときたら、その次に3つ目のオペランド(GR2とします)があるとみなして「adr + GR2」番地にある値をGR1にコピーする、と決める。GR2が省略されてたら「adr + 空のレジスタ」(実質adr番地)にある値をGR*にコピーするとみなせば、COMETⅡは同じ演算を機械的に実行すればよい、ということになります。機械にとっては分かりやすいでしょう。
(この意図が正しいかどうかは仕様を作成した方にお聞きしないといけないですが・・・)

また、省略できるオペランドは後ろに書く方が合理的ですよね。

アセンブラ言語はそもそも「誰が読んでもわかる」レベルの分かりやすさを目指していないので、正確に仕様通りに解釈することが大切です。
正確にトレースできれば得点しやすいとよく言われる(言語仕様も問題冊子についてますし)ので、ぜひ頑張ってください。
2020.09.10 16:13
カツオのホネさん
(No.4)
回答ありがとうございます

>そういう仕様だからです。
実はネットのアセンブラ入門サイトでわからない命令などはそこを見ながらやっていました。
まだ試験を一度も受けたことがないものでして
仕様があるとは思っていませんでした

今度からそこに注意して過去問を解いてみたいと思います。
丁寧に教えてくださりありがとうございました。後一月とちょっとですが頑張ります!
2020.09.10 19:14

返信投稿用フォーム

スパム防止のために初投稿日から10日以上経過したスレッドへの書き込みは禁止しています。

その他のスレッド


Pagetop