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

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

新規登録して質問してみよう
ただいま回答率
85.48%
機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Q&A

解決済

15回答

4844閲覧

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

panta

総合スコア13

機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

9グッド

24クリップ

投稿2020/05/27 10:20

編集2020/06/01 09:47

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

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


kazuyakazuya, ActiveTK, Luke02561, MOkada, 3812, MorimasaMatsuda, Hiroyuki.W, GenbuHase👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/27 10:53

書籍の紹介「動かしてわかる CPUの作り方10講」ありがとうございます。 一読してみます。
maisumakun

2020/05/27 13:07

「CODE コードから見たコンピュータのからくり」という本もおすすめです(図書館などで探すことになるかと思いますが)。
panta

2020/05/27 13:11

書籍の紹介「CODE コードから見たコンピュータのからくり」ありがとうございます。 一読してみます。
panta

2020/05/31 13:29

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

2020/06/02 09:11

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

2020/06/04 13:21

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

回答15

0

ベストアンサー

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

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

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

投稿2020/05/30 23:47

thkana

総合スコア7629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/03 02:52 編集

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

0

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

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

投稿2020/05/27 12:31

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/27 12:43

回答ありがとうございます。 「このビット列」が来たら「こういうことを行う」命令?定義?設定?がされているのは分かります。ただ、その定義がどうして電気信号の「ON」「OFF」(「0」「1」)の組み合わせからできるのか?が分かりたくて質問しました。
maisumakun

2020/05/27 12:49

どこまで基礎知識があるのかが気になりますが、「論理ゲート」はご存知ですか?
panta

2020/05/27 12:55

「論理ゲート」の存在は知っています。 AND、OR、NOTなどの組み合わせ回路のことだと思っているのですが…。 「論理ゲート」の使い方は、まだよく分かっていません。
maisumakun

2020/05/30 12:43

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

2020/05/30 13:42

申し訳ありません。「認識していません。人間がそう見ているだけです。」という理由が私にはよく分かりません。 では、なぜモニタ画面でプログラムを打ち込むことができるのでしょうか? CPUの命令セット(機械語)はHDLなどの言語を使いのプログラムを打ち込みプログラムを作ります。 ソフトウェアとCPUの連携はアセンブラなどの言語を使いプログラムを打ち込みプログラムを作ります。 アプリなどは、C言語などの言語でプログラムを打ち込みプログラムを作ります。 ホームページは、HTML言語などの言語でプログラムを打ち込みプログラムを作ります。 すべての工程でモニタ画面でプログラムを打ち込んで何かを作っています。 トランジスタや抵抗、半導体が「文字」を認識していない。という所はなんとなく分かります。 しかしCPUやメモリ、パソコン、スマホなどは「文字」を認識しているからプログラムを打ち込むことも出来ます。制作したプログラムを使うことでゲームが出来たり、Webサイトを閲覧できたりしています。 今分かっていることは、どこまで行ってもモニタ画面でプログラムを打ち込んで作っているということ。CPUなど電子部品自体は「文字」を認識していないらしいということ。 ただこの境界線をつないでいるのは一体何なのか?については、まだ解説している場所を発見できていません。だから質問をしています。 ただ、私の質問のやり方によって混乱をさせてしまっているようです。 もしかするとこの返答も論点がズレているのかもしれません。 もし論点がズレているのならば、それはまだレベルが追いつけていないからなのかもしれません。みなさんのアドバイスを参考にして回答内容が理解できるようにして行きたいと思います。 ありがとうございます。
maisumakun

2020/05/30 13:49

> しかしCPUやメモリ、パソコン、スマホなどは「文字」を認識しているからプログラムを打ち込むことも出来ます。 認識していません、あくまで回路は「これが来ればこう返す」という処理を行っているだけです。意味を認識するのは人間の側です。
maisumakun

2020/05/30 13:51

実際にコンピューターの各パーツが行っていることは、「特定の信号が来れば特定の動作を行う」ことで、そこに「意味」という概念は存在しません。
maisumakun

2020/05/30 13:57

> では、なぜモニタ画面でプログラムを打ち込むことができるのでしょうか? 壁にあるスイッチを入れれば、部屋のランプが点灯するとして、スイッチやランプは人間の意志を「認識」しているといいますか? 表示や入力の過程が煩雑になっているだけで、コンピューターも同じことです。
panta

