1950年代、j.フォン・ノイマンは計算の手順を記憶装置に記憶させ、手順を順次とりだして計算していくプログラム記憶(Stored Program)方式を提案した。現在もこのノイマン型がコンピュータの基本となっている。
このころの論理素子は真空管であったが、その後トランジスタ、IC、LSI、超LSIと進化してきている。
1971年インテルから4ビットマイクロプロセッサ4004(MCS-4)が発表された。その後
8080、8086と進化してきた。X86と呼ばれるプロセッサである。そのほかにモトローラのM6800などがあった。
年代別
1971年 | 4ビット | 4004 |
1973年 | 8ビット | 8080 |
1977年 | 16ビット | 8086 |
1980年代 | 32ビット |
アドレスを指定(入力)すると、データが出てくる構造になっている。
アドレスを与えてからデータが出てくるまでの時間をアクセスタイムという。性能を示す重要な要素である。 従来は磁気コアが使われていた。そのため主記憶のことをコアということがある。 現在は半導体が使われている。 メモリ、RAMなどの呼称がある。 RAM(Random Access Memory)とROM(Read Only Memory)の2種類がある。RAMは自由に読み書きができるメモリである。ROMは読み取り専用のメモリで、通常は不揮発性であり、電源を切っても記憶は消えない。 RAMにはSRAMとDRAMがある。
演算装置は加算器と結果がはいるアキュムレータ(レジスタ)などで構成される。 制御装置はクロックに同期して全体を制御する。次に実行する命令の番地を保持するプログラムカウンタを内蔵する。
ノイマン型コンピュータの動作は非常に単純。 命令のフェッチと実行を繰り返すだけ。 ただし、これを高速に実行する。1秒間に100万回以上とか。 これを見ている人はコンピュータが同時にいろいろなことをやってくれている ように見える。1種の手品のようなもので、実際はその瞬間に行っているのは1つのことだけ。
フェッチしたとき、つぎの命令をとりだせるよう記憶装置への ポインタ(Addressを持つ)が+1(インクリメント)される。 このポインタのことを通常プログラムカウンタ(インストラクションポインタ)という。 記憶装置には命令(Instruction)が蓄えられている。これは有用な動作を コンピュータがするように人間がプログラムしたもの。
基本はノイマン型だが、性能向上のために加えられてきた点をあげる。 1.クロック周波数のUP 実行速度が生命なのだが、これはクロックに同期している。クロックが倍になれば 性能も倍になる(と一般的には言える)。クロック周波数は年々UPしている。 より高いクロックに耐えるIC(半導体回路)の開発ということもできる。 2.パイプライン方式 プログラムを実行している間に並行してつぎの命令をフェッチ(プリフェッチ)している。これをパイプライン方式という。 3.割り込み 緊急の事象(Event)が発生した場合には、現在実行中のプログラムを一時中断してそ の事象の処理ためのプログラムを走らせることができる。もどり番地を保持するため にスタックポインタが使われる。 4.キャッシュ CPUと同じチップ上にRAMを持ち、ここから命令をフェッチして実行する。 このことにより、マザーボード上の外部のRAM(主記憶)よりフェッチする場合に 比べて高速に実行できる。この内部RAMのことをキャッシュという。キャッシュ には2項のパイプライン方式でプリフェッチして、主記憶のコピーが作成される。 プログラムには条件判断による分岐があるためプリフェッチしてあるプログラムの 方に実行が行かない場合がある。この場合プリフェッチした内容は破棄される。 このことをヒット率という。(プリフェッチが役立った場合) 5.仮想記憶 主記憶の大きさには限界があるため、極端に大きなプログラムは実行できない。 そこでより大きな記憶領域をもつ補助記憶(HDD)を主記憶にみたてるのが仮想記憶 。主記憶をはみ出した部分を実行するときは主記憶を補助記憶にコピーして領域 を空ける。これをスワッピングという。WindowsでもRAMが少ない場合は、この スワッピングが発生し、その結果として実行速度が低下したりするのは周知のこと。 6.RISC Fetch、Execを繰り返すので、この部分の設計(アーキテクチャ)が性能に重要な影響 を及ぼす。命令のビット長を短くし、命令の数を減らすことにより実行速度を上げよ うとする手法。対するものにCISCがある。X86プロセッサはCISC。
キーボード
カード読み取り装置 CR:CardReadre
光学式マーク読み取り装置 OMR
紙テープリーダ PTR
光学文字読み取り装置 OCR:Optical Character Reader
マウス
ライトペン
ディジタイザ
CRT
液晶ディルプレイ
プリンタ
プロッタ
もっとも使われているのが磁気ディスク(ハードディスクドライブ:HDDともいう)である。 磁気テープ装置 フロッピーディルクドライブ MO その他
コンピュータが内部で使っているのはデジタル信号である。これは1か0の値をもつ2値信 号である。通常は電圧で表現し相対的に高いほう(High)を1低いほう(Low)を0としている。 電圧としては5Vが一般的だが、3.3Vなどいろいろある。
アナログ信号は自然界に一般的に存在する信号で、マイクを通してとった人の声などは アナログ信号で連続値である。
アナログ信号は信号処理の過程で劣化していってしまう。ビデオのコピーなどがその例 で画質が低下する。これに対しデジタル信号は劣化するという現象はない。CDのコピ ーなどは使用価値的には原版と同じである。従って信号を早いうちにデジタル化して あとはデジタル回路(コンピュータも含まれる)で処理しようというのが最近の傾向と なっている。デジタル化してコンピュータのソフトで処理すればアナログ処理のように いちいち回路がいらない点もコスト的に有利だ。
Bit : Binary Digit
デジタル信号の1桁(最小単位)がビットである。
8ビットの値を通常バイトという。また、16ビットの値を通常ワードという。
10進数:Decimal
例 1988 : 0から9の数字で構成
桁の重みとは1,10,100,1000...のことで10進数では10倍になってゆく。
例 1011B : 0と1で構成
桁の重みとは1,2,4,8,...のことで2進数では2倍になってゆく。
10進数でいち、じゅう、ひゃく、せん、まんとおぼえているように2進数でも
16ビットの値くらいは暗記しておく。
値 | ビット番号(桁) |
---|---|
1 | 0 |
2 | 1 |
4 | 2 |
8 | 3 |
16 | 4 |
32 | 5 |
64 | 6 |
128 | 7 |
256 | 8 |
512 | 9 |
1024 | 10 |
2048 | 11 |
4096 | 12 |
8192 | 13 |
16384 | 14 |
32768 | 15 |
65536 | 16 |
(忘れたら覚えているところから倍々してゆく)
方法1
与えられた10進数から引ける最大の2進数の重みを求めこれで引くことを繰り返す
25は11001となる。
方法2
与えられた10進数を2で割って余り(1か0になる)を並べてゆく。
最初の余りが最下位桁(LSB)、最後の余りが最上位桁となる。
(最上位ビット:MSB (Most Significant Bit), 最下位ビット:LSB (Least Significant Bit) という。)
1の立っている桁の重みを足したもの(和)が10進数である。
10進小数
0.1235
2進小数
0.1011
相互の変換については各自のテーマとする。
10進小数と2進小数間では正確に変換できない場合があるので注意が必要。
組込系のソフトウエアでは小数にせず、整数で扱うようにする場合も多い。
5.1Vは51とし単位を0.1Vとして扱うなどして小数にならないようにする。
2進数における負の値 -符号なしと符号付の整数-
マイナスの値の表現
8ビットの数値11111111Bについて。 符号なしなら255、符号付なら-1である。 符号付整数の場合MSB(最上位桁)をSignBit(符号ビット)といい、ここが1なら負の数となる。
符号付整数と10進数の対比はつぎのようになる。
01111111 | +127 |
00000011 | 3 |
00000010 | 2 |
00000001 | 1 |
00000000 | 0 |
11111111 | -1 |
11111110 | -2 |
11111101 | -3 |
10000000 | -128 |
符号付8ビット整数は+127から-128の範囲の値をとる。
加算
加算の規則はつぎの4通り。
被加数 | 0 | 0 | 1 | 1 | |
加数 | 0 | 1 | 0 | 1 | |
和 | 0 | 1 | 1 | 10 | Carry(桁上がり) |
1011 | 11 | |
+ | 0101 | 5 |
10000 | 16 |
減算
減算の規則はつぎの4通り
被減数 | 0 | 00 | 1 | 1 | |
減数 | 0 | 01 | 0 | 1 | |
差 | 0 | 11 | Borrou(借り) | 1 | 0 |
1011 | 11 | |
- | 0101 | 5 |
0110 | 6 |
乗算
乗算の規則はつぎの4通り
被乗数 | 0 | 0 | 1 | 1 |
乗数 | 0 | 1 | 0 | 1 |
積 | 0 | 0 | 0 | 1 |
1011 | 11 |
1101 | 13 |
1011 | |
00000 | |
101100 | |
1011000 | |
10001111 | 143 |
除算
除算の規則は0で割る場合が除外されるのでつぎの2通り
被除数 | 0 | 1 |
除数 | 1 | 1 |
商 | 0 | 1 |
10 | 商:2 | ||
10 | 101 | 5/2 | |
10 | |||
1 | 余り:1 |
補数
コンピュータの演算回路は加算が基本になっており、減算も補数を使って加算で処理する。
元の数 00000010 (10進の2)
1の補数
各ビットを反転したもの
11111101
2の補数
1の補数に+1したもの
11111110
これは-2となっている。
減算は2の補数を足せばよい。
2進数で表現すると桁数が多くなってわかりにくい場合がある。2進数を4ビットづつ区切り これを16進数として表現する方法が使われる。これには0~9の数字とA~Fの文字を使う。 対応表はつぎの通り。
2進数 | 16進数 | 10進数 |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
表記方法
10進数
そのまま。特に10進数であることを確認したいばあいはDをつける。 Exp. 1011D
2進数
Bをつける。1011B
16進数
Hをつける。0FAB2H
C言語では0xをつける。Exp. 0xFAB2
各プログラミング言語上では表記方法が規定されているのでそれに従う必要がある。
BCD : Binary Coded Decimal
10進数の各桁を4ビットづつの2進数に置き換えて表すのが2進化10進数である。
10進数 | 2進化10進数 |
---|---|
139 | 0001 0011 1001 |
8ビットの数値に文字を割り当てたものがASCIIコードである。8ビット(1バイト)で表せる 文字は256種類である。
ASCII CODE 表
(American Standard Code for Information Interchange)
b3 | b2 | b1 | b0 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
b7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |||||
b6 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | |||||
b5 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |||||
b4 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |||||
0 | 0 | 0 | 0 | NUL | DE | 0 | @ | P | p | ||||||
0 | 0 | 0 | 1 | SH | D1 | ! | 1 | A | Q | a | q | ||||
0 | 0 | 1 | 0 | STX | D2 | " | 2 | B | R | b | r | ||||
0 | 0 | 1 | 1 | ETX | D3 | # | 3 | C | S | c | s | ||||
0 | 1 | 0 | 0 | ET | D4 | $ | 4 | D | T | d | t | ||||
0 | 1 | 0 | 1 | ENQ | NAK | % | 5 | E | U | e | u | ||||
0 | 1 | 1 | 0 | ACK | SN | & | 6 | F | V | f | v | ||||
0 | 1 | 1 | 1 | BL | EB | ' | 7 | G | W | g | w | ||||
1 | 0 | 0 | 0 | BS | CN | ( | 8 | H | X | h | x | ||||
1 | 0 | 0 | 1 | HT | EM | ) | 9 | I | Y | i | y | ||||
1 | 0 | 1 | 0 | LF | SB | * | : | J | Z | j | z | ||||
1 | 0 | 1 | 1 | HM | EC | + | ; | K | [ | k | { | ||||
1 | 1 | 0 | 0 | FF | + | L | \ | l | | | ||||||
1 | 1 | 0 | 1 | CR | M | ] | m | } | |||||||
1 | 1 | 1 | 0 | S0 | . | N | ^ | n | |||||||
1 | 1 | 1 | 1 | S1 | / | ? | O | _ | o |
文字コードにはこのほかにつぎのようなものがある。 Shift Jisコード Windows JISコード EUCコード UNIX,Linux UNICODE
論理積 AND
真理値表
A | B | OUT |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
論理和 OR
真理値表
A | B | OUT |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
否定 NOT
真理値表
A | B | OUT |
---|---|---|
0 | 1 | |
1 | 0 |
排他論理和 EXOR
真理値表
A | B | OUT |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |