機械語
ナビゲーションに移動
検索に移動
機械語とは、コンピューターのプロセッサー(一般には主にCPU)が直接解釈できる言語のことである。マシン語とも呼ばれる。
概要[編集]
機械語はプロセッサーが直接解釈できる命令言語であるが、言語とは言っても概念的には2進数の羅列なので、人間から見て言語とは言い難い[1]。
機械語でプログラミングできないこともないが、機械語でのプログラミングは、アセンブリ言語を経由して行うのが一般的である。
ただし、2020年時点では、ほとんどの場合、機械語のプログラムは高級プログラミング言語でプログラミングされたコードをネイティブコンパイルすることにより生成される。機械語を(アセンブリ言語経由ではあるが)直接扱うケースとしては、コンパイラー自体を作る場合、部分最適化を行う場合、特殊なハードウェアのプログラムを作成する場合などがある。
パソコンなどに搭載されているCPUは、ほとんどがレジスターマシンなので、狭義ではレジスター操作を基本とした命令セットの組み合わせを指すこともある。一方、仮想マシンの中には、スタックマシンなどの異なるアーキテクチャーの機械語で動作するものもある。
例[編集]
擬似コード(レジスターマシン)[編集]
レジスターマシンでの擬似コードを示す。
[命令リスト] 命令(バイト) ; アセンブリ | 説明 0x00 ; NOP | No Operation 0x40 ; SET A, x | Aレジスターに次アドレスの値xを設定 0x41 ; SET A, B | Bレジスターに設定されている値をAレジスターに設定 0x80 ; ADD A, x | Aレジスターに値xを加算して結果をAレジスターに設定 [コード例] 0x40 0x03 0x80 0x05 [説明] 0x40 0x03 ; SET A, 0x03 0x80 0x05 ; ADD A, 0x05 | Aレジスターに8(0x08)が入る
擬似コード(スタックマシン)[編集]
スタックマシンでの擬似コードを示す。
[命令リスト] 命令(バイト) ; アセンブリ | 説明 0x00 ; NOP | No Operation 0x10 ; PUSH x | 指定した値をスタックに積む 0x40 ; ADD | スタックから2つ値を取り出して2つを足した結果をスタックに積む 0x41 ; SUB | スタックから2つ値を取り出して2つを引いた結果をスタックに積む(ここではトップの方を2つ目とする) [コード例] 0x10 0x01 0x10 0x03 0x10 0x05 0x40 0x10 0x02 0x41 0x40 [説明] 0x10 0x01 ; PUSH 0x01 | スタックの状態: 01 0x10 0x03 ; PUSH 0x03 | スタックの状態: 03 01 0x10 0x05 ; PUSH 0x05 | スタックの状態: 05 03 01 0x40 ; ADD | スタックのトップに8(0x08)が入る スタックの状態: 08 01 0x10 0x02 ; PUSH 0x02 | スタックの状態: 02 08 01 0x41 ; SUB | スタックのトップに6(0x06)が入る スタックの状態: 06 01 0x40 ; ADD | スタックのトップに7(0x07)が入る スタックの状態: 07 逆ポーランド記法の 1 3 5+ 2- + と同じになる
脚注[編集]
- ↑ 訓練すればハンドアセンブルはできないこともないが、今となっては特殊なケースを除いて実用的ではない。