たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【独学するコンピュータサイエンス】「このパソコンは64bit」とかの話

   

パソコンを買うときに、メモリがなんだとか、CPUがこうだとかスペック表をみたりすると思います。そのときに64bitとやたらみかけませんか?

きょうはこの64bitとかのおはなしです。

よくみかける64bit = CPUのレジスタサイズ

さっそく本題ですが、このよくみかける64bitの正体は「CPUのレジスタサイズ」のことです。

CPUのレジスタってなんだよって話ですが、ざっくりいうと「記憶装置」です。

記憶装置には、いくつか種類があって、ざっくりいうと
「レジスタ」「メモリ(RAM/ROM)」「HDD」があります。
メモリとHDD(SSDとか)はパソコンを買うときに、スペック表でみかけたり、店員さんがこれらの説明をよくしてくれるんじゃないかなとおもいます。

レジスタのことはきいたことないなあと思っていたかもしれませんが、じつはこの64bitってやつがレジスタのことだったんです。

もしもCPUとメモリの関係についてはこちらの記事で書いてます。よかったら見てください。
【独学するコンピュータサイエンス】ノイマン型コンピュータ | たのしい工学

レジスタについて

話を簡単にするために、初期のコンピュータがもっていたレジスタのサイズである16bitレジスタで説明します。

レジスタは記憶装置だと言いましたが、16bitレジスタはどんな記憶装置かというと「16桁の2進数を記憶する装置」です。
つまり、64bitレジスタなら「64桁の2進数を記憶する装置」ということになります。ちなみに、むかし任天堂64という据え置きゲーム機がありましたが、それはCPUに64bitをつかっているという意味の64だそうです。

レジスタのなまえ

16bitレジスタには名前がついています。代表的なものを8つ紹介します。

AX (accumulator : 累積演算器)
CX (counter)
DX (data)
BX (base)
SP (stack pointer)
BP (base pointer)
SI (source index)
DI (destination index)

これらはそれぞれ16bitレジスタです。16bit(=8bit+8bit=1byte+1byte)つまり2byteのレジスタが8つあるので、16byte記憶することができます。

たとえばAXならエイエックスレジスタと呼んだりします。
名前がことなっているのは、それぞれ意味があり、たとえば演算をするときには、AXレジスタを利用すると機械語として完結に表現できたりします。

さらに、AX、CX、DX、BXのレジスタについては、なかみを分けて考えられます。

AX → AL , AH
CX → CL, CH
DX → DL, DH
BX → BL, BH

AXを例にとると、AXは、ALとAHにわけられます。

イメージはこんな感じです

AXは16bitレジスタですが、その16bitのうち下位の0から7番目の8bitをAL(accumulator low)、8番目から15番目の8bitをAH(accumulator high)といいます。

SP、BP、SI、DIについてはLとHには分かれていません。

ちなみに,これが32bitのCPUになると

EAX (accumulator : 累積演算器)
ECX (counter)
EDX (data)
EBX (base)
ESP (stack pointer)
EBP (base pointer)
ESI (source index)
EDI (destination index)

というふうになります。つまり、16bitのレジスタのなまえのあたまにEをつけただけです。
EはExtendの意味です。

それぞれ、32bitのレジスタになり、32bit = 4byte、4byte × 8 = 32byte

つまり、32bitレジスタでも32byteしか記憶できません。たとえばMacBookProとかはメモリが16GBなどのものがありますが、スケールがギガ単位(=10の9乗)で違うことになりますね。つまり、レジスタはメモリの10の9乗分の1くらいしか記憶できないわけです。相当スペック低いなとおもいますよね。

でもこれで大丈夫なのです。ふだんPCを使うときには、さまざまなアプリケーションやソフト立ち上げますよね。これらはどこで動いているかというと、メモリです。レジスタではたくさん記憶容量をつかうようなことはせず、それらはメモリにおまかせするのです。どのメモリをつかうかの指示をおこなうのがCPUなのです。そしてその指示の内容を覚えたり、計算するための記憶領域として利用されるのがレジスタなのです。メモリのどこをつかうかのおはなしになると、レジスタにはメモリの場所、アドレスを指定することがあります。

CPUがメモリをの場所を指示するといいましたが、では、CPUに対してどのように命令をすれば、メモリの場所を指示してくれるのか?と思うでしょう。コンピュータに対して、指示をするものが、プログラムですが、CPUに指示を出すためのプログラムとしてアセンブラという言語があります。
たとえば


MOV AL ,[SI]

こんな命令をアセンブラで書くことができますが、これは
「メモリのSI番地の1バイトをALへ記憶せよ」
という命令です。このようにして、アセンブラはレジスタを利用してメモリの場所を指定することができたりするのです。

まとめ

パソコンを買うときに、スペックを見るとおもいます。
「CPU 64bit, メモリ 8GB、SSD 256GB」 これはつまり、そのパソコンがどれだけ記憶できるかっていうことを見ているだけなんですよね。ようは、スペック=記憶みたいな。

CPUはレジスタを使ってさまざまな演算を行います。
つまり、CPUが計算を行えるのは、レジスタという記憶装置があるからで、記憶ができるから計算を行えるとも言えますよね。記憶力はあたまのよさだったりしますが、コンピュータのしくみをみてみると、たしかにそうなんだなとおもえたりしますよね。

ではでは!

 - コンピュータサイエンス