• ベストアンサー

パソコンのCPUがプログラミングを読むというのがい

パソコンのCPUがプログラミングを読むというのがいまいちイメージがつかめないんですが、ちょっとひねくれたような言い方になってしまいますが Ryzenにレンズとカメラが着いていてそれがプログラミングの0と1や16進数やアセンブリ言語やpythonを読むわけじゃないですよね? CPUがプログラミングコードを読むとはどういうことなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • FattyBear
  • ベストアンサー率33% (1531/4611)
回答No.4

CPUには読むとか見るなどという高度な機能などありません。 プログラミングの0と1は0は電圧無し0Vで1は電圧ありxVで置き換えて動作します。電圧での0,1データーの並びを命令なのかデーターなのかを判断しながら動作します。

okwaveokw
質問者

お礼

>命令なのかデーターなのかを判断 この違いを教えてください

その他の回答 (8)

回答No.9

0と1はHDDやSSDから読み込んでメモリに格納されます。 その上で別のメモリ領域に格納されたOSがCPUに タイミングを見て転送します(OS自身もCPUにロードされています) 転送先はレジスタとは限らず、キャッシュ上に構築された スタックの場合も有ります。 転送された0と1がデータか命令か命令を決めるロジックかは、 その前後の0と1が決めます。 貴殿には難しいでしょう。 正直私にも難しいです。

okwaveokw
質問者

お礼

ありがとうございます

回答No.8

ちょっとだけ。 >Aレジスタにある値(データー)例えば5Eを入れる場合 リテラル/imm8だから、最上位は00だとおもう^^ なので、3E 5Eじゃないか・・・とは思う。 7Fだと、A=Aだと思う。モード01で111=111実行。 モード01はReg,Regモードなので、immにはならない。 モード00の場合にimm代入はreg2が110固定なので、 reg1がAなら、 00 111 110 = 0011 1110 = 3E になるよ!って話。 Z80って上位2ビットが制御モードで、 続く3ビット:3ビットがレジスタの繰り返しフォーマットだから ちょっと懐かしい^^ んま、こういう風にビットに意味を持たせて 機械語って、動いてるんですよね!。 (機械語を理解した後、この意味は分かるかもしれないけど、  この質問だけなら、今はどっちでもいいかもですね) (いつか、この数字がなんやねん!ってのを質問者さんが  理解して、あ~こういうことを言ってたんだ~って  わかってもらえる日があったら、嬉しく思います!)

okwaveokw
質問者

お礼

ありがとうございます

  • FattyBear
  • ベストアンサー率33% (1531/4611)
回答No.7

>命令なのかデーターなのかを判断 16進の数字の並びで判断します。 通常、命令語(16進の数字)のあとにデーターを付けます。 例 Z80 8bit CPU の場合 Aレジスタにある値(データー)例えば5Eを入れる場合 7F5E と表記します。 7Fは Aレジスタに値を入れるという命令語です。 命令とデーターの並びを規定どおりにしないとCPUはエラーになります。ですから厳密にはCPUはその数値が命令なのかデーターなのかは 識別できません。

okwaveokw
質問者

お礼

ありがとうございます

回答No.6

>アセンブリ言語のところで0と1と16進数の説明の話でわからなくなりました >0と1は読めるのに16進数のAは読めないとか >0xは読めるんだかよめないんだか 0x00ってのは「人間の言葉」です。 コンピューターは2進数でも16進数でもありません。 これらは「人間が理解する時に使う言葉」です。 0xA = つまり10進数で10という数字。 これは、2進数では、8x1+2x1=10ですね。 なので、 3ビット目5V 2ビット目0V 1ビット目5V 0ビット目0V とピンに電圧をかけた物が、 「人間がいう所の0xA そしてそれは、  10進数の10、  2進数の1010です。  しかし、半導体には数字なんてなくて、電気のON/OFFだけ  なので、上に書いたように電圧をビットごとに変えた物が、  コンピューターから見た数(数字ではない)になる」 が回答ですよ。 なお、今のコンピューターは最低でも、8ビット以上なので、 16進数で2桁=4ビットx2セット 2進数で8桁=そのまま8ビット となり、 この値をCPUに伝えるとき、最低8本の信号線が必要。 って感じです!。

okwaveokw
質問者

お礼

ありがとうございます

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.5

CPUに繋がる沢山の配線を通って電気信号(電気のOn/Off)でプログラムが読み込まれます。 このあたりの仕組みは「CPUの創り方」と言う本を読むと判りやすく説明されていますよ。

okwaveokw
質問者

お礼

ありがとうございます

回答No.3

