dポイントプレゼントキャンペーン実施中!

機械言語はどうやって決めてるんですか?CPUによってさまざまです。機械言語はどうやってCPUが理解してますか?

質問者からの補足コメント

  • 機械語01で動作します。その01の機能はどうやって分かるんですか?

      補足日時:2024/06/23 08:44

A 回答 (6件)

CPUの内部構造が違うのです。


例えば、初期の8bitCPUですが、インテルの8080は演算用のAレジスタ以外に汎用レジスタとしてB、C、D、E、H、Lの6個があります。
少し遅れて発表されたモトローラの6800は演算レジスタがAとBの2つ、そしてメモリーのアドレスを指定するXレジスタだけで8080のような汎用レジスタはありません。
演算はCPUの内部レジスタとメモリー(CPUの外部にある)を使って行うわけですが内部機能に違いがある分機械語も違いが出て来ます。
例えば8080では ADD L (AにLの値を加算せよ)という命令は存在しますが、6800ではLレジスタは存在しないのでこんな命令はありません。
いちいち説明していたらキリがないので詳しく知りたいならCPUのマニュアルを見てください。とは言っても16bitや32bitのものはややこし過ぎて分かり難いし、コンパイル系の言語が普及した現代ではCPUの内部構造は知る必要もないのでそこまで解説された資料は皆無に近いでしょうね。
でもハードウェアを知っていたらコンパイラでは不可能な裏ワザが使えたり超高速動作が出来たりします。

> 機械言語はどうやってCPUが理解してますか?
→ コンピューターは "1" "0" で動作していると言われますが、ウソです。あるのは電圧の高い状態と低い状態だけ。これらをいくつかまとめた組み合わせを数値や文字に当てはめているいるだけです。
CPUはメモリーから取り込んだ命令のH、Lの組み合わせから何をするのか判断しています。その判断回路はANDゲートやORゲートを組み合わせたロジック回路です。
ジャンプは一見複雑な動作に思えるかも知れませんがジャンプ先のアドレスをプログラムカウンタに転送しているだけです。このとき直前の演算結果である=とか>の条件を併用すれば条件ジャンプになります。
前記の8080や6800の命令は8bitで表現されています。8bitだと256種の命令を表現できますが、両者とも240個ぐらい定義されていたと思います。事実上8080の後継品だったZ80は命令数が400ぐらいあったので8bit一発では足りず16bitの命令がたくさんありました。
    • good
    • 0
この回答へのお礼

お答えありがとうございます

お礼日時:2024/06/25 11:20

「機械語01」とやらがなんなのかさっぱりではあるが, CPU の仕様書を読めばわかる.

    • good
    • 0
この回答へのお礼

そうなんですか?アーティクスチャーで決まるのですかアーティクスチャーはどうやって動作してますか?

お礼日時:2024/06/23 22:28

CPUの中に01の組合せと実行する機能の対応表が組込まれていて、読み込んだ命令に合わせてスイッチを切り替えて対応する機能を実現する回路に「値」を渡して計算結果を保存します。



例えば 命令が 0001 だったら「足し算回路」に接続、0010 だったら「引き算回路」に接続、といった具合に。

それぞれの回路は、更に必要な情報を命令の続きから読み出します。
例えば「足し算回路」なら「『A』と『B』を足して『C』に記憶する」となっていて、A,B,Cにあたる内容を命令の続きから読みだします。


命令を増やすには回路を大規模にする必要があります。
回路規模とか性能とかコストとか消費電力とか、いろいろ考えたら限界があります。

高機能になればそれだけ多くの命令が必要になります。
それぞれを区別するためには、それだけビット数が必要になります。

この手のものは、メリットもデメリットもあります。全てに優位な方法などありません。
そこで、それぞれのCPU設計者がそれぞれの取捨選択をした結果が、CPU毎に異なる機械語です。

例えば。
掛け算はあると便利ですが、足し算に比べると複雑な回路が必要になります。
速度、機械語の複雑さの軽減等のメリットがありますが、コスト面ではデメリットになります。

一方で、足し算を組合せれば「掛け算プログラム」を作ることも可能なので、掛け算は不要とも言えます。
「掛け算回路」が無いCPUを作れば「掛け算命令」は不要になり、その分別の命令を増やしたり、命令長を減らしたりできます。
    • good
    • 0
この回答へのお礼

お答えありがとうございます
CPUの中に01の組合せと実行する機能の対応表が組込まれていてとは、対応表もプログラミングで書いて動作させてるんですか?

お礼日時:2024/06/23 20:10

人間が書いたり読んだりできるプログラミング言語は「高級言語」であって、その高級言語で書かれた「ソースコード」を、機械(コンピュータ)が実行できる「機械語で書かれたオブジェクトコード」に変換して実行します。


その「変換」を「コンパイル」と呼び、ソースコードをオブジェクトコードに変換するプログラムを「コンパイラ」と呼びます。

参考「コンパイル」

https://e-words.jp/w/%E3%82%B3%E3%83%B3%E3%83%91 …

オブジェクトコードは計算機メーカ、機種によって異なりますが、「高級言語」としての「プログラム言語」は文法などが標準化されて、メーカや機種に依存せずに汎用で使えるようになっています。
    • good
    • 0
この回答へのお礼

お答えありがとうございます

お礼日時:2024/06/23 08:42

>>機械言語はどうやって決めてるんですか?



CPUのメーカーが決めています。

>>機械言語はどうやってCPUが理解してますか?

CPUの回路が決められた通りに動作するだけです。
電球のスイッチをONにしたら、光るというのと同じようなもの。
電球の頭脳がスイッチがONになったと理解して、そして光っているのではありません。
    • good
    • 0
この回答へのお礼

お答えありがとうございます

お礼日時:2024/06/23 08:42

決め方もCPUによって様々です。

。。
クロックに依存してる考え方のやつとか、回路の方に依存してたり、
命令長に制限もたせて選抜したり。

今は、昔との互換性取るために内部でコード組んでいたり、
並列動作に重きをおいて回路組んだりと多様化してますね。
    • good
    • 0
この回答へのお礼

お答えありがとうございます

お礼日時:2024/06/23 08:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A