質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.07%

CPUは、なぜ命令を認識できるのか?

解決済

回答 15

投稿 編集

  • 評価
  • クリップ 21
  • VIEW 6,984

panta

score 5

[質問]
電気信号は「0」「1」の2つしか認識できないのに、どうしてCPUの命令セットや機械語、アセンブラ、C言語、HTMLなどの文字を認識させることができてのですか?どうしたらそんなことができるようになるのですか?

[私のベストアンサー]
CPUは「認識」なんかしていませんよ。
より原始的な自動機械であるオルゴール、あれは、音楽を認識しているわけでもなく、さらには「音」を認識しているわけでもなく、単に特定の位置に突起のある原盤(っていうのかな?)に板が引っかかって弾かれて音が出る、それだけの機械です。結果として音楽を奏でているわけですが、しかしそれは「演奏」とは言い難いのでは。
CPUも一緒。ある電気的なレベルの組み合わせが与えられたら決まった動作をすることになっている機械でしかないのです。決まった入力を与えると決まった結果が得られるとしても、機械は認識も理解もしていません。


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • panta

    2020/05/31 22:29

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

  • Kenji.Noguchi

    2020/06/02 18:11

    「リレーで作るコンピュータ」でググってみてください。機械的な電磁石のスイッチ1000個程度で4bit CPUくらいなら作れるようです。Youtubeに動画もありますからみてみると面白いですよ。その昔デバッグとはリレーに挟まった虫を取ることだったとか。

    キャンセル

  • panta

    2020/06/04 22:21

    「リレーで作るコンピュータ」でググってみました。
    CPUやトランジスタでないとコンピュータは作れないと思っていましたが、リレーでも作ることができるんですね。CPU、コンピュータのことを間違って理解していたことを知りました。回答ありがとうございます。

    キャンセル

回答 15

checkベストアンサー

+23

CPUは「認識」なんかしていませんよ。

より原始的な自動機械であるオルゴール、あれは、音楽を認識しているわけでもなく、さらには「音」を認識しているわけでもなく、単に特定の位置に突起のある原盤(っていうのかな?)に板が引っかかって弾かれて音が出る、それだけの機械です。結果として音楽を奏でているわけですが、しかしそれは「演奏」とは言い難いのでは。

CPUも一緒。ある電気的なレベルの組み合わせが与えられたら決まった動作をすることになっている機械でしかないのです。決まった入力を与えると決まった結果が得られるとしても、機械は認識も理解もしていません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/31 22:29 編集

    「オルゴール」なんとなく分かることが出来たように感じました。回答ありがとうございます。

    キャンセル

+8

中国語の部屋というたとえ話がわかりやすいかと思います。

ごく大雑把に言えば、「このビット列」が来たら「こういうことを行う」というのがひたすら並んでいます。CPUを外から見ている人間は、それを「命令」とよぶ、というだけの話です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 23:41

    どのような答えを期待していますか?(そもそも的はずれな箇所について回答してしまいかねないので、事前に確認しておきます)

    キャンセル

  • 2020/05/30 23:51 編集

    今の私では、教えていただいている内容がよく理解できません。
    せめてmaisumakunさんの考え方をもっと分かるようになりたいと思って先ほどのような質問をしました。
    ただそれだけです。

    キャンセル

  • 2020/05/31 22:30

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

+6

CPUの仕組みをちゃんと理解しようとすると、アナログ回路の知識から必要です。論理ゲートでは抽象度が高すぎます。大学のコンピュータ・サイエンス系の学部だと実際にそこからやらされます。IntelとかでCPUの設計している人たちも基本的にそこから把握しています(もちろん役割分担はあるので、ロジックレイヤでやってる人たちは物理層の人たちと比べれば「詳しくない」みたいなのはあり得ますが)。

ということで、バイポーラトランジスタでAND, OR, NOTを書くとどんな感じなのかを置いておきます。トランジスタ選んで定数決めないと実際には動かないし、そもそも実用的ではない(使えなくはないが、今どきのCPUではまず使われないという回路)ものなので、あくまでも抽象的な一例として捉えてください。

イメージ説明

それぞれの回路の一番上に電源が繋がっています。普通は5Vとか供給します。で、下に置いてあるのはトランジスタと抵抗の記号です。トランジスタのベースに繋がっている抵抗はベース電流の大きさを決めるためのもの、ANDとORではエミッタ、NOTではコレクタに繋がっている抵抗はこれとコレクタ-エミッタ間の抵抗(というと語弊があるが、要するに導通の度合い)とで分圧回路を構成するためのものです。とりあえず、トランジスタは導通したときは分圧抵抗よりはるかに低い抵抗値になり、導通していないときははるかに高い抵抗値になると捉えておけば今はオッケーです。

A, Bが入力になり、ここに電圧をかけてやります。そうするとベースに電流が流れて、トランジスタが導通しそうになります。しそうになる、というのは、そもそもベース電流すら流れてくれない場合もあるからです。ANDの場合は、二つのトランジスタが導通したときにYが引っ張られて上に上がります(VBEがあるので電源電圧よりは低い電圧になりますが)。ORはどちらかのトランジスタが導通すればいけます。NOTはむしろエミッタ接地回路と捉えた方が解説を見つけやすいと思います。

ロジック回路では入力電圧はハイとローだけ考えます。ハイは電源電圧、ローは0Vと普通は考えますが、実は電源電圧まで上がらなかったり0Vまで下がらなかったりすることがおうおうにしてあります。でも、スレッショルド電圧という概念を導入して、その電圧未満ならロー、以上ならハイとかみなすことにします。ANDというのはAとBにハイを入れたときだけYがハイになる回路です。ORはAかBどちらかハイになっていればYもハイになる回路です。NOTはAをハイにするとYがロー、AをローにするとYがハイという回路です。要するに、電圧がハイかローかで状態を表すということです。

とりあえずこれくらいの道具立てがあれば、NANDが作れて、ラッチ、フリップフロップとかにだっていけます(こんなの組み合わせるよりもっと効率のいい組み方は幾らでもあるのですが)。頑張ればトランジスタと受動部品を山ほど買ってきてCPUを作ることは現実に可能です、というかその世代の人は大半が鬼籍に入ってるくらいのコンピュータ黎明期の時代だと実際にそれで作っていたそうです。今でも電子工作でやる人がいますが、よほどの猛者というかただの変態です(褒め言葉)。

TTLでCPUを作る組立てキット・トランジスタでCPUを作る組立てキット・TK-80互換マイコン組立キット・Z80マイコンボード・BASIC制御マイコンボード
トランジスタでコンピュータを作るキット---CPUもメモリもトランジスタで製作

さすがにトランジスタだときつすぎるので、汎用ロジックICくらいでやるのが一般的です。この分野の日本語の名著があるので、買って読んでみるとイメージが深まるかもしれません。

CPUの創りかた | マイナビブックス

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/01 12:56

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます

    キャンセル

  • 2020/06/03 01:57

    「CPUの創りかた」を買って読んでみる気にはなりましたか?

    キャンセル

  • 2020/06/03 02:36 編集

    申し訳ありません。返答方法で漏れていました。
    書籍の紹介「CPUの創りかた」も一読してみたいと思っています。
    指摘いただきありがとうございます。

    キャンセル

  • 2020/06/03 04:24

    また、「CPUの仕組みをちゃんと理解しようとすると、アナログ回路の知識から必要です。という指摘は助かります。そして、「TTLでCPUを作る組立てキット・トランジスタでCPUを作る組立てキット・TK-80互換マイコン組立キット・Z80マイコンボード・BASIC制御マイコンボード、トランジスタでコンピュータを作るキット---CPUもメモリもトランジスタで製作」のURLリンクやバイポーラトランジスタを使ったAND, OR, NOT回路の作り方についての説明もありがとうございます。

    キャンセル

+3

なぜ、「0」「1」の2つしか認識できないCPUが、CPUの命令を認識することができるのでしょうか?

CPUの命令や扱うデータはすべて 0 と 1 で表現されているからです。

追記

質問が変わったので、コメントはしていますが、後で見る人のために、回答にも追記しておきます。

なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか?

01の並びを、それらのものと認識しているのはCPUではなくて、プログラマーなどの人間です。
CPUは01の並びの意味に関知しません。

一部、01の並びを数値表現と見做して演算する命令や、真偽値と見做して論理演算を行う命令もありますが、とある01の並びにどの命令を使うかは人間の判断なので、人間が意味を決めていることに違いはありません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 21:17

    > C言語、HTMLなど

    C言語やHTMLのCPUの外の人間の認識の話なので、同じです。

    やはり、まず「コンピューターの仕組み入門」的な本を読むところからでしょうか。

    キャンセル

  • 2020/05/30 21:27

    私は、人間の認識の話をしていたんですね。
    「「コンピューターの仕組み入門」」的な本を読むところから始めると良いんですね。
    もう一度読み直してみます。
    教えていただきありがとうございます。

    キャンセル

  • 2020/05/31 22:30

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

+2

CPUに「0」「1」の組み合わせで「命令?」「値?」「役割?」を一覧表のように設定することができるのか?なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか?

最近のCPUだと複雑になってるので、内部構造が分かりにくいかもです。ちょっと不古めのCPU(Z80 etc)の解説とかが良い?
「機械語 命令セット」とか(googleお勧め)で検索するとそれっぽいのがあるでしょうか?

まず、CPUは 0/1 しか認識できないというのは違います。例外はありますが、複数の 0/1 のセット(On/Off)を同時に認識します。32bit CPUならば、32個。(何が 32bit CPUかと言う定義はちょっと置く) この場合、同時に入る 32bit(個)の On/Off の組合せが、CPUの命令となります。
CPUの動作としては、この32bitのデータを次々と読み込むことで、CPUへの命令と認識します。
では、この次々と読み込むためにはどうするか? 読み込む場所を示すためのデータを別の (例えば) 32bitの On/OffでCPUは出力します。(読み込みアドレス) 一組の32bitを読み込んだら、次の32bitを読み込みます。これを繰り返す事で、CPUは、CPUへの命令を取り込みます。
(現実のCPU(ハードウェア)では、データ入力/出力、アドレス出力が同じだったり、違ったり、または? なんて事も)

「命令?」「値?」「役割?」

これは、読み込んだ命令(上記だと 32bitのデータ何個か)を見てCPUが判断します。(→ 命令セット)

「数字」「文字」「記号」「区切り」

こちらは、CPUの判断と言うよりは、解釈する方の問題。 CPUにできるのは、ある入力(例えば、11000111)に対し、決まった規則に基づいた出力(例えば、00111000) を出力すること。これが、数字なのか、文字なのかは、(多くの)CPUでは不明です。(例えば、C言語では、文字 'A' × 10ができます) データを扱う側(プログラム言語とか)で決定します。

こんなところでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 16:25

    初期の電子回路は、主にトランジスタで構成されていました。今は、LSIでしょうか? (最新技術は?です) 中身は、素子としては、FETと聞きます。これは、電界効果トランジスタですが、動作原理が電流→電圧となっています。そんな意味も含めて、中身はトランジスタじゃない、、と。トランジスタの原理を全て理解しても、それは今のCPUの(主な)構成要素では無いという事です。(もうすぐ、量子?)
    ここで、CPUの原理を知りたいという事は、CPUを使いたいためだと思うので、このような物理的原理よりは、動作的な問題、、チューリングマシンとかの理論が大事かと、、、(今、思った)
    CPUの中身をブラックボックスと考え、入力→出力 という見方もありと思います。自動車が、ガソリンを燃すエンジンと、駆動軸に接続されたタイヤをハンドルで制御し、ブレーキは.... と考えたら、車の運転に辿り着くのは大変という事です。(個々の要素は時代で変わるし) まずは、スイッチを入れ、次は、どうするみたいな視点から始めた方が良いのでは? という事です。
    スペシャルなチューニングをしたいというなら、別ですが。

    キャンセル

  • 2020/05/30 17:22

    動作的な問題が知りたいなら、「CPUの原理」を知ることよりも「チューリングマシンとかの理論」を知ることの方が大事だということですね。

    少しチューリングマシンについて調べた限りでは、遠からず近からずという感じでまだ理解できていませんが、今はCPUを使いたいとは思っていないので、「チューニング」から理解して回答の内容が判断できる程度までにはレベルを上げれるようにして行きたいと思います。
    回答ありがとうございます。

    キャンセル

  • 2020/05/31 22:30

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

1桁では2通りの値しかありません。ただし、複数の桁数を使えば複数の値を作り出すことができるからです。

私達も0-9の10通りのみの記号でこれ以上の数字を使っています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/27 22:28

    コンピュータ上の0と1は例えば対地電圧の5Vと0Vで実現します。これは物理量なのでアナログ回路を使ってハードウェア的に作ることができます。また、半導体とアナログ回路を使って基本演算回路であるNANDゲートを作ることができます。さらに、NANDゲートを複数組み合わせればあらゆる論理計算回路を構築できます。

    加えて、2つのNANDゲートの出力を互いの入力の1つに接続する回路をフリップフロップと呼びます。フリップロップは同一入力であっても、その場は同一出力とは限りません。過去の状態に応じて出力が変化するからです。フリップフロップは記憶素子に使用されます。

    キャンセル

  • 2020/05/30 15:17

    回答ありがとうございます。
    返答が遅くなり申し訳ありません。
    回答していただいた内容をヒントに自分なりに再検索などをして理解しようとしたのですが、今だ「これ!」といったものを見つけることはできませんでした。
    回答していただいたことはうれしいのですが、今の私の理解度では、求めていた回答かどうか判断ができません。どう質問をして良いかも今は分かっていません。まずはお礼まで。

    キャンセル

  • 2020/05/31 22:30

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

ざっくり言うと「そういう回路になっている」からです。
0,1のこの組み合わせが来たら足し算をする回路を動かす、あの組み合わせが来たらメモリからデータを読む回路を動かすみたいな感じです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/27 21:58

    回答ありがとうございます。
    0,1のこの組み合わせが来たら足し算をする回路を動かす、あの組み合わせが来たらメモリからデータを読む回路を動かすみたいな感じのことを命令?定義?設定?がされているから動くんだろうなというのは分かります。ただ、その定義がどうして電気信号の「ON」「OFF」(「0」「1」)の組み合わせからできるのか?が分かりたくて質問しました。

    キャンセル

  • 2020/05/27 22:08 編集

    電気で操作できる電気のスイッチが複雑に繋がりあってるからです

    このスイッチを組み合わせるとand回路とかnot回路とか基本的な論理回路が作れて
    さらにこれを組み合わせに組み合わせまくると、入力が特定のビットパターンか判別する回路とかが作れます

    これでも納得できないなら論理回路(デジタル電子回路)を学んでください

    キャンセル

  • 2020/05/27 22:12

    回答ありがとうございます。
    論理回路(デジタル電子回路)を学んでみます。

    キャンセル

  • 2020/05/31 22:30

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

CPUに「0」「1」の組み合わせで「命令?」「値?」「役割?」を一覧表のように設定することができるのか?なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか?

CPUという機械が認識しているモノとプログラム(を書いた人間)が認識しているモノの区別が付いていないようです。
CPUに対しては、「命令」と「値」の区別しか意味を持ちません。(「値」の中で「アドレス」を別と見ることもできるかもしれない)

CPUの内部を簡単に説明しますと、
まず算術演算や論理演算をするユニット、Arithmetic Logic Unit(ALU)があります。ANDやOR等の論理ゲートでできています。
ALUにレジスタやメモリから線をつないで値を入れ、どの演算をするかの信号を入れると、求める結果が出るので、それをレジスタやメモリにつなぎます。
ここで、ALUにどのレジスタやメモリのアドレスからつなぐかを切り替える回路があります。これも論理ゲートでできています。
ALUの演算を切り替える信号や、ALUへの入力を切り替える信号が、「命令」(機械語)です。メモリから別の経路を通ってつながっています。

というわけで、CPUにとって値と命令は、入れる口が違うので区別されます。これをCPUが値と命令を認識していると言うこともできるでしょう。
命令を入れる口から「『値』だとあなたが思っているもの」を入れたとしてもそれは命令として解釈されます。
その他の、数と文字の違いなどはプログラムでの区別です。これを認識しているのはプログラムを書く人間です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 15:17

    回答ありがとうございます。
    返答が遅くなり申し訳ありません。
    回答していただいた内容をヒントに自分なりに再検索などをして理解しようとしたのですが、今だ「これ!」といったものを見つけることはできませんでした。
    回答していただいたことはうれしいのですが、今の私の理解度では、求めていた回答かどうか判断ができません。どう質問をして良いかも今は分かっていません。まずはお礼まで。

    キャンセル

  • 2020/05/31 22:29

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

CPUとして、論理回路による演算装置を考えた場合

「CPUなどの機械は「0」「1」の2つしか認識できません」

この表現は、とある省略があります。
正確には、「「0」「1」のデータが どこから、あるいは何番目に入力されたかを認識する事ができます。」

前者の「どこから」については自明かと思いますので割愛します。
「何番目」については、カウンタ回路とクロック回路での同期を行うことで可能です。
(チューリングマシン的な入出力を考える時に必要なだけで、実際には前者によって複数本の0or1を同時に入力しています。)

これにより、複数の0or1情報をまとまった値として扱っているように見せることができます。


どの階層の話なのかわかりませんが、電気信号云々から論理回路的な話をしてみましたが
もっと電気信号よりの論理ゲートの仕組み的な話でしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 15:16

    回答ありがとうございます。
    返答が遅くなり申し訳ありません。
    回答していただいた内容をヒントに自分なりに再検索などをして理解しようとしたのですが、今だ「これ!」といったものを見つけることはできませんでした。
    回答していただいたことはうれしいのですが、今の私の理解度では、求めていた回答かどうか判断ができません。どう質問をして良いかも今は分かっていません。まずはお礼まで。

    キャンセル

  • 2020/05/31 22:29

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

考え方が逆です。
命令をCPUに埋め込んだ結果、命令コードが決まり、それを人間がわかりやすいように一覧表を作っているだけです。

例えば、電球とスイッチが3組あったとして、3本の線各々に電気を通すとスイッチが繋がり電球が光り、電気を止めるとスイッチが外れ電球が消えるとします。
この場合、全点灯が111、全消灯が000になり、これ以外の数字の命令も決まります。

ただ、この場合でも、CPUは命令を解釈して実行している訳ではなく、コードのままに信号のOn/Offを決めているだけです。

また、CPUは、「数字」「文字」「記号」「区切り」を区別しません。
電気信号の組(2進数のデータ)を指定箇所とやり取りするだけです。
出力装置やプログラム内のルールで、その意味が変わりますが、CPUはその差を認識しません。

文字コードというの聞いたことがあるかと思いますが、人間が文字だと思っているデータも、内部的には文字コードという数字でしかなく、CPUにとっては、電気信号の組です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/30 15:16

    回答ありがとうございます。
    返答が遅くなり申し訳ありません。
    回答していただいた内容をヒントに自分なりに再検索などをして理解しようとしたのですが、今だ「これ!」といったものを見つけることはできませんでした。
    回答していただいたことはうれしいのですが、今の私の理解度では、求めていた回答かどうか判断ができません。どう質問をして良いかも今は分かっていません。まずはお礼まで。

    キャンセル

  • 2020/05/31 22:29

    みなさんの回答内容を理解するためのヒントになりました。ありがとうございます。

    キャンセル

0

あなたの疑問に完璧に答えてくれる書籍がありますので紹介させてください

「コンピュータシステムの理論と実装 モダンなコンピュータの作り方」オライリージャパン

半導体素子のレベルから始めて最終的にプログラミング言語を解して動作するアプリケーションを作るところまでを解説してくれる良書です

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/03 02:28 編集

    書籍の紹介「コンピュータシステムの理論と実装 モダンなコンピュータの作り方」オライリージャパン」ありがとうございます。
    一読してみます。回答ありがとうございます。

    キャンセル

0

CPUは単にON/OFFの連鎖だけです。
こっちのスイッチをONにする(キーを押す)とそこからのON/OFFの連鎖が画面など、見てわかる変化になって現れるようにうまいこと作ってあるだけです。認識とか、判定とか、そういうものは一切ありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/03 02:28

    「CPU自体は人間の言葉を理解しているわけではない」ということですね
    回答ありがとうございます。

    キャンセル

0

あなたがキーボードの「A」のキーを押したとき何が起こるでしょうか。一例を示しましょう。

  1.  キーボードからUSBケーブルを通じて「00011100(0x1C)」(*1)というデータが送られます。
  2. CPUはこれをWindowsなどのOSに教えます。OSはこれを「01000001(0x41)」(ASCIIコード)に変換します。(Shiftキーが押されていたか、caps lockされていたとしましょう)
  3. OSはさらに現在アクティブなアプリケーション(例えばエディタ)に「01000001(0x41)」を伝えます。
  4. エディタは「01000001(0x41)」に対応したフォントの画像を表示するように、OSに依頼します。
  5. OSはフォントデータから「01000001(0x41)」に対応した画像のビット列を読み出して、ビデオメモリに書き込みます。
  6. ビデオメモリに書き込まれたビット列は、ビデオカードからHDMIケーブルを通じてディスプレイに送られ、そこでピクセルごとにそれぞれ光ります。

このプロセスを通じて一切「A」が出てこないことに注意してください。キーボードもCPUもOSもディスプレイも、扱うデータを「A」だとは思っていません。何らかのビット列を命令通り処理しているだけです。

キーボードの「A」という刻印のキーを押したあなたが「『A』を入力した」と思い、ディスプレイの光の形を見てあなたが「この形はアルファベットの『A』だ」と認識しているのです。

このような人と機械の協調がうまく働くように、先人たちによってコード体系やハードウェアとOSの連携が設計されているのですね。

*1)スキャンコード。キーボードのキー位置に番号を振ったもの。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/03 03:06

    プログラミング言語だけでなく、キーボードやディスプレイもCPUと同じでそれぞれ動作が人間側の思考とは関係なく動いているんですね。
    しかも、キーボードとOSは違う言語を使っているとは知りませんでした。
    回答ありがとうございます。

    キャンセル

0

実に面白いオープンクエスチョンだと思います。解決済の質問に回答するのは無粋ですが、逐次マジレスさせていただきますので楽しんでいただければと思います。

CPUは、なぜ命令を認識できるのか?

タイトルからして興味深いです。CPUは命令を認識します。なぜかというとCPUの設計者がそういう機械を作ったからです。認識するとはどういうことでしょうか。認識するというのは「分かる」ということではないでしょうか。もう少し具体的に言うと「噛み砕いて理解する」ということなのですが、「理解する」ということより「噛み砕いて」のほうが重要です。人間がある物事を理解するということは、ある物事を他の物事に分解できたということです。しかし物事を基本的なことに分解していくと、実は分かっているというよりも分かっている気になっていることのほうが多いです。

例えば、数学というのは厳密な学問ですが、基本的な数学の考え方は、少ない公理(前提)から出発して結論を導き出すということです。ここで数学の公理というものは理不尽です。それ自体は説明されないからです。それ自体は読者が納得しなければならない、納得できなければその先には進めない、というようなものです。

その視点で見ると、人文科学の分野においても「基本的」で「当たり前」なことが多く、その事自体は説明されていないことがあります。辞典などで説明を参照しようとすると循環参照におちいることが多かったりします。

電気信号は「0」「1」の2つしか認識できないのに、どうしてCPUの命令セットや機械語、アセンブラ、C言語、HTMLなどの文字を認識させることができてのですか?

他の回答者様もおっしゃっていたことですが、電気信号を1つだけでなく、まとまりで見ることで実現させています。0または1の信号のことをビット(bit)と言います。8個の信号をひとまとめにして1バイト(byte)と言います。これは1980年台あたりでは「8ビットを1バイトにする」ということは当たり前でなく、「5ビットを1バイトにする」「7ビットを1バイトにする」といったこともたびたびあったようです。現在においては1バイトは8ビットです。

「CPUの命令セットや機械語、アセンブラ、C言語、HTMLなどの文字を認識させることができるのか」ということですが、まず、CPUはそのCPU特有の命令セットしか認識しません。機械語というのは命令セットとほぼ同義です。アセンブリ言語は機械語に対応したテキスト表現です。ここで重要なのはテキスト表現というのはASCII, Shift_JIS, UTF-8などの文字コードによるデータのことです。アセンブリ言語は人間が認識するものでありCPUが認識するものではありません。アセンブリ言語で記述されたソースプログラムはアセンブラによって機械語に変換することができます。C言語のソースプログラムも同様にテキスト表現であり、コンパイラによって機械語に変換することができます。HTMLはブラウザ上で組版を行うためのマークアップ言語です。組版というのは文章を見やすくするために文字を大きくしたり左寄せ、右寄せなどをおこなったりすることです。

結論です。CPUは機械語を認識します。アセンブラ、コンパイラ、ブラウザは機械語であり、実行できるデータ、つまりソフトウェアと呼ばれています。CPUはアセンブリ言語、C言語、HTML言語を認識しません。

どうしたらそんなことができるようになるのですか?

どうしたらそのようなことができるのか。それは、システムを正しく設計することです。システムというのは仕組みのことですが、CPUやソフトウェアなどを含んだもののことを言います。具体的には「Windows PC」や「Macbook Pro」、スマートフォンなどがそれに該当します。

どうすればシステムを正しく設計することができるか。それは既存のシステムを少しずつ拡張・改変していくことです。それはさかのぼればパスカルの機械式計算機などに行き着くわけですが、まさに機械式計算機はオルゴールと同様の機構を備えているというわけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/03 04:02 編集

    私としては、解決済の質問であったとしても回答いただくことは大歓迎です!
    CPUは機械語(命令セット)だけを認識するように設計されている。アセンブラ、コンパイラ、ブラウザは人間が決めた機械語に対応したテキスト表現によって作られたものだから、CPU自身は認識していない。そしてパスカルの機械式計算機などから始まり少しずつ拡張・改変されてオルゴールから現在のパソコンへたどり着くということですね。
    回答ありがとうございます。

    キャンセル

0

ほとんど回答は出きっているように思えますが、少し付け加えたいのでひとつだけ。

どうやら、01と命令の間にあるものが何か知りたいとのことで。これにCPUの動作の点から回答したいと思います。

まず、本題から言うと、010110...のような0と1の組み合わせが命令として認識されるのは、命令デコーダが01のパターンに従って多様な制御信号を出力するからです。

以下蛇足

※これから説明することはごく単純なCPUについてであり、現代のCPUは高速化などの背景からもっと複雑です

参考: https://plaza.rakuten.co.jp/cpu4edu/4003/
参考: http://www7b.biglobe.ne.jp/~yizawa/design_cpu/index.html
CPUは、クロックが来るたびに、(基本的には)「フェッチ」、「デコード」、「実行」、「ライトバック」のどれか一つの動作をします。
※ただし、現代のコンピュータはこれらを同時に行うことができます

「フェッチ」は、メモリからCPUにある命令レジスタ(IR)へ、決まったビット数のデータを読み込みます。ビット数は32bitCPUなら32bitといった感じです。

「デコード」は、IRに格納されているデータがどんな命令を表しているか判別します。命令レジスタにあるデータを命令デコーダに通すと、そのビット列がどのような動作を表しているかに従って、制御信号が出力されます。

「実行」は、制御信号によって様々な処理を行います。例えば演算命令であるという信号が1なら演算ユニットからの計算結果を通したり、プログラムカウンタ(PC)をインクリメントしたりします。

「ライトバック」は、制御信号がレジスタへ出力することを示しているならレジスタへ書き込んだり、メモリ出力があればメモリに書き込んだりします。

CPUはこのサイクルを延々と回すことで動いています。

ちなみに、CPUは命令を読み込む時、それが実際には命令なのかデータなのかはわかりません。とりあえず命令と仮定して読み込み、そのまま実行します。なので、データを書き換える命令を使って次に実行される命令を書き換えるといったことも(基本的には)可能です。もちろん、命令と間違えてデータを実行して変な動作になる・・・とかも起こりえます。
※ただし、現代的なOS(オペレーティングシステム)では命令とデータでメモリのどの領域を使うかが分かれており、命令の領域を書き換えようとするとOSが感知して強制終了したりします。すごいですよね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/07 07:04

    thkanaさん「コンピュータは機械として与えられたビット列を粛々と実行するだけ」ということについて、オルゴールを使い説明いただきありがとうございます。教えていただいた説明などを元に何度も振り返ってみた所、「なぜ命令を認識できるのか?」という私の表現方法が悪いと感じました。ただどう表現を修正すれば良いのか?CPUを知るほど感じる不思議についてどういう言葉を使えば伝わりそうか?がまだ見つけられていません。せっかく回答いただいているのに申し訳ありません。「コンピュータは機械として与えられたビット列を粛々と実行するだけ」「デコーダにより命令を認識/理解する」ということを意識して行きたいと思います。

    キャンセル

  • 2020/07/07 07:04

    dodox86さんが指摘されたように、まだ「どうしてもコンピュータ(CPU)が何らかの自我(意思)をもって動いているように見える感覚から抜け出せていないのかもしれません。教えていただいた説明などを元に何度も振り返ってみた所、「なぜ命令を認識できるのか?」という私の表現方法が悪いと感じました。ただどう表現を修正すれば良いのか?CPUを知るほど感じる不思議についてどういう言葉を使えば伝わりそうか?がまだ見つけられていません。せっかく回答いただいているのに申し訳ありません。ところてんの容器を使った説明のように「なんらかの意思は外界から入力として与える人間の力に含まれるものしかない」容器は「入力として出せと命令された」「出力としてところてんを出した」実際は機械的な動作をしているだけ。ということを意識して行きたいと思います。

    キャンセル

  • 2020/07/07 08:13

    ソレを言っちゃあお終いよ、みたいなことなのであまり出したくないのですが、結局、「そう動くように作ったからそう動く」に行き着いちゃいそうですね。

    Z80であれば、00000011 11111110 というビットパターンを受け取ったら、その次の1バイトをAレジスタに入れる、そのように作ってあるから「認識」でも「理解」でもなくそのように動くだけ、なんです。
    激しく簡略化すれば、電池と豆電球を繋ぐと豆電球が点くのを、豆電球が電池を「認識」して点灯する...とは言わないようなものです。
    機械が複雑になると「不思議」感はありますけれど、十分に発達した科学は魔法と変わらなくなるので。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.07%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る