Chapter 01

CPU と命令セットってなに?

ほげさん
ほげさん
2021.08.14に更新

CPU とは

マウスやキーボードやディスクやメモリなどからデータを受け取り演算を行うハードウェアです。

例えば Intel Core i7 8700K や AMD Ryzen 7 1800X などがあります。

もう販売していませんが、Intel 80386 SX というものもありました。

命令セットとは

CPU に対して指示をする機械語の命令集です。

最終的にプログラムは命令セットに定められたコードに変換されて実行されます。

命令セットが同じであれば異なる CPU でも同じ機械語プログラム ( バイナリ ) を動作させることができます。

例えば x86 というものがあります。

x86 と x86_64 とは

x86

Intel 社が 1978 年に発表した 16bit の Intel 8086 とその後方互換を持つ CPU の命令セットの総称を x86 と言います。

x86 とは Intel 社の発表した CPU が 8086, 80186, 80286, 80386... と続いたため、下2桁をとったことに由来します。

また、広義では AMD 社の命令セットでも Intel 8086 と互換があるものは x86 に含むようです。

例えば Intel 80386 SX はの命令セットは x86 です。[1]

x86_64

x86 を 64bit に拡張した命令セットを x86_64 と言います。

実際には AMD 社が発表した AMD64 や Intel 社が発表した Intel 64 などを含む、各社の AMD64 互換のある命令セットの総称です。

広義では x86 と互換性があるので x86 に x86_64 を含むことがあります。

例えば Intel Core i7 や AMD Ryzen 7 の命令セットは x86_64 です。

命令セットが同じなので、違う CPU でも同じ機械語プログラム ( バイナリ ) を動作させることができます。

x86 と x86_64 の一般的に十分な理解

全てのコンテキストで認識齟齬の起きない画一的な定義をすることは難しいので、一般的にはこれくらい理解しておけば十分だろう、という程度にとどめて整理します。

よくソフトウェアをダウンロードするときに for x86 | for x86_64for x86 | for x64 と書かれていることがあります。

x86 は広義では 16bit から互換のある 64bit までを含むようですが、すでに 16bit はほぼ稼働してないということもあり、一般的には x86_64 と対比させて 32bit を指すようです。
なので x86 = 32bit | x86_64 = 64bit として使われることが多いです。

また x86_64 と x64 も同じものを指していると理解して良いでしょう。

この本では以降 x86_64 と記載します。

ARM と ARM64 とは

ARM

x86 ( および x86_64 ) アーキテクチャは主に Intel 社と AMD 社によるもので、高性能なので主に PC に使われます。[2]
対して ARM 社による安価で低消費電力な ARM アーキテクチャというものもあります。[3]

ARM は主に組み込みの分野で使われていましたが、近年はスマホやタブレットでも使われており、Android や iPhone はほぼ ARM が使われているみたいです。

ARM にも 64bit 拡張である ARMv8 があります。

ARMv8 と AArch64 と ARM64

ARMv8 の実行モードに AArch32 と AArch64 というモードがあり、それぞれ A32 と A64 という命令セットを持っています。

また、AArch64 のサードパーティ製品として Apple 社が iPhone などに使うために開発した ARM の命令セットを ARM64 と呼んでいました。

何年も前に AArch64 と ARM64 はマージされて、公式に AArch64 と命名されることになったようです。[4]

AArch64 と ARM64 の一般的に十分な理解

AArch64 と ARM64 は同じものだと理解して問題ないと思います。

この本では以降 ARM64 と記載します。

まとめ

CPU

  • 演算を行うハードウェア

命令セット

  • CPU に指示をする機械語の命令集
  • CPU が違っても命令セットが同じなら、同じ機械語プログラム ( バイナリ ) を動作させられる

x86

  • Intel 8086 と互換のある CPU の命令セットの総称
  • ダウンロードサイトとかで x86 とみたら 32bit と理解して大丈夫
  • 高性能で PC などに使われる

x86_64

  • AMD64 と互換のある命令セットの総称で、x86 を 64bit に拡張したもの
  • ダウンロードサイトとかで x86_64 とみたら 64bit と理解して大丈夫

ARM

  • ARM 社のアーキテクチャの総称
  • 安価で低消費電力でありスマホとかに使われる

ARM64

  • Apple 社が作った AArch64 の命令セット
  • AArch64 = ARM64 と理解して大丈夫

参考にした記事

https://e-words.jp/w/命令セット.html
https://ascii.jp/elem/000/000/170/170455/
https://ja.wikipedia.org/wiki/命令セット
https://pcinformation.info/cpu/bit.html
https://ja.wikipedia.org/wiki/X86
https://ja.wikipedia.org/wiki/X64
https://ja.wikipedia.org/wiki/ARMアーキテクチャ
https://urashita.com/archives/12325
https://embedded.hatenadiary.org/entry/20140427/p2
https://ja.wikipedia.org/wiki/CISC
https://ja.wikipedia.org/wiki/RISC
脚注
  1. 命令セットとしての i386 や IA-32 については、この本では割愛します。 ↩︎

  2. ちなみに Complex Instruction Set Computer ( CISC ) と言われる方針で設計されています。 ↩︎

  3. ちなみに Reduced Instruction Set Computer ( RISC ) と言われる方針で設計されています。 ↩︎

  4. AArch64 は機能が十分で、ARM64 はパフォーマンスが良かったらしく、チューニングより機能追加をする方が楽だと言う理由で ARM64 がベースになったらしいです。 ↩︎