機械語(マシン語)とは、マイクロプロセッサが処理を行う時に読み取る、実行内容が記述されたデータ列の事である。
概要
機械語は、その名の通り機械である計算機のために書かれた0と1のビットからなるデータ列であり、人間が機械語だけを見て、どんな動作をするのかを理解するのは非常に難しい。
通常はC言語やJavaといったプログラミング言語でプログラムを記述し、コンパイラというツールによって機械語に変換する。文字を使って命令とレジスタを表現する事で、機械語をもう少し分かりやすく表記したアセンブリ言語もあり、アセンブリ言語で書かれたコードはアセンブラによって機械語に変換する。
機械語とアセンブリ言語は低級言語、CやJava等のプログラミング言語は高級言語と呼ばれる。
機械語はバイナリエディタなどによって読み書きする事ができる。その際には1と0の二進数ではなく、記述を短くできる十六進数が使われることも多い。
プログラミングやコンピューターの入出力がパンチカードで行われていた時代は、機械語を直接読み書きできる事が計算機を扱うエンジニアにとって普通であった。しかし、アセンブラやコンパイラの普及によりそういったスキルは必須ではなくなり、むしろマニアックであるとみなされる領域となっている。
また、マイクロプロセッサはその種類ごとに解釈できる機械語の仕様が異なっており、これを命令セットアーキテクチャ(ISA: instruction set architecture)と呼んでいる。
機械語の種類
VLIW(Very Long Instruction Word)
実行時にOut-of-Order解析とかないわ〜、そんなんコンパイラの仕事だわ〜ということでややこしい機能を取っ払い、代わりに並列実行の口だけ用意したアーキテクチャ。一度に色々するので「命令がすっごい長いよ!」という名前がついた。得意不得意がはっきりしていて、行列の計算などは大得意だが、プログラムの並列性が低いと性能がまるで出ない。比較的単純な設計で並列性を向上させられるので、Intelはi960やItaniumのようなプロセッサでこの命令セットを採用したが、最適化に手間がかかる割に性能が出ないという理由でどれもパッとせず。CPUの並行処理の手法としては複数の命令を並行して複数のプロセッサ内ユニットで実行するスーパースケーラ実装の方が成功した。
独自命令アーキテクチャをハナから諦め、x86命令をVLIW命令に変換して実行するCPUも現れた。2000年代前半にTransmetaが世に送り出したCrusoeやEfficeonといった省電力プロセッサがこれである。AMDのGPUであるRadeon HD 2000~HD 6000系もVLIWだったりした。
命令セットの例
CISC
- x86: Intelが開発した16ビットCPU用命令セット。ルーツである8086は、8ビットアーキテクチャであった8080の16ビット拡張版である。プロセスやメモリを保護するプロテクトモードを追加した80286を経て、80386で32ビットに拡張される。Intel自身はiAPX 432やi960のような後継アーキテクチャに置き換えるつもりだったがことごとく失敗。拡張に次ぐ拡張を繰り返したため、汎用レジスタの少なさのような時代遅れの部分や命令セットの「汚なさ」がよく揶揄された。
- 68k: モトローラが開発した32ビットCPU用命令セット。初代のMC68000は外部16ビットバスであったことから16ビットと呼ばれたが内部的には32ビットプロセッサであった。MacintoshやX68000などのパソコンで採用されたほか、メガドライブに搭載された。DragonbollやColdFireなどの派生プロセッサが組み込み向けに長く使われた。
- x64: AMDが開発した64ビットCPU用命令セット。広義ではx86に含むが、x86との互換性を保ちながら汎用レジスタを2倍の16本に増やした(それでも一般的なRISCプロセッサよりは少ない)。Intelもx86とのクロスライセンスを受けて使用している。
RISC
- PowerPC: IBMのサーバ向けCPUであるPOWERプロセッサのパソコン向け仕様としてIBM・アップル・モトローラが共同開発した(このPOWERのルーツはRISCという概念が生まれる前の1970年代に設計されたIBM 801というプロセッサである)。x86と並ぶ標準の座を目指したが、パソコン向けとしてはMacintosh等に採用された以外には広がらなかった。組み込み向けとしては一定の成功を収め、PlayStation3、Xbox 360, ゲームキューブ, Wiiなどのゲーム機にも採用された。Macintoshは2006年にCPUをIntel系に変更し、さらに2020年にはARM系に切り替えている。
- ARM: ARM社の設計(IPライセンス)を購入したメーカーが周辺機能を加えて製造する形態をとる。1990年台にTIとノキアがGSMで採用したことを機に携帯電話のプロセッサの標準の座を固めた。組み込み向けで圧倒的なシェアを誇り、スマートフォンをはじめ地球上にある32bit以上のCPUコアのほとんどがARM系である。一部のメーカー(Appleや富士通など)はコアの設計自体を独自に行なえるアーキテクチャライセンスを持ち、A64FX(京のプロセッサ)やApple Siliconといった、ARMのオリジナルとは異なる高性能品を製造している。
- MIPS: MIPS Technologies社の設計。PS1やN64、PSPで使われたRシリーズのアーキテクチャ。PS2のEEもMIPSベースである。ARMと同様にサードパーティーに設計をライセンス供与する形態をとり、2000年代までは組み込みシステムでよく採用されたが、競合のARMに押されてほとんど使われなくなった。非常に典型的なRISCであり、命令セットがきれいなのでCPUの教本によく使われた。
- SuperH: 日立(現ルネサス)が開発した組み込み向けアーキテクチャ。16ビット固定長命令であり、RISCプロセッサでありながら命令密度が高い(これはARMがThumb命令という形で模倣した)。セガサターンやドリームキャストに採用された。小惑星探査機はやぶさもこのシリーズを使っていた。2010年のNECエレクトロニクスとルネサスの統合後、NEC系のV850などへの置き換えにより採用は減っている。オープンソース実装もある。
- RISC-V: (リスク-ブイではなくリスク-ファイブと発音する)米カリフォルニア大学バークレー校で研究用に開発されたBerkeley RISCの5番目のアーキテクチャ。RISC-V Foundationという非営利団体で管理されている。既存の命令セットと違い、利用にあたってライセンス料を払う必要がない。
関連動画
関連項目
- 6
- 0pt