読み方:きかいごコンピューターが直接解読して実行できる命令語からなる言語。一般のプログラミング言語も、最終的にコンパイラーによってこれに翻訳される。language機械語とは、コンピュータが直接理解して、その命令内容を実行できる言語のことである。機械語は、0と1の2進数で構成されているため、解読しづらい言語である。そのため、人間が理解しやすい形式の言語で記述するのが一般的である。人間が理解しやすい形式の言語は、コンピュータでは直接理解することはできないので、機械語に変換してから使用する。過去には、直接機械語で記述することも行われていたことがあったが、時間と労力がかかるため、今日ではあまり使われていない。code)は、コンピュータの中央処理装置(CPU)が直接理解し実行することができる命令からなる言語[1]。マシン語(マシンご)とも[2]。組込システムのエンジニアなどハードウェア寄りのエンジニアは機械語モニタを用いて機械語を直接操作することもある。CPUが入出力バスとデータ信号をやりとりするためのチャネル(通路、流路)のこと。I/Oチャネルとも[4]。それを直接的に文字(数字)にするには1/0を多数連ねた2進数(8桁、16桁、32桁、64桁など)で表現するが、人間が読みやすいように、その2進数を16進数に変換して表示することも一般的である。してしまうと回路の動作が不安定になってしまうので、実際には、厳密に言うとHigh/Lowの2つの電圧で実現している。デジタルコンピュータでは、2値方式であることが重要で、Hi/Lowでも2値論理の論理回路としてはOn/Offと等価な動作をするので、それを土台としてCPUは設計されている。2バイトつまり16進数の4文字ごとに、あるいは1バイトつまり16進2文字ごとに区切って間に空白を入れて可読性を高めるということが画面上や紙面上では一般的である。文面でも、受験者に分かりやすくなるように16進表示にしてあり、4文字ごとに空白をはさんでいる。全て機械任せで良い結果を得ようとするよりも、人による補助をうまく取り入れられるようにするほうが良い場合もある。した変則的な機械語プログラミングはPolyglotの極端な1ジャンルともいえる。PC-98とX68k両対応のブートセクタ「電脳インストーラ2」が書かれたことがある。Winners」は、その後コンテストのルールが変更されたことで、このようなプログラム自体が禁止されている。アセンブリ言語で書かれたプログラムを機械語に変換することを「アセンブル(する)」と言う。オクテット単位だが、CASLのCOMETが16ビット単位のように、そうでないものもある。「絶対にBASICプログラムという形態で載せる」という掟のあった、『マイコンBASICマガジン』(ベーマガ)を除く。このためベーマガでは、DATA文のデータから、BASICプログラムで機械語コードを書き込むようなプログラムを掲載していた。1970年代~1980年代など、たとえば2Dシューティングゲームソフトの上下左右の画面スクロール処理など。機械語は個々の命令から構成される。アーキテクチャにもよるが、命令は通常、以下のいずれか(あるいは複数)を指定する。算術演算、アドレス指定、制御用途にレジスタを指定する。メモリ位置やオフセットを指定する。オペランドを解釈するためのアドレッシングモードを指定する。このような単純な命令を組み合わせてより複雑な操作を構築し、(ノイマン型であれば)これを逐次的に実行したり、制御フロー命令で順序を変えたりする。多くの命令セットに共通な操作として、以下のものがある。レジスタに固定の定数値を格納する。あるメモリ位置からレジスタにデータを移動する(または逆方向)。そのデータに対して後から何らかの計算を行い、結果をメモリに格納する。ハードウェア機器からデータを読み込んだり、逆にデータを書き込んだりする。2つのレジスタの内容についてそれら演算を行い、結果をレジスタに格納する。2つのレジスタのビット位置毎の論理和や論理積を計算したり、1つのレジスタのビット毎の否定を計算する。プログラム内の別の位置にジャンプし、そこの命令を実行する。ある条件が成り立つときだけ別の位置にジャンプする。コンピュータによっては命令セット内に複雑な命令を持っている。通常ならいくつもの命令を使わなければならないような操作を1つの命令で実現している。一般にそのような命令は内部で複数のステップに分解され、複数の実行ユニットを使って実現される。なくば、プロセッサの回路規模が大きくなりすぎることになる。そのような複雑な命令として以下のようなものがある。複数のレジスタを一度にスタック上にセーブする。メモリを大きなブロックで移動する。テスト・アンド・セット命令などの不可分操作を実行する。ALUへの入力にレジスタではなく、メモリ位置を指定する命令。メモリからの移動と計算が1つの命令で行われる。命令またはベクター命令がある。これは、同じ演算操作を複数のデータに同時に行うものである。よって大きなベクトルや行列の操作を短時間で行うことが可能となる。並列化されたアルゴリズムを高速に実行できる。実装には様々なマーケティング上の名称がつけられている(MMX、3DNow!、AltiVecなど)。命令セットの設計は複雑な問題である。マイクロプロセッサの歴史は命令セットの設計で2つの段階に分けられる。複雑な命令セットが実装されていた。1970年代、IBMなどで研究が行われ、多くの命令が省略可能であることが判明した。縮小された命令セットが登場した。命令セットが縮小されることで、クロックを高速化でき、プロセッサのサイズを小さくでき、電力消費を低減させることが可能となった。極端なRISCでなくとも、典型的な操作を最適化し、メモリやキャッシュの効率を向上させ、プログラミングを単純化させることができる。※この「機械語」の解説は、「命令セット」の解説の一部です。「機械語」を含む「命令セット」の記事については、「命令セット」の概要を参照ください。多くの命令セットで用意されている命令である。プロセッサはこの命令を読みとると文字通り「何もせず」にプログラムカウンタのインクリメントのみを行う。規則的に命令を決めた結果、何の意味も持たない命令(同一レジスタでの移動、次の番地へのジャンプ)が出来たのでそれをNOPとすることもあれば、専用の命令として用意されることもある。※この「機械語」の解説は、「NOP」の解説の一部です。「機械語」を含む「NOP」の記事については、「NOP」の概要を参照ください。ウィキペディア小見出し辞書の「機械語」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。