情報の授業
サイバースペースに飛び込もう- CPU/機械語と二進数 –・コンピュータはどうして動くの・CPUの構造とプログラム
・どうして二進数を勉強するの映画やアニメで近未来のサイバースペースを扱っているものは、何か1と0がいっぱいある画面が出てきませんか。実はこの0と1だけがコンピュータの中の世界にあるものです。
この授業ではコンピュータのこの0と1の世界は何かを⾒ていきましょう。

Go.Ota1

コンピュータはどうして動くの(1)?
いものコンピュータに近以外かもしれませんが、コンピュータの動きに近いものはオルゴールです。オルゴールは円筒(シリンダー)に突起があって、それが回って櫛状の⾦属版を弾いて⾳がでますね。

左の写真はディスクオルゴー
ルといって、円柱の盤を使います。盤には、やはり突起がありますが、盤自体を交換することができます。また、右の図は円筒を板のようにしたオルゴールです。これでは1回しか演奏できませんが、板を動かすと曲が流れますね。
ソース:ディスクオルゴール www.youtube.com/watch?v=wD2NkvlSdnY

2

コンピュータはどうして動くの(2)?

コンピュータの円筒

オルゴールの円筒に対応したものはコンピュータではメモリになります。
メモリはオン・オフの状態を保持する小さなスイッチの集まりです。
実際のメモリを拡⼤して⾒ると、小さなスイッチがびっしり入っています。小さなメモリの中に数十億から数百億個入っています。

メモリを拡⼤して⾒ると3

コンピュータはどうして動くの(3)?
コンピュータの櫛(くし)の⾦属の板

オルゴールの櫛状の⾦属の板に対応するものは、コンピュータではCPU(シーピーユー:中央処理装置)になり、これがコンピュータの脳になります。
CPUはオルゴールと同じように、メモリの中を1⾏づつ、読み込んでいて、オルゴールが⾳楽を演奏するように、そのオン・オフのパターンに対応した動作をします。パターンはいろいろあって、基本は四則演算ですが、例えばキーボードのどれが押されたか取り込むような動作パターンもあります。
前に⽰したディスクオルゴールが盤を変更すると演奏する⾳楽が変わるよ
うに、スイッチのオン・オフを変更することでメモリ上のパターンの集まりを変更することができます。あるパターンではCPUがワープロと動作したり、また他のパターンでは映画を再生したりします。
プログラムは、CPUにある特定の仕事をさせるための、このメモリ上のパターンということになります。

4

コンピュータはどうして動くの(4)?

プログラムの入れ替え=
ハードディスクは磁気でスイッチのON/OFFを記録

パソコンの中には、今まで説明してきたCPUとメモリがあります。また、それ以外に重要な部品としてハードディスクがあります。ハード
ディスクにはいろいろなプログラムのパターンが磁気的にオン・オフで記録されていて、必要な時にメモリにコピーされます。
パソコンで例えば、Wordのプログラムを起動すると、ワードのプログラムがメモリ上にコピーされて、それをCPUが読み取って仕事をすることになります。
5

電卓を使うcalcと入⼒してOK

ここで右クリックする。
標準を選択する

6

プログラムはどう作る(1)?

人間が計算するコンピュータのCPUがメモリのパターンに従って動くことを今まで説明してきました。
では、望みにあった仕事をCPUにさせるためにメモリのパターン=プログラムはどのように作るのでしょうか?
一番簡単にコンピュータ動作させるために、電卓を使ってみましょう。
上図のように、4つのボタンを押していくと、3と答えが出ます。今ではあたりまえのことですね。

7

プログラムはどう作る(2)?

人間がプログラム的に操作する。
M箱の中をクリヤー(0)する。

M箱

M箱の中を表⽰する。

表⽰されている数

表⽰されている数をM箱に入れる。
表⽰されている数をM箱に足す。
表⽰されている数をM箱から引く。
操作

表示されている数

M箱の中身