2020/05/30 14:26 編集

壁にあるスイッチを入れれば、部屋のランプが点灯するとして、スイッチやランプは人間の意志を「認識」しているといいますか?その考え方はよく分かりません。 スイッチを入れるか入れないかは人間が決めています。スイッチを入れれば、部屋のランプが点灯するのは、スイッチを押すという物理的動作をするからスイッチが入りランプが点灯しているのでスイッチを入れるという動作そのものが人間の意志とスイッチの動き、ランプの点灯をつなげているものと思います。逆に、人間の意志だけでスイッチに触らずスイッチを入れてランプを点灯することはできないと思います。 間違っているのならば申し訳ありません。
maisumakun

2020/05/30 14:25

何をもって「認識している」と言っているかがはっきりしないので、議論が成り立たないと思っての確認の質問です。 > その考え方はよく分かりません。 「認識している」か「認識していない」以外の反応が来ることは想定していませんでした。
panta

2020/05/30 14:31 編集

期待した返答でなく申し訳ありません。
maisumakun

2020/05/30 14:32

「人間が特定の操作を加えれば、電気的に動作をして特定のレスポンスを返す」という意味では、壁のスイッチもパソコンも仕組みの複雑さは違えど、共通するものです。 パソコンが何かを「認識している」というのは、そう考えたほうが理解しやすいという、人間側の思考の都合に過ぎないものです。
panta

2020/05/30 14:38

「人間側の思考の都合に過ぎないもの」というのは、どこからどこまでの範囲を意識して「人間側の思考」と言われているのでしょうか?
maisumakun

2020/05/30 14:41

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

2020/05/30 15:55 編集

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

2020/05/31 13:30

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

0

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/05/30 18:13

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/01 03:56

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

2020/06/02 16:57

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

2020/06/03 15:12 編集

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

2020/06/02 19:24

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

0

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

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

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

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

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

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

投稿2020/05/27 11:37

編集2020/05/28 11:35
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/27 11:47

回答ありがとうございます。 質問の仕方が悪く申し訳ありません。 知りたかった内容は、 CPUに「0」「1」の組み合わせで「命令?」「値?」「役割?」を一覧表のように設定することができるのか?なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか?を知りたかったので質問させていただきました。
otn

2020/05/27 11:57

そう定義しているからですね。 例えば多くの環境で、00001010 を「改行文字」と定義してます。 なので、00001010 と等しいかどうかを判断することで、「改行文字か?」という判断をすることになります。 > 「数字」「文字」「記号」「区切り」 のような文字ではありませんが、数値の場合は、 ・2進整数 ・IEEE754形式の2進浮動小数点数 などと見做して数値演算する命令を備えているからです。 全く同じ0と1の組み合わせでも、文脈によって意味が変わります。
panta

2020/05/27 12:21 編集

回答ありがとうございます。 私が知りたい場所は、「そこ!」なんです。 なぜ0と1の組み合わせで、「数値演算する命令」「改行文字」などの「命令?」「文字?」を定義(認識)出来るのかが分からなくて質問をしました。
otn

2020/05/27 12:20

定義は定義なので、単に定義するだけです。 「ASCIIコードでは、00001010 という01の並びを 改行 と定義する」 一般化すると、 「これこれの並びに、これこれの文脈で、これこれの意味を与える」 ということは全くの自由に出来ます。 「isという文字並びに、英単語という文脈で、be動詞の三人称単数形という意味を与える」のと同じです。 逆に、「こういう意味の付与(定義)を自由に出来ないのでは?」と思う理由は何なのでしょうか?
panta

2020/05/27 12:37

