跳到主要内容

東北大学 工学研究科 電気・情報系 2016年8月実施 専門科目 問題4 計算機1

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

日本語版

各番地に整数が格納されるメモリと,11 つの整数レジスタ AA を持つ計算機を考える。Fig. 4(a) の命令を用いて,以下の問に答えよ。

(1) Fig. 4(b) のプログラム(命令の列)を実行した後に,レジスタ AA に格納されている値は何か。

(2) メモリの 8080 番地に格納されている整数 mm と,メモリの 8181 番地に格納されている整数 nn との差 mnm-n を計算し,mn0m-n\ge0 ならば mnm-n を,mn<0m-n<0 ならば 00 をメモリの 8282 番地に格納して停止するプログラムを書け。8282 番地以外のメモリの値を変更してはならない。

(3) Fig. 4(c) は,メモリの 8080 番地に格納されている正の整数 mm を,メモリの 8181 番地に格納されている正の整数 nn で割ったときの商をメモリの 8282 番地に,剰余を 8383 番地にそれぞれ格納して停止するプログラムである。Fig. 4(c) にある w,x\boxed{\mathrm w},\boxed{\mathrm x} に対する適切な整数,および y,z\boxed{\mathrm y},\boxed{\mathrm z} に対する適切な命令をそれぞれ答えよ。

Fig. 4(a)

命令動作
SET iAA に整数 ii を格納する。
LDR iメモリの ii 番地に格納されている値を AA に格納する。
STR iメモリの ii 番地に,AA の値を格納する。
SUB iAA の値から,メモリの ii 番地に格納されている値を減算し,結果を AA に格納する。
INCRAA の値に 11 を足し,結果を AA に格納する。
BLTZAA の値が 00 未満ならば,次の命令をスキップする。
BLA i先頭の命令から数えて ii 番目の命令にジャンプする(ただし先頭の命令を 11 番目と数える)。
HALTプログラムの実行を停止する。

Fig. 4(b)

1: SET 10
2: STR 80
3: INCR
4: SUB 80
5: BLTZ
6: BLA 8
7: LDR 80
8: HALT

Fig. 4(c)

 1: SET 0
2: STR 82
3: LDR 80
4: SUB 81
5: BLTZ
6: BLA [w]
7: BLA [x]
8: STR 80
9: LDR 82
10: [y]
11: STR 82
12: BLA 3
13: [z]
14: STR 83
15: HALT

题目描述

计算机有一个整数寄存器 AA 和按地址存储整数的内存 MM。指令语义如下:

指令操作
SET iAiA\gets i
LDR iAM[i]A\gets M[i]
STR iM[i]AM[i]\gets A
SUB iAAM[i]A\gets A-M[i]
INCRAA+1A\gets A+1
BLTZA<0A<0,跳过紧接的一条指令
BLA i跳到第 ii 条指令,从 11 开始编号
HALT停止
  1. 下列程序结束时 AA 为多少?
1: SET 10
2: STR 80
3: INCR
4: SUB 80
5: BLTZ
6: BLA 8
7: LDR 80
8: HALT
  1. 编程计算 M[82]=max{M[80]M[81],0}M[82]=\max\{M[80]-M[81],0\} 后停止,不能修改其他内存位置。
  2. 下列程序把正整数 M[80]M[80] 除以正整数 M[81]M[81],商存到 M[82]M[82]、余数存到 M[83]M[83]。填写整数 w,xw,x 和指令 y,zy,z
 1: SET 0
2: STR 82
3: LDR 80
4: SUB 81
5: BLTZ
6: BLA w
7: BLA x
8: STR 80
9: LDR 82
10: y
11: STR 82
12: BLA 3
13: z
14: STR 83
15: HALT

Kai

(1)

前四步使 AA 依次为 10,10,11,110,10,11,1,且 M[80]=10M[80]=10。因 A=10A=1\ge0,第 55 条不跳过下一条,随后跳到第 88 条停止,所以

A=1.\boxed{A=1.}

(2)

1: LDR 80
2: SUB 81
3: BLTZ
4: BLA 6
5: SET 0
6: STR 82
7: HALT

非负差值直接存储;负差值跳过第 44 条,并先置零。仅 M[82]M[82] 被修改。

(3)

w=8,x=13,y=INCR,z=LDR 80.\boxed{w=8,\qquad x=13,\qquad y=\mathrm{INCR},\qquad z=\mathrm{LDR\ 80}.}

试减结果非负时,跳到第 88 条保存新余量,并把商加一;结果负时,跳到第 1313 条取回尚未试减的余量,作为余数。若原被除数为 mm、除数为 nn,每次循环保持

m=nM[82]+M[80],M[80]0.m=n\,M[82]+M[80],\qquad M[80]\ge0.

退出时 M[80]<nM[80]<n,因此所存商和余数满足整数除法定义。