12
3

133

もう少し、コンピュータのプログラム的に電卓を操作してみましょう。
電卓は直接⾒えませんが、Mという一時的に数字を記録できる箱(Scratchの変数と同等)を内部に持っています、Mxというキーでこの箱に対して操作できます。
上表のように操作してみましょう。このM箱を使って、前と同様に1+2の結果を得ることができます。今は人間が手動で足し算の操作をしましたが、8同様なことを自動的にCPUにやらせるものがプログラムになります。

プログラムはどう作る(3)?

CPUの構造とプログラム。

CPU
演算処理部
命令処理部

メモリ
GR1に1を入れる。
GR2に2を入れる。
GR1にGR2の値を加える

では、先ほど電卓の操作を自動的に⾏うプログラムを考えます。
まず、CPUの中には電卓のM箱と同じように計算結果などを記録するレジスタという箱があります。また命令処理部はメモリの中を読み取ってどのように動くか判断します。
上記のようなメモリのパターンがあると、最終的にGR1に3が自動的にはいります。

9

プログラムはどう作る(4)?

アドレス

マシン語(機械語)
レジスタに数値を入れる
1 -> GR1(0001)
レジスタに数値を入れる
2(10) -> GR2(0010)
レジスタaにレジスタbを加える
GR1(01)+GR2(10) -> GR1

メモリのパターンになっているプログラムをもう少し細かくみてみましょう。
このプログラムはCOMET2というCPUのもので、CPUという機械が理解できるものでマシン語(機械語)と呼ばれています。どんなコンピュータでも、結局動いている時はこのマシン語だけが理解できます。
また、このCPUの場合は、メモリを16ビットごとに区切り、0から番号を振ってワードという単位で管理しています。個々のマシン語の命令は1ワード又は2ワードの中に入っています。そしてCPUはメモリ上のマシン語を1個づつ読み取って実⾏していきます。この番号をアドレスと⾔っています。
このようなコンピュータはプログラム内蔵方式でありノイマン型コンピュータと呼んでいます。世の中にある、ほとんどすべてのコンピュータは小さなスマートフォンからスーパーコンピュータまで、すべてこのノイ10マン型コンピュータです。

プログラムはどう作る(5)?
アセンブラ
LAD GR1,1
LAD GR2,2
ADDA GR1,GR2

アセンブラとマシン語
マシン語

コンピュータを動かすためには、0と1のパターンのマシン語のプログラムを作る必要があります。これって難しいと思いません
か?
そこで、少しわかりやすいアセンブラ⾔語というのが考えられました。マシン語をある程度、意味のわかる⾔葉におきかえたものです。マシン語に比べるとずっとプログラミングしやすくなりました。
ただし、アセンブラ⾔語のままだとCPUは理解できないので、ア
センブラ⾔語の文字からマシン語の0,1に変換する必要があります。この変換自体をコンピュータにさせることにして、その変換するプログラムをアセンブラーと呼んでいます。
アセンブラ⾔語の1⾏はマシン語の一つの命令に対応し、CPUに一つの動作を指定することになります。
11

アセンブラ・プログラミング(1)アセンブラの命令(1)

命令

一般形式

意味

例

数値を入れる

LAD レジスタ,数値

数値を指定したレジス
タに入れる

LAD GR1,7

加算

ADDA レジスタ1, レジスタ2

レジスタ1にレジスタ2を加える

ADDA GR1, GR2

減算

SUBAレジスタ1, レジスタ2

レジスタ1からレジスタ2を引く

SUBA GR0, GR2

RET

授業ではプログラムの RET終了を示します

ADR0 STARTLAD GR1,1
LAD GR2,2
ADDA GR1,GR2
RET
END

これからアセンブラによるプログラムを学習していきます。覚える命令の数は全部で10個ですが、始めに上の4つを使います。
また、実際のプログラムは左のようにSTARTとENDでくくってつくります。