回答ありがとうございます。 「定義」というのは、作った人のルールにしたがって定義されているだけ。というのはなんとなく分かります。 「ASCIIコードでは、00001010 という01の並びを 改行 と定義する」 だから、「これこれの並びに、これこれの文脈で、これこれの意味を与える」という意味になる。ということは分かります。 しかし、「00001010 」という数字情報も「is」という文字情報も、「ASCIIコード」や「改行文字」「数値演算する命令」など、事前に定義されているからできることであって、「ASCIIコード」や「改行文字」「数値演算する命令」などが定義されていなければ、ただの「0」「1」の集合体にしかならないと感じています。「ASCIIコード」も「改行文字」や「数値演算する命令」も、電気信号の「ON」「OFF」の論理演算の組み合わせ以外の何か?がないとCPUはただ電気が流れる物体でしかないように思っています。電気信号の「ON」「OFF」の論理演算の組み合わせをCPUで「0」「1」と認識させるためには、どんな定義をすれば「ASCIIコード」「改行文字」「数値演算する命令」というように、、「00001010 という01の並びを 改行 と定義する」「これこれの並びに、これこれの文脈で、これこれの意味を与える」という紐付けをして行けるのかが分かりません。 質問の回答になっているのかな?間違った質問をしていたら申し訳ありません。
otn

2020/05/27 13:07

> 「0」「1」の組み合わせで「命令?」「値?」「役割?」を一覧表のように設定することができるのか?なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか? が質問だと思ったので、それに回答したのですが、 そうじゃなくて、CPUの中の話ですか? まず、00001010 に改行という意味を与えているのは、CPUの中じゃなくて、CPUの外にいるプログラマです。CPUの中には、01のパターンに文字としての意味を与える機能はないです。 例えば01011100は、ASCIIだとバックスラッシュで、JISだと円記号です。どっちであるかはCPUは知りません。文字かどうかすら知りません。 数値演算だけは異なっていて、0011 掛ける 0011 は 1001 という2進数と見做した演算命令をCPU内に持っています。 CPUの中だけの話にすると、01の並びは、 ・2進整数 ・2進浮動小数点数 ・上記の2種類およびそれ以外も含めた01の並び のどれかでしかないです。 数値として扱えるのは、そういう風に論理回路を設計してあるからです。 数値として扱わない場合は、単なる01の並びでそれ以上の物では無いです。
panta

2020/05/27 13:30

回答ありがとうございます。 質問の範囲がCPUの中だけのことか、CPUの外も含まれるのかはよく分かっていません。申し訳ありません。 ただ、CPUは文字かどうかすら知らない(01のパターンに文字としての意味を与える機能はない)のに、なぜ「00001010 」という数字情報や「改行」という文字情報としての意味を与える機能をつけることが出来るのかが分からなくて質問をしています。ただ、「そういう設計をしてあるから」という回答をされてしまうとなんとも返す言葉もありません。が謎が謎を呼んでしまっています。 ただ、「自分の質問内容がCPUの中の質問をしているらしい」ということを知ることが出来ました。ありがとうございます。
otn

2020/05/27 13:36

> なぜ「00001010 」という数字情報や「改行」という文字情報としての意味を与える機能をつけることが出来るのかが分からなくて質問をしています。 これは書いたとおり、その意味づけを行っているのはプログラマ(を含めた開発者)という人間で、人間が01パターンに意味を与えています。 そこが疑問なら、CPUの外の人間の世界の話です。
panta

2020/05/30 06:17

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

2020/05/30 11:00

あなたの質問を置き換えていうなら、 「Excelは表計算ソフトなのに、何故、年間売上集計やら、株価データなどの情報を認識できるのですか?」 みたいな質問です。↑これならわかりますか? もっと言うなら、「本は紙とインクだけなのに、なぜ、文学作品や、科学解説などを表現できるのですか?」かな。
panta

2020/05/30 11:51

私の質問の聞き方は、「Excelは表計算ソフトなのに、何故、年間売上集計やら、株価データなどの情報を認識できるのですか?」と聞いているんですね。 私自身の中では、「Excelは表計算ソフトに文字を入力するにはどうしたらいいのか?」」「本に文字を印字するにはどうしたらいいのか?」というつもりで質問をしていたのですが…。 混乱させたようで申し訳ありませんでした。もう少し伝わりやすい質問方法が見つかってから質問するようにします。アドバイスありがとうございます。
otn

2020/05/30 11:55

であれば、 > 「数字」「文字」「記号」「区切り」 などの言葉を使わないほうがいいです。
panta

2020/05/30 12:16 編集

