コンテンツにスキップ

宿題:特徴と分類#

特徴と分類#宿題

Homework 約30分 答え

次のC言語プログラムを等価なRAマシンプログラムにコンパイルせよ.各変数(ansx等)とRAマシン上のメモリセル番号(12等)の対応は自由に決めて良い.

void main() {
    int ans = 0;
    int x = 7;
    if (x > 5)
        ans = 10;
    else
        ans = 20;
    printf("%d", ans);
}

以下の書式をコピーして回答せよ.

  load   #0
  store  2
  ???
labelx:
  load   ???
  ???

回答フォーム

Answer

// c(1): x
// c(2): ans

  load   #0      // int ans = 0;
  store  2
  load   #7      // int x = 7;
  store  1
  load   1       // if (x > 5)    if (x - 5 > 0)
  sub    #5
  jgtz   iftrue
  jump   iffalse
iftrue:
  load   #10     // ans = 10
  store  2
  jump   ifend
iffalse:
  load   #20     // ans = 20
  store  2
  jump   ifend
ifend:
  write  2       // printf("%d", ans);
  halt

Q&A#

誤字#

  • 命令が採用するRAマシンなど~
  • ~パラダイムと 読んでいる 呼んでいる

thx

Q. 解答の正しさを確認する方法は?RAマシンへのコンパイル方法は?#

確認方法はありません.RAマシンは理論的なモデルなので実際のコンパイラがありません.load store 等の命令コードも仮想のものです.頭の中でシミュレートしてください.あえて言えば,ブラウザで動くCコンパイラ等で試すと良いです.

Q. RAマシンを聞きながら1年後期のCASL IIを思い出した#

CASL IIの計算モデルはRAマシンです.前回講義の後半で述べていたRAマシンプログラムは,CASL IIのおさらいのような内容でした.

スマホやPCを含め,現代のほぼ全てのコンピュータはノイマン型です.RAマシンはノイマン型コンピュータを抽象化した計算モデルなので,スマホやPCはRAマシンの一種だと言えます.

「RAマシン=コンピュータの核のみを取り出した概念・モデル」だと考えるとよいです.

Q. RAマシンの説明はもっと簡単でもよいかも#

初回なので復習がてらのゆるい話が良いと考えてます.ただ,「RAマシン ≒ CASL II」という話は伝えるべきかもしれない.

Q. ノイマンの名言は「俺より」ではなく「俺の次に」賢いやつができた,だったと思う#

そのとおりです.ただ,実際にノイマンが言ったという証拠はないらしいです.

Q. 宿題を複数回投稿してよいか?#

よいです.最新の解答を採用します.講義の概要#宿題に追記しておきます.

Q. 昼の後なので眠くなる#

工夫されたし.可能な限り協力するので.

Q. フォントサイズは250%か?300%か?(アンケート)#

回答はほぼ半々くらいでした.250%で進めます.見にくい場合はZoomを使ってください.

Q. 「C言語のポインタは間接アドレス指定にあたる」という説明がよくわからない.直接アドレス指定ではないか?#

以下のC言語プログラムを考えるとよいです.

i =  1; // load #1 → store i (定数指定.load対象の値は単なる定数であり,メモリを参照すらしない)
i =  a; // load  a → store i (直接アドレス指定.load対象のメモリ上の値を「直接的に」指定)
i = *a; // load *a → store i (間接アドレス指定.load対象のメモリ上の値を「間接的に」指定)

Q. 大学院入試はどのくらい勉強すべきなのか?#

研究室の学生に聞いてみました.

勉強期間は1ヶ月程度でした。過去問は15年分解き、やり直しや復習もしています。
僕も院試1ヵ月前からスタートして,1日2,3時間勉強を週4,5日くらい続けてたと思います.
1日3-4時間を週5で1か月程度続けました.
期間は1ヶ月と一週間ほど
過去問をひたすら周回して復習してました
1日4時間、週2日を約1ヶ月。過去問を8年分周回してました。
TOEICはB3の夏休みから毎日30分くらい勉強して,B3の1月にとりました.情報の問題は4月~6月は隙間時間に院試科目の授業資料を見直して,過去問はみんなと同じように1カ月で20年分くらいを2~3周しました.

Q. 言語の抽象度の高さとコンパイル速度に関係はあるのか?#

あります.

  • 抽象度の低い概念「円形」を低レベル言語で説明するのは簡単
  • 抽象度の高い概念「大学」を低レベル言語で説明するのは難しい

もっといえば高機能な言語ほどコンパイルは大変です.例えば型あり言語の場合,コンパイル時に様々な型チェック(int + charはNG等)を行うのでその速度は遅くなりがちです.

Q. 汎用レジスタの数を増やさない理由は何か?#

遅くなるから.互換性を損なうから.

この記事が面白いかも.なぜCPUメーカはレジスタの数を増やさず、最先端の64ビットCPUでも16個しかないのですか?