ソース:独⽴⾏政法人 情報処理推進機構 情報処理技術者試験 出題範囲

12

アセンブラ・プログラミング(2) 開発環境(デバッガー)

CASL II シミュレーター
https://www.officedaytime.com/dcaslj/

プログラムを入力する領域

レジスタの内容

アセンブル、操作に対するメッセージ表示(エラーメッ
セージ含む)
メモリの内容13

アセンブラ・プログラミング(2) 開発環境(デバッガー)
演習1
プログラムを入⼒して実⾏してみよう。

アセンブラのプログラムをマシン語に変換する。
プログラムの初めから、1⾏づつ実⾏する。
演習2
SUBA命令を使って5-3を計算するようにプログラムを変更してみましょう
14アセンブラ・プログラミング(3)アセンブラの命令(2) データを使う

命令

一般形式

意味

例

メモリの値を入れる

LA レジスタ, アドレス

指定したアドレスの内容を指定したレジスタに入れる

LA GR1, DATA1

メモリへ値を入れる

ST レジスタ1, アドレス 指定したレジスタの内容を指定したアドレスに入れる

ST GR1, 7

加算ADDA レジスタ, アドレ 指定したアドレスの内容を指定ス
したレジスタに加える

ADDA GR1, DATA1

減算

SUB Aレジスタ, アドレス

指定したアドレスの内容を指定したレジスタから引く

SUBA GR0, 7

機能

一般形式

意味

例

メモリへの数値の確保

DC 数値

メモリを確保し、値をいれてやく

DC 3

ADR0

START
LD GR1,7
ADDA GR1,8
ST GR1,9
RET
DC 3
DC 4
DC 0END

今までは、レジスタだけで計算していましたが、メモリにあるデータを処理することを考えてみます。左のプログ
ラムはメモリに入ってる2つの値を計算して、別のメモリに入れるプログラムです。
次のスライドではメモリの中をもっと細かくみていきましょう。

15

アセンブラ・プログラミング(4)

データを使うプログラム部

データ部

実際にプログラムのメモリの状態をみてみましょう。まず、メモリの中では特にプログラムとデータがわかれているわけでは無く、混在しています。
そしてDCで定義した数値は、それぞれアドレスの7,8,9番地のメモリの中に格納されています。
今回のプログラムでは、アドレスを指定して、その中に入っている数値を処理の対象にしています。

違いは?
LD GR1,7
LDA GR1,716

プログラムはどう作る(5)?
ADR0STARTLD GR1,7
ADDA GR1,8
ST GR1,9RET
DC 3
DC 4
DC 0END

番地の代わりにラベルに使う
ADR0

START
LD GR1,DATA1ADDA GR1,DATA2ST GR1,DATA3
RET
アドレスの数値の番地の代わりにラ DATA1 DC 3
ベルを使う
DATA2 DC 4
DATA3 DC 0
END

プログラムの中でメモリのアドレスを指定することで、そこに記録されている数値を扱えます。但し、メモリのアドレスが何番になるかなかなかわかりませんね。又はプログラムを変更するとずれてしまいます。
そこでアセンブラ⾔語では、ラベルという機能をサポートしています。
ラベル(名前)をプログラムの各⾏の初めにつけているとプログラムの中でそのラベルを実際のアドレスの数値の代わりに使えます。
上のプログラムではDATA1, DATA2, DATA3はそれぞれアドレスの7,8,9番地の代わりに使⽤できます。但しラベルはプログラム上の便宜的なもので、メモリに展開されたマシン語はどちらも同じになります。

17

プログラムはどう作る(5)?
ADR0

START
LD GR1,DATA1ADDA GR1,DATA2ST GR1,DATA3RET
DATA1 DC 3
DATA2 DC 4
DATA3 DC 0
END

番地の代わりにラベルに使う

演習3
プログラムを入⼒して実⾏してみよう。
1⾏づつ実⾏して、レジスタやメモリの内容がどのように変わるか確認してみよう。