>パソコンのCPUがプログラミングを読むというのがいまいちイメージがつかめない ある意味「あなたの方が正しい」事を言ってます。 なにせCPUも今自分がプログラムを実行してることを知らないんですから。 クロック(時計って意味もあるが、この場合は、1回あたりのサイクル) を1回実行して、アドレスが決まり 0x12345678番地(別に数字に意味はない) ってメモリを指すとその中身がCPUに流れてきてますが。 別にCPUはそこを読みたくて読んでるわけじゃなく、 メモリって部品はアドレスを決めればそこにあるデータを データバスにセットするのが仕事だからそうしてるだけ! で、同じようにCPUも、そのデータバスにある状態を 読みたくて読んでるわけじゃなくて、その値で CPUの中の、機能セレクタで何かの処理につながっただけ。 「実行」してるわけじゃなく、どっちかというと 「条件反射」って言い方の方が近い! なので、超極論「2ビットパソコン」があったとして、 0ビット、1ビット 0 0 例えば、制御命令(ジャンプなど) 0 1 例えば、四則演算(アキュームレーターなど) 1 0 例えば、immにレジスタ 1 1 例えば、レジスタにimm ってとき、、 たまたま、11が流れてきたら、 「0ビット目」と「1ビット目」が5Vなら、「レジスタにimm」が 処理できる回路に電気が流れるよ~ってだけで。 CPUは「実行してるつもりなんて、さらさらない!」んですよ。 あくまで、条件反射みたなものなので。 例えば家にある、電気のスイッチ。 別に「電球はスイッチを押されたらつけてるわけじゃない」 単に「スイッチを押すから電気が流れて電球が付いただけ」 これを「実行というか?」ってのと同じです。 単に「そうしたからそうなっただけでしょ?」ってのが CPUの原点だったりします。 それが、次のクロックでアドレスが+1されて、 次の電気的な条件反射・・・と繰り返すので、 人間には「プログラムを実行している」用に見えてるだけで、 CPUは何もしてない!ってのが、ややこしいかもしれないが、 本当のところです。 - ところで、別にこの件、長くても全然!私はいいんですが。 このコンピューターの基本原理を今から覚えても、 多分、あんまり役に立たないと思いますよ。 それと、覚えることで、逆に高級言語の理解が場合により 遅くなることもあり。シンプルに、この投稿以前のように 「何か知らんけどCPUってのは実行してるんだ」って覚えた方が、 コンピューターを使う上ではありですよ。 今聞いてるのはコンピューターを「理解する」の方向性なので。 これを覚えても、そんなに、メリットはないかもです。 ただし、覚える事は絶対損ではないです!。 あんまり役に立たないだけの事なので^^ この件が終わると、フェッチサイクル~エクゼキューションサイクル。ストアとI/O制御。 そしてその後、五大機能とかの話題に移るんでしょうが。 通常学校などで数年かけて、習うような話になるので。 結構長期戦ですよ^^ (私の方は全然かまわないし、  おそらく他の回答者もそう思ってると思う) 時代的に、アセンブラ以下を「なんで?」まで追求すると 楽しめる人と、疲れるだけの人に分かれると思いますよ。

okwaveokw
質問者

お礼

アセンブリ言語のところで0と1と16進数の説明の話でわからなくなりました 0と1は読めるのに16進数のAは読めないとか 0xは読めるんだかよめないんだか

  • FattyBear
  • ベストアンサー率33% (1531/4611)
回答No.2

Ryzenとかpythonが何かは理解できませんが、 単純に説明すると メモリーアドレスに順番に表記された命令語やデーター①を 順番にCPUのレジスタに読み込ませる。つまり①をCPUのレジスタ にコピーすると考えてもいいかも。 アドレスカウンターという0,1,2,3,・・・・と単純に数える カウンタが示すメモリーアドレスの命令語やデーターを順に上記のことをしながら命令を遂行する動作をします。

okwaveokw
質問者

お礼

プログラミング機械語の0と1というのはどこででてきますか?

  • takncom
  • ベストアンサー率16% (15/91)
回答No.1

CPUが、データを受け取るのはデータバスと呼ばれてます。 そのバスが例えば1秒おきに受け取った状態をプログラムを読むとします。 これで分かりますでしょうか? データバスが8本だと8ビットになります。 それぞれのバス、線が電圧が高いかもしくは低い状態がにあります。 最初 1111 0000 1秒後 1010 1010 だったとすると、その2つの状態を読むことが出来るということです。 電圧が瞬時に変化するのです。 だからパソコンやスマホとかは熱くなっちゃうんですよね。

okwaveokw
質問者

お礼

0と1はあるけれど2以上はないんですか?

関連するQ&A