HOME»基本情報技術者試験掲示板»平成25年秋期午後問12
投稿する

平成25年秋期午後問12 [5934]

 shouter1さん(No.1) 
https://www.fe-siken.com/kakomon/25_aki/pm12.html
この問題の問2、dの解答がイの6となりますが、何度もコードを見返しましたがコードをうまく読み取れません。それ以外は正解できましたがプログラム1の13,14行目の文でどうなってオーバーフローが起きるのかわからず空白にしてしまいました。
根本的にコードが読み取れる方、ぜひ解説をお願いいたします、
2025.06.12 19:15
jjon-comさん(No.2) 
FE プラチナマイスター
以前、次のように発言したところ、

> 旧試験制度の出題範囲だったCASLⅡアセンブラの質問が続いたのが気になっています。
> 現行の新試験制度(CBT受験、科目A・科目B)では出題範囲外の質問が
> なぜいま投稿されるのか,私が知らない事情が何かあったりするのでしょうか?
https://www.fe-siken.com/bbs/5750.html

質問者から「出題外だと知らずに勉強してました…」という回答があったことがあります。

今回のご質問は、現行 科目B の試験対策とは関係なく勉強したい、ということでよいですか?
2025.06.12 19:30
jjon-comさん(No.3) 
FE プラチナマイスター
基本情報 平成25年 秋期 午後 問12 アセンブラ
https://www.fe-siken.com/kakomon/25_aki/pm12.html

分の十の位 M1=0~9
分の一の位 M2=0~9
秒の十の位 S1=0~5
秒の一の位 S2=0~9
としたとき、これを秒に変換するにはプログラムで次の計算をおこなえばよい。
((((((0+M1)×10)+M2)×6)+S1)×10)+S2
このために用いる定数が24 VALUE1 DC 10,6,10です。

ちなみに人間にとって分かりやすくこの式を展開すると意味はこうです。
M1×600 + M2×60 + S1×10 + S2

CASLⅡアセンブラには乗算命令は無いので、加算の繰り返しでこれを実現します。

GR0 に M1 が格納されており、
GR4 に 10進数の10(2語長の2進数で 00000000 00001010)が格納されている
という状態を例に、乗算の処理を説明します。

(1) 加算結果を保持する変数を0で初期化
    LD    GR5,=0

(2) GR4を右1bitシフト 00000000 00000101→ 0
    ビットあふれは無いので加算しない。
    GR4はオール0ではないので処理はまだ続く。
LOOP2 SRL  GR4,1
      JOV  INCR
   [a JNZ  CONT]
    GR0を左1bitシフトすると M1×2 になる。
CONT  SLL  GR0,1
      JUMP LOOP2

(3) GR4を右1bitシフト 00000000 00000010→ 1
    ビットあふれが有ったので GR5 に M1×2 を加算する。
LOOP2 SRL  GR4,1
      JOV  INCR

INCR  ADDA GR5,GR0
    GR0を左1bitシフトすると M1×4 になる。
CONT  SLL  GR0,1
      JUMP LOOP2

(4) GR4を右1bitシフト 00000000 00000001→ 0
    ビットあふれは無いので加算しない。
    GR4はオール0ではないので処理はまだ続く。
LOOP2 SRL  GR4,1
      JOV  INCR
   [a JNZ  CONT]
    GR0を左1bitシフトすると M1×8 になる。
CONT  SLL  GR0,1
      JUMP LOOP2

(5) GR4を右1bitシフト 00000000 00000000→ 1
    ビットあふれが有ったので GR5 に M1×8 を加算する。
LOOP2 SRL  GR4,1
      JOV  INCR

INCR  ADDA GR5,GR0
    GR0を左1bitシフトすると M1×16 になる。
CONT  SLL  GR0,1
      JUMP LOOP2

(6) GR4を右1bitシフト 00000000 00000000→ 0
    ビットあふれは無いので加算しない。
    GR4がオール0になったので M1 の桁は終了。次の M2 の桁へ。
LOOP2 SRL  GR4,1
      JOV  INCR
   [a JNZ  CONT]
      LAD  GR3,1,GR3
      LAD  GR1,1,GR1
      JUMP LOOP1

以上より、GR5 には (M1×2)+(M1×8) すなわち M1×10 が求められます。

結局、ビットあふれがあったときに、行番号19のADDA命令が実行されるのだから、
10進数の10(2語長の2進数で 00000000 00001010)
10進数の 6(2語長の2進数で 00000000 00000110)
10進数の10(2語長の2進数で 00000000 00001010)
の中にあるビット1の個数が実行回数である。答え[ d ] は 6。
2025.06.12 22:20
jjon-comさん(No.4) 
FE プラチナマイスター
ごめんなさい。No.3 に登場する「2語長」はすべて「1語長」が正しいです。1語が16bit長なので。
2025.06.12 22:24
 shouter1さん(No.5) 
ご回答ありがとうございます。同時に返信が遅れてしまい申し訳ありません。
まずはこのアセンブラ言語が今の試験から外れていることは無知で勉強していました。
自分は基本情報技術者の資格が勉強しているので効率的に勉強できていずに恥じております、、
今の科目bの試験内容は疑似言語で全6問単発解答方式になっているのでしょうか。
そうならば試験対策としては、最新で更新されている過去問を解いたほうが効率が圧倒的にいいですよね。

質問に対してのご回答に対して
今からじっくりと読ませていただきます。こんなに詳しく書いてくださりありがとうございます、、
2025.06.25 19:48
返信投稿用フォームスパム防止のためにスレッド作成日から40日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop