2014年度後期中間試験問題(pdf形式)

c 大豆生田利章 2014
2014 年度 2J マイコン後期中間試験問題
2014/11/28
[注意事項]
› 筆記用具のみ使用可能である.
(電卓・算盤および携帯電話の電卓機能等の使用は不可.
)
› 解答用紙 1 ページ目先頭に学籍番号・氏名を,2 ページ目以降の右上に学籍番号を記入
する.
› 氏名・学籍番号の無いもの,解答欄を間違えたもの,解答の順番を変更したものは 0 点
とする.
› 解答を書きなおす時は,以前の解答は丁寧かつ綺麗に消して跡が残らないようにする.
› 特に断らない限り,マイコンとして H8/3062BF を使用するものとする.
› 末尾の付録に H8 マイコンのアセンブリ言語の抜粋が載せてある.
問題 1(3 点× 10)図 1 はサブルーチン呼び出し時と,メインルーチン復
帰時のスタック,プログラムカウンタ (PC) およびスタックポインタ
(SP) の関係を図示したものである.図中 【1】 から 【10】にあてはま
る数値を選択肢(ア)から(コ)の中から選べ.複数の解答が同じにな
る場合もある.
図 1:
選択肢:
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
2
(ア) H’000826
(イ) H’000828
(ウ) H’00082A
(エ) H’000930
(オ) H’000940
(カ) H’000942
(キ) H’FFFEFA
(ク) H’FFFEFC
(ケ) H’FFFEFE
(コ) H’FFFF00
問題 2(5 点× 4)リスト 1 は以下の仕様を満たすプログラムである.
(出題
の都合上,一部コメントを省略している)このプログラムに関して,以
下の問いに答えよ.なお,試験問題で与えられていない仕様に関して
は,リスト 1 と矛盾しない範囲内において適宜判断するものとする.
• ポート A から入力した数値に応じて,ポート 4 に接続した 7 セグ
メント LED を点灯させる.
• ポート A からの入力の上位 4 ビットは無視する.
• 入力数値と出力パターンは図 2 に示す.H’0A から H’0F のとき
はすべての LED を消灯する.
• 以上の動作を無限ループで繰り返す.
図 2:
プログラムリスト 1:
2
PADDR
. CPU
. EQU
3
4
PBDDR
P4DDR
. EQU
. EQU
H ’ EE00A
H ’ EE003
5
PADR
. EQU
H ’ FFFD9 ; VPT <-> I / O board VP3
1
300 HA
H ’ EE009
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
6
7
8
9
10
11
12
13
14
15
P4DR
. EQU
H ’ FFFD3 ; VPD <-> I / O board VP1
. SECTION
PROG , DATA , LOCATE =H ’00000
. DATA . L RESET
. SECTION
C , DATA , LOCATE =H ’01000
;変 換 テ ー ブ ル ( 固 定 デ ー タ )
TBL :
. DATA . B H ’77 , H ’7 C ,H ’39 , H ’5 E ,H ’79 ,
+ H ’71 , H ’7 D ,H ’76 , 【 4 】 , H ’1 E ,
+ H ’00 , H ’00 , H ’00 , H ’00 , H ’00 , H ’00
. SECTION
P , CODE , LOCATE =H ’00800
RESET : MOV . L
#H ’ FFFF00 , ER7 ; S P セ ッ ト
MOV . B
【1 】
#H ’00 , R0L ; 入 力 ポ ー ト 設 定
20
MOV . B
MOV . B
MOV . L
#H ’ FF , R0L ; 出 力 ポ ー ト 設 定
R0L , @P4DDR ; P 4 は 出 力
#H ’00 , ER1 ; レ ジ ス タ E R 1 ク リ ア
21
【2 】; デ ー タ 入 力
22
AND . B
23
【3 】
24
25
MOV . B
JMP
26
. END
16
17
18
19
3
#H ’0 F , R1L ; 下 位 4 ビ ッ ト の み 有 効
R0L , @P4DR ;7 セ グ メ ン ト 表 示
@LOOP
(1) リスト 1 中の【1】から【3】の空白箇所を埋めるのに適切な命令
を解答用紙に記入せよ.
(2) リスト 1 中の【4】に当てはまる 16 進数を解答用紙に記入せよ.
問題 3(5 点× 4)リスト 2 は以下の仕様を満たすサブルーチンである.
(出
題の都合上,一部コメントを省略している)
• メモリ上のデータの総和を求める.
• データはメモリ上連続した領域に記憶されているものとする.
.
• データのサイズは 8 ビット(1 バイト)である.
• サブルーチン呼び出し時にはレジスタ ER0 に先頭のデータのア
ドレスを,レジスタ R1L にデータの個数を格納する.
• データの総和はレジスタ R1 に格納する.
このサブルーチンに関して,以下の問いに答えよ.なお,試験問題で与
えられていない仕様に関しては,リスト 2 と矛盾しない範囲内におい
て適宜判断するものとする.
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
4
プログラムリスト 2:
1
SUB :
PUSH . L
MOV . L
ER2
#H ’00000000 , ER2
SUB0 :
MOV . B
【1 】
【2 】
@ER0 , R2L
DEC . B
【3 】
R1L
2
3
4
5
6
7
8
9
10
【4 】
POP . L
RTS
ER2
(1) リスト 2 中の【1】の空白箇所を埋めるのに適切な命令を選択肢
(a) から (f) の中から選び,その記号を解答用紙に記入せよ.
選択肢:
(a) ADD.W E2,R1
(b) ADD.W E2,R2
(c) ADD.W R1,R2
(d) ADD.W R1,E2
(e) ADD.W R2,E2
(f) ADD.W R2,R1
(2) リスト 2 中の【2】の空白箇所を埋めるのに適切な命令を選択肢
(a) から (d) の中から選び,その記号を解答用紙に記入せよ.
選択肢:
(a) DEC.L #1,ER0
(b) DEC.L #2,ER0
(c) INC.L #1,ER0
(d) INC.L #2,ER0
(3) リスト 2 中の【3】の空白箇所を埋めるのに適切な命令を選択肢
(a) から (f) の中から選び,その記号を解答用紙に記入せよ.
選択肢:
(a) BEQ SUB
(b) BEQ SUB0
(c) BRA SUB
(d) BRA SUB0
(e) BNE SUB
(f) BNE SUB0
(4) リスト 2 中の【4】の空白箇所を埋めるのに適切な命令を選択肢
(a) から (e) の中から選び,その記号を解答用紙に記入せよ.
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
5
選択肢:
(a) MOV.W E0,R1
(b) MOV.W E1,R1
(c) MOV.W E2,R1
(d) MOV.W R0,R1
(e) MOV.W R2,R1
問題 4(3 点× 10)リスト 3 は以下の仕様を満たすプログラムである.
(出
題の都合上,一部コメントを省略している)このプログラムに関して,
以下の問いに答えよ.なお,試験問題で与えられていない仕様に関し
ては,リスト 3 と矛盾しない範囲内において適宜判断するものとする.
また,Pmn はポート m の第 n ビットを表す.
• P62 が 0 になると,8 ビットカウンタの動作を開始する.
• 100 ミリ秒ごとにカウンタの値を増やす.
• カウンタの値がオーバフローしたときは H’00 に戻って,動作を
継続する.
• カウンタの値はポート B に出力する.
• カウンタ動作中に P67 が 0 になったときは,カウンタを停止する.
• カウンタ停止中に,P62 が 0 になったときはカウンタの動作を再
開する.
• カウンタ動作中は P60 を 0 にし,P61 を 1 にする.
• カウンタ停止中は P61 を 0 にし,P60 を 1 にする.
プログラムリスト 3:
. CPU
300 HA
MSTCR
P6DDR
. EQU
. EQU
H ’ EE01C ; ス タ ン バ イ 機 能 の 制 御
H ’ EE005
PBDDR
P6DR
PBDR
. EQU
. EQU
. EQU
H ’ EE00A
H ’ FFFD5 ; マ イ コ ン ボ ー ド 上
H ’ FFFDA ; VPE <-> I / O board VP2
1
2
3
4
5
6
. SECTION PROG , CODE , LOCATE =H ’00000
. DATA . L RESET
7
8
9
10
11
RESET :
. SECTION P , CODE , LOCATE =H ’00800
MOV . L
#H ’ FFFF20 , ER7 ; S P 設 定
MOV . B
#H ’ F8 , R0L
13
MOV . B
MOV . B
R0L , @MSTCR
#H ’03 , R0L ; ポ ー ト 6 入 出 力 設 定
14
MOV . B
R0L , @P6DDR ; P60 , P61 出 力
12
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
MOV . B
MOV . B
15
16
17
18
19
#H ’ FF , R0L ; 出 力 ポ ー ト 設 定
R0L , @PBDDR ; PB 出 力
;初 期 設 定
MOV . B
#H ’00 , R0L ; カ ウ ン タ 初 期 値
【 1 】 ; P60 1
【 2 】 ; P61 1
20
21
;ス タ ー ト 待 ち
22
WAIT :
24
MOV . B
R0L , @PBDR ; カ ウ ン タ 出 力
【 3 】 ; P62 check
【4 】
25
【 5 】 ; P60 0
26
【 2 】 ; P61 1
23
27
28
29
;カ ウ ン ト 動 作
COUNT0 : MOV . W
COUNT1 : JSR
#D ’100 , R1 ;1 ミ リ 秒 × 1 0 0
@TIMER ;1 ミ リ 秒 タ イ マ ー
30
【 6 】 ; P67 check
31
【7 】
32
DEC . W
#1 , R1 ; 残 り 回 数
BNE
COUNT1
【8 】; カ ウ ン ト ア ッ プ
33
34
35
36
37
STOP :
MOV . B
R0L , @PBDR ; カ ウ ン タ 出 力
【9 】
【 1 】 ; P60 1
38
【 1 0 】 ; P61 0
39
JMP
40
41
42
43
44
TIMER1 : NOP ; 時 間 調 整
DEC . L #1 , ER6 ; E R 6 デ ク リ メ ン ト
47
48
. END
46
@WAIT
;1 ミ リ 秒 タ イ マ ー サ ブ ル ー チ ン
TIMER : PUSH . L ER6
MOV . L
#D ’3125 , ER6 ; タ イ マ ー セ ッ ト
BNE
POP . L
RTS
45
6
TIMER1 ; E R 6 は 0 で な い
ER6
リスト 3 中の【1】から【10】の空白箇所を埋めるのに適切な命令を選
択肢(ア)から(ホ)の中から選び,その記号を解答用紙に記入せよ.
なお,試験問題で与えられていない仕様に関しては,リスト 3 と矛盾
しない範囲内において適宜判断するものとする.
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
選択肢:
(ア) BCLR #0,@P6DR
(イ) BCLR #1,@P6DR
(ウ) BCLR #2,@P6DR
(エ) BCLR #7,@P6DR
(オ) BEQ COUNT0
(カ) BEQ COUNT1
(キ) BEQ STOP
(ク) BEQ WAIT
(ケ) BNE COUNT0
(コ) BNE COUNT1
(サ) BNE STOP
(シ) BNE WAIT
(ス) BRA COUNT0
(セ) BRA COUNT1
(ソ) BRA STOP
(タ) BRA WAIT
(チ) BSET #0,@P6DR
(ツ) BSET #1,@P6DR
(テ) BSET #2,@P6DR
(ト) BSET #7,@P6DR
(ナ) BTST #0,@P6DR
(二) BTST #1,@P6DR
(ヌ) BTST #2,@P6DR
(ネ) BTST #7,@P6DR
(ノ) DEC.B R0L
(ハ) DEC.W #1,R1
(ヒ) DEC.W #2,R1
(フ) INC.B R0L
(へ) INC.W #1,R1
(ホ) INC.W #2,R1
7
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
付録:アセンブリ言語命令抜粋
本付録では H8 マイコンのアセンブリ言語の命令の抜粋を載せる.
最初に表 1 にアドレッシングモードを示す.
名称
表 1: アドレッシングモード
記号
記述例
レジスタ直接
Rn
MOV.B R0L,R0H
イミディエイト
#xx
MOB.B #H’00,R0L
絶対
@aa
MOV.B R0L,@H’EE009
レジスタ間接
ディスプレースメント付き
@ERn
@(d,ERn)
MOV.B @ER1,R0H
MOV.B @(HENKAN,ER1),R0L
レジスタ間接
プリデクリメント・レジス
@-ERn
MOV.W R0,@-ER7
@ERn+
MOV.L @ER4+,ER0
@(d,PC)
BNE TIMER
@@aa
JMP @@H’10
タ間接
ポストインクリメント・レ
ジスタ間接
プログラムカウンタ相対
メモリ間接
8
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
9
表 2 に各命令で使用可能なアドレッシングモードの一覧を示す.アドレッ
シングモードの記号は表 1 に示したものである.
表 2: 各命令で使用可能なアドレッシングモード
命令
MOV
POP
PUSH
ADD
CMP
SUB
INC
DEC
AND
OR
XOR
NOT
シフト命令
ビット操作命令
Bcc, BSR
JMP, JSR
RTS
RTE
LDC
#xx
Rn
@ERn
@(d,ERn)
@ERn+
@-ERn
@aa
@(d,PC)
@@aa
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
W
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
W
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
B
–
–
–
–
B
–
–
–
W
–
–
–
W
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
10
表 3 に命令実行によるフラグの変化を示す.表中, は命令実行結果にし
たがってフラグが変化することを,0 は常に 0 になることを,– は命令実行
による変化がないことを示す.
表 3: 命令実行によるフラグの変化
命令
N Z
MOV, POP, PUSH
V
C
0
–
ADD, SUB, CMP
INC, DEC
–
AND, OR, XOR, NOT
0
–
SHAL
SHAR, SHLL, SHLR, ROTL, ROTR
0
BSET, BCLR, BNOT
–
BTST
–
Bcc, JMP, BSR, JSR, RTS
–
–
–
–
–
–
–
–
–
–
–
–
–
LDC
RTE
NOP
以下に各種命令の概要を示す.レジスタ d はディスティネーションオペラ
ンドのレジスタ,レジスタ s はソースオペランドのレジスタを表わす.
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
11
表 4: アセンブリ言語命令の概要
命令
サイズ
動作
MOV
B/W/L
レジスタ s→ レジスタ d
記述例
メモリ → レジスタ d
MOV.B R0L,R0H
MOV.B #H’5F,R0L
MOV.B @ER4,R0L
レジスタ s→ メモリ
MOV.B R0L,@SW
データ → レジスタ d
PUSH
W/L
レジスタ → スタック
PUSH.L ER0
POP
W/L
スタック → レジスタ
POP.L ER6
ADD
B/W/L
レジスタ d + レジスタ s → レジスタ d
レジスタ d + データ → レジスタ d
SUB
INC
DEC
CMP
B/W/L
レジスタ d − レジスタ s → レジスタ
SUB.B R1L,R2L
W/L
レジスタ d − データ → レジスタ d
SUB.L #1,ER6
B
W/L
レジスタ +1 → レジスタ
レジスタ + 1 → レジスタ
INC.B R0H
INC.L #1,ER1
レジスタ + 2 → レジスタ
INC.L #2,ER0
レジスタ − 1 → レジスタ
レジスタ − 1 → レジスタ
DEC.B R0L
DEC.L #1,ER6
レジスタ − 2 → レジスタ
DEC.L #2,ER5
レジスタ d − レジスタ s
CMP.B R0H,R0L
CMP.W #H’FFFF,E0
B
W/L
B/W/L
レジスタ − データ
NEG
B/W/L
0 − レジスタ → レジスタ
AND
B/W/L
レジスタ d ∧ レジスタ s → レジスタ d
データ ∧ レジスタ d → レジスタ d
OR
XOR
ADD.B R1L,R2L
ADD.W #D’60000,R0
B/W/L
B/W/L
レジスタ d ∨ レジスタ s → レジスタ d
NEG.B R0L
AND.W R1,R0
AND.B #H’0F,R1L
OR.B R1H,R1L
データ ∨ レジスタ d → レジスタ d
OR.B #H’F0,R0H
レジスタ d ⊕ レジスタ s → レジスタ d
XOR.B R0H,R0L
データ ⊕ レジスタ d → レジスタ d
XOR.B #H’FF,R0L
NOT
B/W/L
¬ レジスタ → レジスタ
SHLL
B/W/L
レジスタの中身を論理左シフトする
SHLL.B R1H
NOT.W E0
SHLR
B/W/L
レジスタの中身を論理右シフトする
SHLR.W E1
ROTL
B/W/L
レジスタの中身を左ローテートする
ROTL.B R0L
ROTR
B/W/L
レジスタの中身を右ローテートする
ROTR.B R0H
SHAL
B/W/L
レジスタの中身を算術左シフトする
SHAL.W R0
SHAR
B/W/L
レジスタの中身を算術右シフトする
SHAR.L ER1
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
12
表 5: ビット操作命令
命令
動作
記述例
BSET
レジスタまたはメモリ内の 1 ビットを 1 にする
BSET #0,R0H
BCLR
レジスタまたはメモリ内の 1 ビットを 0 にする
BCLR #1,@P6DR
BNOT
レジスタまたはメモリ内の 1 ビットを反転する
BNOT #5,@H’FFFC6
BTST
レジスタまたはメモリ内の 1 ビットをテストする
BTST #7,R0L
操作対象は 8 ビットレジスタおよび 8 ビットデータに限る.
表 6: 条件付き分岐命令(Bcc)
分岐条件
(フラグ)
命令
BNE
等しくない
記述例
Z=0
BNE TIMER
BEQ
等しい
Z=1
BEQ LOOP
BCC
以上(符号なし)
C=0
BCC L1
BCS
未満(符号なし)
C=1
BCS S5
BHI
超過(符号なし)
C ∨Z =0
BHI S1 4
BLS
以下(符号なし)
C ∨Z =1
BLS SW1
BGE
以上(符号付き)
N ⊕V =0
BGE LOP
BLT
未満(符号付き)
N ⊕V =1
BLT AD
BGT
超過(符号付き)
Z ∨ (N ⊕ V ) = 0
BGT CHK
BLE
以下(符号付き)
Z ∨ (N ⊕ V ) = 1
BLE RT
命令
表 7: 無条件分岐命令
動作
BRA
無条件で分岐
BRA LOOP
JMP
無条件で分岐
JMP @LOOP
BSR
サブルーチンへ分岐
BSR TIMER
JSR
サブルーチンへ分岐
JSR @TIMER
RTS
サブルーチンから戻る
記述例
RTS
2014 年度 2J マイコン後期中間試験問題 c 大豆生田利章 2014
命令
サイズ
表 8: システム制御命令
動作
LDC
B
レジスタ → CCR
データ → CCR
13
記述例
LDC.B #0,CCR
W
メモリ → CCR
RTE
–
例外処理ルーチンから復帰する
RTE
NOP
–
何もしない
NOP
表 9 にアセンブラ制御命令の例を示す.
命令
.CPU
.SECTION
.EQU
.BEQU
.RES
.DATA
.END
.EXPORT
表 9: アセンブラ制御命令の例
機能
記述例
使用 CPU の指定
セクションの宣言
.CPU 300HA
.SECTION P,CODE,LOCATE=H’00100
シンボル値の設定
P6DR .EQU H’FFFD5
ビットデータ名の設定
D SET .BEQU 2,P6DR
整数データ領域確保
整数データ確保
.RES.B 1
.DATA.B H’0A
ソースプログラムの終了
.END
外部定義シンボルの宣言
.EXPORT timer
以下余白(メモ用)