コンピュータ・アーキテクチュア第6回

               (6)2017.11.6
藤木 文彦





 2進数、16進数の基礎

コンピュータを使うときには、2進数、16進数を使用します。もうおなじみだと思いますが、念のため掲げておきます。

 8ビット

1 0 1 1 1 0 0

16ビット 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1

32ビット 0 1 0 1 1 0 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 0 10 1 0 1 1 0 1 1 1

64ビット 1 1 1 10 0 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 1 1 0 0 0 ........ 1 1 1 0 0 1 0 1


10進数 − 2進数 − 16進数 対応表

10進数  2進数  16進数 
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111


 CPUの働き  数値の加算




 CPUは、メモリ上に格納されたプログラムを読み込み、解釈して、計算を行います。
 計算は、2進数で行われます。
 一度に行う計算のビット数により、
 8bit
 16bit
 32bit
 64bit

などの種類があり、現在は、ほぼ64bit のものが使われていますが、最初の実用化されたCPUは、8bitはおろか、4bitのものでした。それからどんどんと発達し、今のようなものとなっていますが、用途によっては8bitCPUが使われているものもあります。(マイコン内蔵の洗濯機、といったものは、処理することが簡単なので、使われています。)

 64BitCPUの動作の仕組みも、基本的には8bitCPUから発展してきたものであり、いきなり64bitの解説をするのは、複雑ですので、しばらくのあいだは8bitまたは、16bitCPUの動作を基本に説明していきます。



 8ビットメモリと アドレス







 CPUが2つのデータを加算する動作


 「メモリ上に置かれた 2つの数値を CPUが加算する」
という動作を、CPU内の回路の仕組みを見ながら説明します。













 加算回路の構造



 1bitの数を2つ加える計算を考える。

 0+0=0
 0+1=1
 1+0=1
 1+1=10


 桁上がりを考えた、1bitの加算は、3つの数の足し算になります。(以下の結果は自分で考えてください。)

 0+0+0=
 0+0+1=
 0+1+0=
 0+1+1=
 1+0+0=
 1+0+1=
 1+1+0=
 1+1+1= 

 加算回路を論理回路で作る




WikiPedia 加算器
http://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8

半加算器 (図面は WikiPedia より。以下の図面も同様)


半加算器(XOR回路を使用)



全加算器



加算器



減算器


 負の数の表現


2進数での負の数の表現は、「2の補数表現」という方法で表します。

 たとえば、8bitで負の数を表現する方法としては、下のような方法が考えられます。

A) 8bitの数に、もう1bit加えて、それで正負を表す。

  例)
 10進数の +2           0 00000010
 10進数の −2           1 00000010


B) 8bitの数の、最上位ビットを、正負を表すビットとする。

 こうしたいところですが、
  例)
 10進数の +2           00000010
 10進数の −2           10000010

C)  こうします。
  例)
 10進数の +2           00000010
 10進数の −2           11111110   (2の補数表現)




 A) の方法が、一見分かりやすそうですが、普通に使われている8bitメモリに、もう1bit継ぎ足したハードウエアを作成しなければなりませんので、実現は面倒です。
 B) の上の方法が一番わかりやすそうですが、実は、正負の数を扱う演算(計算)を行うための回路構成が複雑なものとなります。


 そこで、 C) の方法を用いて負の数を表します。
 このような表現を「2の補数表現」(この場合は、正確には2の8乗の補数というが、多くの場合ビット数が、乗数になることが自明なので省略する。)といいます。この表現の良いところは、
 「数値が正か負か最上位ビットを見ただけで(検査すれば)分かる」
 「数値が正か負かを考慮せずに同一の加算器で加算できる」
ということがあります。
 不便な点としては、人間が見たときにわかりにくいということがありますが、どちらにしても、人間が直接数値計算をする必要はないので、計算機が計算しやすいものであれば構わない、ということになります。

 2の補数表現で数値を表す


 補数の計算法



  +2 → −2 を求める例

+2 を2進数で表記    00000010

全ビットを逆転        11111101

1を足す            11111110 → −2

 今日の課題  2017年 11月6日分


 以下の(1)、(2)、(3)、(4) は、紙に書いて提出してください

(1) 2進 − 10進 − 16進 対応表を書く (0〜15)


(2) 2進 − 10進 − 16進 対応表を書く (0〜65535)

(3) 論理演算 AND OR XOR の表を書く

(4)   CPUの構造(一部)を書き、授業で説明した図を参考に

 2010番地にあるデータ ”3F” と
 2012番地にあるデータ ”2D" との加算結果を
 2020番地に保存する様子を描きなさい。




 以下の (5)、(6)は、メールで提出してください。

タイトル  arch6         宛先 fujiki.kougei@gmail.com


(5) 同じ性能のCPU を4台並べて使うより、4つぶんのCPUを1パッケージに納めて共有メモリを使う形式の方が性能がよくなる。その理由を考察し、5〜10行程度で書きなさい。


(6)負の数の表現

   10進数の 100、−100 を、8bit補数表現の2進数で表せ