HOME»基本情報技術者試験掲示板»基本情報技術者過去問題 平成30年春期 午後問12
投稿する

基本情報技術者過去問題 平成30年春期 午後問12 [1469]

 悪戦苦闘さん(No.1) 
どなたか教えてください。
問題文のプログラムで、次の3行がどうして右側のコメントのようになるのか分かりません。

LD        GR4 , 0 , GR1   ;数字1文字の取出し
SUBL   GR4 , ='0'         ; 1桁を数値に変換
SLL      GR0 , 1              ; GR0を10倍してGR4を加算

上の3行を次のように解釈してしまうのですが...
LD        GR4 , 0 , GR1   ;GR1+0(数字列の先頭アドレス)の中身(数字1文字)をGR4にロード
SUBL   GR4 , ='0'         ; GR4-0(取出した数字1文字-0)の結果をGR4に格納??
SLL      GR0 , 1              ; GR0(初期化してある)に1を足して、1ビット左に論理シフト??
2018.10.10 13:26
助け人さん(No.2) 
FE ゴールドマイスター
コメント「GR0を10倍してGR4を加算」に対応する命令は、同じ行の
SLL   GR0, 1
だけでなく、その行から始まって4行後の
ADDL  GR0, GR4 
までです。  ←  命令1行とコメント1行が対応しないとは、ズルイ。

数字列567の場合にどう動くかを説明します。
LD    GR4, 0, GR1    ;数字1文字'5'をGR4にロード(GR4=#0035)
SUBL  GR4, ='0'      ;GR4-'0'=#0035-#0030=5('5'を5に変換)
SLL   GR0, 1         ;GR0を1ビット左にシフト、つまりGR0は元GR0の2倍
LD    GR5, GR0       ;そのGR0をGR5にロード、つまりGR5は元GR0の2倍
空欄a SLL GR5, 2     ;GR5を2ビット左にシフト、つまりGR5は元GR5の4倍、つまり元GR0の8倍
ADDL  GR0, GR5       ;GR0にGR5を加算、つまりGR0は元GR0の2倍+8倍で10倍
2018.10.10 19:10
 悪戦苦闘さん(No.3) 
助け人さん、ありがとうございます。
4行が1つのコメントに集約してあるとは、初級者には少々キツイですね。
しかし、お陰様でその部分は、スッキリしました。
もう一つお願いがあるのですが、GR0は初期化してあって、それを左シフトしても0のままではないのでしょうか。初期化の捉え方が間違っているのでしょうか。
2018.10.10 22:32
助け人さん(No.4) 
FE ゴールドマイスター
先ほど、誤解が生じる表現がありました。正しくは、
コメント「GR0を10倍してGR4を加算」に対応する命令は、同じ行の
SLL   GR0, 1
だけでなく、その行の次から始まって4行後の
ADDL  GR0, GR4 
までの5行分です。

「GR0を10倍してGR4を加算」はループします。

数字列567の場合、
ループ1回目…GR0=0から始まり、最初の数字5をGR4にロードし、GR0=0×10+5=5
ループ2回目…GR0=5から始まり、次の数字6をGR4にロードし、GR0=5×10+6=56
ループ3回目…GR0=56から始まり、次の数字7をGR4にロードし、GR0=56×10+7=567
これで終わりです。
2018.10.10 23:33
 悪戦苦闘さん(No.5) 
助け人さん、ご丁寧にありがとうございます。
ここまで詳しく書いていただけると、初級者にはとてもありがたいです。
つくづく、まだ勉強が足りないのを痛感しています。
これからも頑張ります。
また、困ったことがありましたら、助けてくださいね。(^^;
よろしくお願いいたします。
2018.10.11 08:14
 悪戦苦闘さん(No.6) 
助け人さん、助けてください。
教えていただいたことをしっかり理解しようと、再度吟味していたのですが......
LAD GR0,0 で躓きました。
LAD命令は、アドレスをGR0にロードするのですよね。
つまり、GR0に入っているのはアドレス(番地)です。
一方、GR4は、数値化されたデータが入っています。
それで、どうしてADDL GR0,GR4が成り立つのでしょうか。
GR0の値の変化を教えていただけると助かります。
よろしくお願いいたします。
2018.10.12 21:49
助け人さん(No.7) 
FE ゴールドマイスター
LAD GR0, 0
は、問題用紙巻末の「アセンブラ言語の仕様」にあるLAD命令の説明では、読み取れません。

LD命令とLAD命令を対比して説明します。

LD GR0, A  …  GR0にAの内容をロード
LD GR0, =5  …  GR0に5をロード

LAD GR0, A  …  GR0にAの実効アドレスをロード
LAD GR0, 5  …  GR0に5番地の実効アドレスをロード、つまりGR0に5をロード

結論として、LD GR0, =nとLAD GR0, nは等価です。

過去問を見ると、LAD GR0, nは少なく、LD GR0, =nの方が多いですね。でも、LAD GR0, nは知っておく必要があります。
2018.10.12 22:53
 悪戦苦闘さん(No.8) 
助け人さん、早々にありがとうございます。
しかし、奥が深いですね~。
というか、私の思慮が浅いんですね。~トホホ(^^;
2018.10.12 23:13
返信投稿用フォームスパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop