きかい‐ご【機械語】
機械語
別名:マシン語
【英】machine language
機械語とは、コンピュータが直接理解して、その命令内容を実行できる言語のことである。
機械語は、0と1の2進数で構成されているため、解読しづらい言語である。そのため、人間が理解しやすい形式の言語で記述するのが一般的である。しかし、人間が理解しやすい形式の言語は、コンピュータでは直接理解することはできないので、機械語に変換してから使用する。
過去には、直接機械語で記述することも行われていたことがあったが、時間と労力がかかるため、今日ではあまり使われていない。
参照リンク
Machine language For Beginners - (atariarchives.org)
機械語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/06/19 07:26 UTC 版)
機械語(きかいご、英: machine language、machine code[1][2]、 binary machine language[3]あるいはbinary machine code)は、コンピュータの中央処理装置(CPU)が直接理解し実行することができる命令からなる言語[1]。マシン語(マシンご)とも[2]。
注釈
- ^ ただし組込システムのエンジニアなどハードウェア寄りのエンジニアは機械語モニタを用いて機械語を直接操作することもある。
- ^ CPUが入出力バスとデータ信号をやりとりするためのチャネル(通路、流路)のこと。I/Oチャネルとも[4]。
- ^ CPU自体が実行している生(なま)の機械語は、物理的な実態としては(4個から64個ほどの)電気的スイッチ群のOn/Off、正確に言うと各電圧の高・低(High/Low)の組み合わせであり、 それを直接的に文字(数字)にするには1/0を多数連ねた2進数(8桁、16桁、32桁、64桁など)で表現するが、人間が読みやすいように、その2進数を16進数に変換して表示することも一般的である。集積回路では片方を 0 ボルト にしてしまうと回路の動作が不安定になってしまうので、実際には、厳密に言うとHigh/Lowの2つの電圧で実現している。デジタルコンピュータでは、2値方式であることが重要で、Hi/Lowでも2値論理の論理回路としてはOn/Offと等価な動作をするので、それを土台としてCPUは設計されている。そして16進表示でも、その文字列をただ長々と何十文字や何百文字も連ねてしまうと、人間の認識能力では誰でも誤読を連発するので、 2バイトつまり16進数の4文字ごとに、あるいは1バイトつまり16進2文字ごとに区切って間に空白を入れて可読性を高めるということが画面上や紙面上では一般的である。だから情報処理技術者試験の文面でも、受験者に分かりやすくなるように16進表示にしてあり、4文字ごとに空白をはさんでいる。
- ^ 全て機械任せで良い結果を得ようとするよりも、人による補助をうまく取り入れられるようにするほうが良い場合もある。
- ^ こうした変則的な機械語プログラミングはPolyglotの極端な1ジャンルともいえる。たとえばPC-98とX68k両対応のブートセクタ「電脳インストーラ2」が書かれたことがある。第1回IOCCCの入選作のひとつでmullenderによるPDP-11とVAX両対応プログラム「Previous IOCCC Winners」は、その後コンテストのルールが変更されたことで、このようなプログラム自体が禁止されている。
- ^ アセンブリ言語で書かれたプログラムを機械語に変換することを「アセンブル(する)」と言う。
- ^ たいていはオクテット単位だが、CASLのCOMETが16ビット単位のように、そうでないものもある。
- ^ 「絶対にBASICプログラムという形態で載せる」という掟のあった、『マイコンBASICマガジン』(ベーマガ)を除く。このためベーマガでは、DATA文のデータから、BASICプログラムで機械語コードを書き込むようなプログラムを掲載していた。
- ^ たとえば1970年代~1980年代など、たとえば2Dシューティングゲームソフトの上下左右の画面スクロール処理など。
出典
機械語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/19 08:08 UTC 版)
機械語は個々の命令から構成される。アーキテクチャにもよるが、命令は通常、以下のいずれか(あるいは複数)を指定する。 算術演算、アドレス指定、制御用途にレジスタを指定する。 メモリ位置やオフセットを指定する。 オペランドを解釈するためのアドレッシングモードを指定する。 このような単純な命令を組み合わせてより複雑な操作を構築し、(ノイマン型であれば)これを逐次的に実行したり、制御フロー命令で順序を変えたりする。 多くの命令セットに共通な操作として、以下のものがある。 移動(コピー) レジスタに固定の定数値を格納する。 あるメモリ位置からレジスタにデータを移動する(または逆方向)。そのデータに対して後から何らかの計算を行い、結果をメモリに格納する。 ハードウェア機器からデータを読み込んだり、逆にデータを書き込んだりする。 計算 加算、減算、乗算、除算。2つのレジスタの内容についてそれら演算を行い、結果をレジスタに格納する。 ビット演算。2つのレジスタのビット位置毎の論理和や論理積を計算したり、1つのレジスタのビット毎の否定を計算する。 2つのレジスタの値の比較(等しいかどうか、どちらが大きいかなど) 制御フローの変更 プログラム内の別の位置にジャンプし、そこの命令を実行する。 ある条件が成り立つときだけ別の位置にジャンプする。 別の位置にジャンプするが、その際にジャンプ元の次の命令の位置を記憶しておき、後でそこに戻る(サブルーチン) コンピュータによっては命令セット内に複雑な命令を持っている。通常ならいくつもの命令を使わなければならないような操作を1つの命令で実現している。一般にそのような命令は内部で複数のステップに分解され、複数の実行ユニットを使って実現される。さもなくば、プロセッサの回路規模が大きくなりすぎることになる。そのような複雑な命令として以下のようなものがある。 複数のレジスタを一度にスタック上にセーブする。(コンテキストスイッチ) メモリを大きなブロックで移動する。 複雑な浮動小数点演算(三角関数、平方根など) テスト・アンド・セット命令などの不可分操作を実行する。 ALUへの入力にレジスタではなく、メモリ位置を指定する命令。つまり、メモリからの移動と計算が1つの命令で行われる。 最近普通に実装されるようになった複雑な命令として、SIMD (Single-Instruction Stream Multiple-Data Stream) 命令またはベクター命令がある。これは、同じ演算操作を複数のデータに同時に行うものである。SIMD によって大きなベクトルや行列の操作を短時間で行うことが可能となる。また、音声、画像、動画などの並列化されたアルゴリズムを高速に実行できる。SIMD の実装には様々なマーケティング上の名称がつけられている(MMX、3DNow!、AltiVecなど)。 命令セットの設計は複雑な問題である。マイクロプロセッサの歴史は命令セットの設計で2つの段階に分けられる。当初、CISC すなわち複雑な命令セットが実装されていた。1970年代、IBMなどで研究が行われ、多くの命令が省略可能であることが判明した。その結果 RISC すなわち縮小された命令セットが登場した。命令セットが縮小されることで、クロックを高速化でき、プロセッサのサイズを小さくでき、電力消費を低減させることが可能となった。極端なRISCでなくとも、典型的な操作を最適化し、メモリやキャッシュの効率を向上させ、プログラミングを単純化させることができる。
※この「機械語」の解説は、「命令セット」の解説の一部です。
「機械語」を含む「命令セット」の記事については、「命令セット」の概要を参照ください。
機械語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/15 15:17 UTC 版)
機械語において NOP は多くの命令セットで用意されている命令である。プロセッサはこの命令を読みとると文字通り「何もせず」にプログラムカウンタのインクリメントのみを行う。それ自身では何の意味も持たない命令ではあるが、 外部機器や他のプログラムとの同期のタイミングを取るための時間稼ぎ ジャンプ命令のジャンプ先の指標 後で命令を追加する予定の場所にダミーとして置くたとえば遅延スロットにとりあえず置く、あるいは置ける命令がない時に置く VLIWなどのようなアーキテクチャでは、より積極的にNOPが必要である NOPスレッドによる命令ポインタの制御 ワンチップマイコンのPROMでは、0x00か0xffのどちらか「上書き可能なほう」で潰すと NOP になるようにしておくと、再利用に便利 などの用途で使用される。 規則的に命令を決めた結果、何の意味も持たない命令(同一レジスタでの移動、次の番地へのジャンプ)が出来たのでそれをNOPとすることもあれば、専用の命令として用意されることもある。
※この「機械語」の解説は、「NOP」の解説の一部です。
「機械語」を含む「NOP」の記事については、「NOP」の概要を参照ください。
「機械語」の例文・使い方・用例・文例
- 実行されることができるコンピュータで読取り可能な機械語に特定のプログラミング言語で書かれるソースコードを翻訳するために、コンピュータープログラムを使用する
- 特定のコンピュータで実行の用意ができているコンパイラーの機械語出力
- その文が機械語に翻訳される言語で書かれたプログラム
- 機械語に翻訳したデータの記録、処理または伝送を制御する作業
- オブジェクトプログラムという,プログラマーが書いたプログラム語を機械語に翻訳したプログラム
- 記憶装置が内容を一つの機械語から他の語へ移し換えるのに要する時間
- プログラミング言語の機械語への変換システム
- アセンブラーという,プログラミング言語の機械語への変換システム
- 機械語の命令やデータを格納する装置
機械語と同じ種類の言葉
固有名詞の分類
- 機械語のページへのリンク