10進の表⽰の方がわかりやすいかも

データの入っているメモリの内容を表⽰する

18

ワンポイントICT: 2進数

お話

コンピュータはメモリのスイッチのオンオフの情報しかありません。どうやって数値を表しているのでしょうか?
コンピュータではスイッチのオンを1, オフを0としてそれらが表す二進数として数値を扱います

10進数の意味 1956は物が何個ありますか?
19581000 x 1100 x 910 x 51x8= 1000 + 900 + 50 +8 =1958

2進数の意味 1011(スイッチが●○ ● ●の状態) は物が何個ありますか?
●○●●

10118x14x02x11x1= 8 + 0 + 2 + 1 = 13

日常にも10進数以外のn進数があります。代表的なものが時間で60進数を使っています、例えばビデオの時間など1:15:25のような表⽰です。これを秒に換算する時
19は、3600*1 + 15* 60 + 25 と計算しますね。

どうして高校生は情報で二進数をやるのコンピュータが二進数しか分からないから数って何? 数の表現
01

赤丸はいくつある?

0123456789

10進数そろばん

12(10)

0123456789ABCDEF

2進数そろばん1100(2)
16進数そろばん

C(16)

テ

ワンポイントICT: 16進数/10進数/2進数対応表
16進数 10進数

2進数

16進数

10進数

2進数

値

ビット数

値

4ビット

1011

値

値

ビット数

値

00

4ビット

0000

B

111

10001

C121100

220010D

131101330011

E141110440100F1511115501011016

66011000～FF0～255 8ビット

770111881000

0000～
FFFF

0 ～
65536

991001

A

101010

8ビット

00010000
00000000～11111111

16ビット 0000000000000000～
1111111111111111

22電卓を使って数を確認しよう:準備

Windowsのコマンドプログラム(CGI:テキストベースの操作)を使うた
めに、[コマンドプロンプト]又[ファイル名を指定して実⾏]を使ってcalc⏎

で電卓を起動する

ここにマウスカーソル持っていったから右クリック。

[表⽰][プログラマ]を選択。

電卓を使って数を確認しよう

Windowsのコマンドプログラム(CGI:テキストベースの操作)を使うた
めに、[コマンドプロンプト]又[ファイル名を指定して実⾏]を使って常にビット:コンピュータの内部状態(二進数で表⽰)

ここで表⽰と入⼒を切り替えれる。

テ

電卓を使って数値表現を変更しよう
10011100(2進数)(10進数)

11100110(2進数)(16進数)

93(10進数)(2進数)

CF(16進数)(2進数)

学習ノート p67[3]電卓を使って数値表現を変更しよう(回答)10011100(2進数)xxxxxxxx
163184212426
811100110(2進数)E 6156(10進数)

93(10進数)
・2で割っていく・上記の数で割る
CF(16進数)

1011101(2進数)

学習ノート p67[3]E6(16進数)

11001111(2進数)

2進数の4ケタと、16進数の1桁は対応

テコンピュータの情報の単位(1)テ

情報量の最小単位をビットといい，2進数の1桁に相当する。
また8ビットをまとめて1バイトという。
8個のスイッチが一組で1バイト。
一個一個のスイッチが1ビット。

学習ノート p62[3]コンピュータの情報の単位(2)ビット(bit:b)

最小の単位、2進数の1桁(通信速度の単位)

バイト(Byte:B)

8bit

メモリ・要領の基本単位(半角文字のサイズ)

キロバイト(KB)

1024B(ファイルなどの⼤きさ)

メガバイト(MB)1024KB(ファイルなどの⼤きさ)ギガバイト(GB)1024MB(メモリ/ディスク/通信の容量)

テラバイト(TB)

1024GB(⼤きなディスクの容量)

学習ノート p63[7][8]テ

1と0がいっぱいある画面が意味は分かりましたか、これはコンピュータの中にあるデータとプログラムを⽰すものでした。
もう一回あります。
29