「数字」「文字」「記号」「区切り」などの言葉を入れた方が分かってもらえそうだと思っていたのですが、「数字」「文字」「記号」「区切り」などの言葉が混乱を招く結果になっていたんですね。 では、「電気信号は「0」「1」の2つしか認識できないのに、どうしてCPUの命令セットやHDL、機械語、アセンブラ、C言語、HTMLなどの文字を認識させることができてのですか?どうしたらそんなことができるようになるのですか?」と質問した方が分かりやすかったでしょうか?
otn

2020/05/30 12:17

> C言語、HTMLなど C言語やHTMLのCPUの外の人間の認識の話なので、同じです。 やはり、まず「コンピューターの仕組み入門」的な本を読むところからでしょうか。
panta

2020/05/30 12:27

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

2020/05/31 13:30

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

0

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/27 12:38

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/30 06:17

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

2020/05/30 06:33

CPUの動きを トランジスタ一個一個の動きから、追う事になってないでしょうか。理屈はそうでもその間に多数の階層があり、それ全てを理解するのは大変ではないかと思います。 CPUは、0/1 で動いてるってのは、一旦、止めて、もう少し上位の階層で理解するようにした方が良いと思います。 あ、うるさい事を言うと、トランジスタ一個一個の動きと言うのは、今はあまり正しくなかったりします。(現実のCPUではトランジスタと言うのは概念でしかない) 車は、エンジンで動くというのももうすぐ、過去のものとなろうとしているように。
panta

2020/05/30 07:25 編集

「トランジスタ一個一個の動きと言うのは、今はあまり正しくなかったりします。」 >>なぜあまり正しくなかったりするのでしょうか? 今回の質問内容からは外れているかもしれませんが、少し疑問です。 CPUを知らない人に伝える時、「たまたま似た動作をするものがトランジスタだった」だから、トランジスタのしくみとCPUのしくみは全然別のものとして考えた方が良い。ということでしょうか?それとも考え方が違うのでしょうか? 「もう少し上位の階層で理解する」というと、どの辺から始めると良いと思いますか?
pepperleaf

2020/05/30 07:25

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

2020/05/30 08:22

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

2020/05/31 13:30

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

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/06/29 17:12

編集2020/06/29 17:20
magf

総合スコア212

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/07/01 15:55

0と1の組み合わせが命令として認識されるのは、命令デコーダが01のパターンに従って多様な制御信号を出力するから。 CPUは命令を読み込む時、それが実際には命令なのかデータなのかはわかりません。とりあえず命令と仮定して読み込み、そのまま実行します。 という「0と1の組み合わせ」について、「CPUは命令かデータか分かっていないまま実行している」ということを教えていただきありがとうございます。「なぜ命令を認識できるのか?」を知れば知るほど「受け取った情報が何かも分からず実行しているはずなのに、多種多様な命令に対して命令通りの結果を返してくれるCPUや0と1の組み合わせで作られたプログラムなど」不思議ですね。回答いただきありがとうございます。
thkana

2020/07/01 23:29

デコードする「から」命令を理解する、という因果関係ではないでしょう。 デコーダが命令のパターンに応じた多様な制御信号を出力して、他の部分がその通りに動く... まさに、オルゴールのピン(命令のパターン) に応じて指定された音を出す(他の部分がその通りに動く)機構そのもの。 「認識」とか「理解」といいたいなら、 デコーダにより命令を認識/理解する デコーダがあるから命令を認識/理解できる とかなら言えるかとは思いますが。 以下余談。「コンピュータが命令を認識する」から移って、コンピュータに与える命令って何? という話になるので。 > 命令と間違えてデータを実行 コンピュータの側が間違えるわけではありません。プログラムの間違いやハード的なエラー等によりプログラムの実行順がおかしくなり、人が意図した命令以外のものを命令としてコンピュータに喰わしてしまって意図した結果が得られなかった、という「事故」です。 いずれにしても、コンピュータは機械として与えられたビット列を粛々と実行するだけ。
dodox86

2020/07/02 00:05

こちらの回答に限りませんが、ちょっと興味深い質問回答、議論でしたね。(私は回答はしませんでしたが注視していました)質問者のpantaさんは、どうしてもコンピュータ(CPU)が何らかの自我(意思)をもって動いているように見える感覚から抜け出せづらい状況に置かれているように思えます。(失礼であったらすみません) 例えばところてんの容器を一方から押し出すと、もう一方からところてんが出てくる。これはただの機械的な動作ですが、ところてんの容器にとって「ところてんを出せ」と命令された --> 自分が内蔵しているところてんを外へ出す、という認識にもとづいた何らかの意思、行動に見えないこともないです。これにあてはめようとしている為に、どうしても違和感がぬぐえないのではないでしょうか。ところてんの容器の例で分かるように、なんらかの意思は外界から入力として与える人間の力に含まれるものしかありません。しかし容器の立場からすると、「入力として出せと命令された」「出力としてところてんを出した」と抽象化することもできます。しかしやっぱり実際は機械的な動作にすぎません。
panta

2020/07/06 22:04

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

2020/07/06 22:04

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

2020/07/06 23:13

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

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/02 12:51

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/03 02:50 編集

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

0

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

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

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

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

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

投稿2020/06/02 09:48

Shinsuke.hase

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/02 18:06

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

0

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

投稿2020/06/02 08:41

MOkada

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/02 17:28

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

0

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

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

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

投稿2020/06/02 08:40

TTsurutani

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/06/03 02:51 編集

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

0

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

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

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

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

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

投稿2020/05/28 11:21

編集2020/05/29 16:03
YT0014

総合スコア1708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/30 06:16

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

2020/05/31 13:29

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

0

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

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

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

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

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


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

投稿2020/05/28 07:48

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/30 06:16

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

2020/05/31 13:29

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

0

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

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

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

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

投稿2020/05/28 00:56

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/30 06:17

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

2020/05/31 13:29

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

0

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

投稿2020/05/27 12:45

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/27 12:58

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

2020/05/27 13:12 編集

電気で操作できる電気のスイッチが複雑に繋がりあってるからです このスイッチを組み合わせるとand回路とかnot回路とか基本的な論理回路が作れて さらにこれを組み合わせに組み合わせまくると、入力が特定のビットパターンか判別する回路とかが作れます これでも納得できないなら論理回路(デジタル電子回路)を学んでください
panta

2020/05/27 13:12

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

2020/05/31 13:30

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

0

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

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

投稿2020/05/27 10:54

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panta

2020/05/27 11:42

回答ありがとうございます。 質問の仕方が悪く申し訳ありません。 知りたかった内容は、 CPUに「0」「1」の組み合わせで「命令?」「値?」「役割?」を一覧表のように設定することができるのか?なぜ「数字」「文字」「記号」「区切り」など電気信号以外の「情報」という形式で認識できるのか?を知りたかったので質問させていただきました。
HogeAnimalLover

2020/05/27 12:24

CPUはレジスタと呼ばれる記憶領域を持っています。CPUの1サイクルで起こり得る事象は、このレジスタ遷移パターン分しか基本的に存在しません。このパターンが全て網羅的に定義されているので、命令を処理することができます。 なお、「基本的」と断りましたが、メモリとかそれ以外の記憶装置や外部機能を使うこともできるわけで、コンピュータは、見た目上はたくさんの機能を持っているように見えます。もちろん、これはCPUとは別の部分の機能があるからです。
panta

2020/05/27 12:51

回答ありがとうございます。 CPUはレジスタと呼ばれる記憶領域があり、「命令?」「パターン?」「定義」されていいるので、「アセンブリ言語」「コンパイラ」などを作ったり動作ができるのはなんとなく分かります。 ただ、その定義がどうして電気信号の「ON」「OFF」(「0」「1」)の組み合わせからできるのか?が分かりたくて質問しました。
HogeAnimalLover

2020/05/27 13:28

コンピュータ上の0と1は例えば対地電圧の5Vと0Vで実現します。これは物理量なのでアナログ回路を使ってハードウェア的に作ることができます。また、半導体とアナログ回路を使って基本演算回路であるNANDゲートを作ることができます。さらに、NANDゲートを複数組み合わせればあらゆる論理計算回路を構築できます。 加えて、2つのNANDゲートの出力を互いの入力の1つに接続する回路をフリップフロップと呼びます。フリップロップは同一入力であっても、その場は同一出力とは限りません。過去の状態に応じて出力が変化するからです。フリップフロップは記憶素子に使用されます。
panta

2020/05/30 06:17

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

2020/05/31 13:30

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問