• ベストアンサー

CPUが読み込むのは0と1の2進数ですよね? それ

CPUが読み込むのは0と1の2進数ですよね? それを機械語マシン語というんでしょうか? しかしネットの記事でこういう画像があったんですが、機械語が0と1ではなく 数字と英語の組み合わせになっていたり、0と1を機械語だと言っているサイトもありました。どういうことなんでしょうか?

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

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

前の回答でCPUには16本とか線があると書きましたよね。 その16本の線の状態が55の時、つまり16進数の55という時は以下のようになります。 0000 0000 0101 0101 上記の2進数が16進数では55となるわけです。 これは、分かりますでしょうか?

okwaveokw
質問者

お礼

55がのところはなんとなくわかります2進数で55を表現したということですかね? 16本の線ってなんでしょうか?

その他の回答 (10)

  • heyboy
  • ベストアンサー率21% (1852/8730)
回答No.11

度々、失礼します。 どうもモヤモヤすると 言うか、 その、投げやりではないつもり ですけど、 https://item.rakuten.co.jp/booxstore/bk-4877833617/?scid=af_sp_etc&sc2id=af_113_0_10001868&icm_cid=16045249821&icm_acid=255-776-8501&iasid=wem_icbs_&gclid=Cj0KCQjwmuiTBhDoARIsAPiv6L8KpNMTFY6lrLlMtCXTQ49U_T3t2glSVHk4H6fXbEyk0lcBs3RlepYaAjzcEALw_wcB&icm_agid=132508474293 ↑こう言う書物でも 読んで下さい。 自分はx64CPU関係の本は 読んでませんけど 多分、最初の2バイトか 3バイトがCPUの命令文 なハズですけどね。 それと、もしかしたらですけど 質問の画像は 「逆アセンブラ」 (逆アセンブラとは拡張端子の COMもしくはDLLなどの 実行ファイルを解析して ニーモニック化する方法) だと思うのですが、 それから、プログラムを 解析するのですか? それはとてもお勧め出来ません だってベタな機械語なので 専門家でも難しいです。 それと最後に フリップフロップ回路 https://e-words.jp/w/%E3%83%95%E3%83%AA%E3%83%83%E3%83%97%E3%83%95%E3%83%AD%E3%83%83%E3%83%97%E5%9B%9E%E8%B7%AF.html が、CPUとの元になる 回路です。 その ソフト面だけでなく ハード面からも 知識を知りましょう。

okwaveokw
質問者

お礼

ありがとうございます

  • heyboy
  • ベストアンサー率21% (1852/8730)
回答No.10

https://www.infraexpert.com/study/ip2.html ↑16進数を知ってますか? 4bitを0から9とAからFで 表す方法です。 それで0と1が機械語に 変換出来ます。 しかし、機械語だと 人間には理解出来ないから 人間にもわかるようにしたのが ニーモニック(図で言う右側) なのです。

okwaveokw
質問者

お礼

ありがとうございます

  • kzr260v2
  • ベストアンサー率47% (852/1776)
回答No.9

CPUが直接扱うプログラムコードと、プログラムコード内で扱うデータの違いについて、ご理解なされば解決すると思います。 CPUは物理的な機械です。この機械は電気の仕組みを利用していて、基礎となっているのはトランジスタという部品です。CPUがおもに使用するトランジスタの仕組みは、電気の流れを流したり止めたりする機能なのですが、膨大な数のトランジスタを使うことでCPUを成り立たせています。intelのi7シリーズだとしたら、型番毎に違いがありますが、8億個から19億個くらいのようです。このトランジスタの電気は、まさに0か1を表します。それらの仕組みによって成り立つCPUには、プログラムコードが2進数(実際は16進数)だと都合が良いのです。その16進数のコードがマシン語で、マシン語をちょっぴり読みやすく扱いやすくしたのがニーモニックです。 そしてプログラムコードは、我々人間の要望を叶えるべく、10進数の値を計算したり表示したりします。文字(テキスト)を扱う場合もあります。静止画や映像を扱う場合もあります。ゲームのようなリアルタイムの描写をすることもあります。プログラムコードのひとつひとつのステップでは、16進数のコードが実行されますが、そのコードがとてつもなく大量になり複雑な作業をこなすことで、様々なことが実現しています。 ※ すこしややこしい部分があります。 実行結果は、ファイルとしてストレージに保存されたり、画面に表示されたりしますが、現状のパソコン上のアプリは、直接ハードウェアにアクセスできなくなっていて、実際のところはOSに任されます。アプリ開発時は、OSのAPIの使い方を学ぶか、APIを扱いやすく隠蔽した、いずれかのライブラリを使用します。 そして、アプリをステップ実行したとしても、一般的に追うことができるのはAPIにリクエストしたところまでです。OSやデバイスドライバをデバッグできる環境を整えれば、ある程度は追えると思いますが、質問主さんに必要ないことと私は思います。 ※ 以前のパソコンのCPUは、今のような巨大で複雑ではありませんでしたから、CPUの動作と、プログラムコードが実現しているものが、イメージしやすかったようです。どうしてもそのあたりの知識や技術を身に着けたいのでしたら、パソコンにマイコンボードを接続し、マイコンボード上のプログラムコードを作成すると良いかもしれません。「トランジスタ技術」という雑誌があるのですが、マイコンボードの開発やプログラミングなど扱っています。 ※ しかし、一般的なパソコンアプリを開発するだけなら、実は必要ない知識です。理解してなくても、開発環境のライブラリの仕様を理解すれば、アプリ開発はできてしまうからです。 質問主さんが、パソコンに接続するいずれかのデバイスの設計製造を目指すなら、必須というか、電子回路設計の学習の間に「自然と理解している」内容です。 以上、参考にならなかったらごめんなさい。

okwaveokw
質問者

お礼

ありがとうございます

回答No.8

少々お待ちをなぜか16進数について、コメントを書いたら、 運営チェック判断になってて、この件、別に回答してるんですよね(汗;) 変なことは書いてないので、しばらくすれば見れると思います。 #4がないのは、そのため。。

okwaveokw
質問者

お礼

わかりました

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

>>ので、CPUが読み込む1と0は必ずしもマシン語とは言えません。 >これはどういう意味でしょうか?詳しく知りたいです 例えばJPEGの画像を画面に表示するとします。 その場合、画像データは0と1の羅列であるバイナリーデータで、ここにはCPUに対して処理を命令する情報は含まれていません。 CPUは記憶装置から画像データを読み出し、それをGPU(ビデオメモリ)に対して送るだけの処理をします。 記憶装置から読み出してGPUに渡すと言う命令は画像データとは別のプログラムに書かれており、画像データに含まれません。 なので、CPUはプログラムとデータの両方を別々に読み込んで処理するので、CPUが読み込む0と1が全てマシン語とは限らないと言う事になります。 特に今どきのパソコン向けCPUは1つの命令で複雑な処理ができるようになっているので、CPUに読み込まれた電気信号が全てCPUを動かす命令に直結しているとは言えません。

okwaveokw
質問者

お礼

ありがとうございます

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

CPUが読み込むのは電気のOn/Offです。 電気のOn/Offを人間が勝手に1と0と読んでいるだけです。 電気のOn/Offはコンピュータの世界ではビットと呼んでおり、1ビットは1桁分の電気のOn/Offとなり、1または0の二値1桁と言う事になります。 マシン語は、ビットを何桁かまとめて意味を持たせたモノを1単位として扱い、32ビットのCPUなら32ビットを1単位とし、64ビットのCPUなら64ビットを1単位としています。 1と0の羅列が32桁とか64桁並んでいると人間には読みにくいので、4桁毎に読みやすくまとめる事にしたのが 16進数 と言うモノです。 16進数は4ビット分のデータを 0 ~ F の16文字で表す事になっており、32ビットなら8桁のの16進数で表記できるので桁数がグッと少なくなり人間にとって可読性が高まります。 なお、2進数や16進数で表現されている文字列は必ずしもマシン語とは限らず単なるデータである場合もありますので、CPUが読み込む1と0は必ずしもマシン語とは言えません。

okwaveokw
質問者

お礼

ありがとうございます >なお、2進数や16進数で表現されている文字列は必ずしもマシン語とは限らず単なるデータである場合もあります >ので、CPUが読み込む1と0は必ずしもマシン語とは言えません。 これはどういう意味でしょうか?詳しく知りたいです

回答No.4

>数字と英語の組み合わせになっていたり もしかして・・・・・ 「英語」ってアルファベットの事言ってます??? 0123456789ABCDEFは、「英語」ではなく「数字」なんですよ。 0~Fまでが、16個あるから16進数。 0~1までが、2個しかないから2進数。 で、16進数の1桁は、4ビットで構成されるので、 1バイトを表す8ビットにするには「2桁」最低必要 だから 00~FFまでを、16進数1バイトの数値として、 表現してるだけでこれ自体は英語ではなく、 8ビットの数字となります。

okwaveokw
質問者

お礼

ありがとうございます

  • panja2021
  • ベストアンサー率10% (6/57)
回答No.3

アセンブリはプログラミング言語なので、それをCPUが理解できる0と1にコンパイルします。

okwaveokw
質問者

お礼

CPUが理解できる0と1 これは機械語ですか? あと、この画像のECやFFなどは?

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

CPUには、線がいっぱいついてます。 電気が流れる線ですね。 流れる電気は2種類に分けられます。 電圧が高いか低いかです。 高いのを1、低いのを0と判断して処理されます。 16ビットコンピュータとか32ビットとか64ビットたか聞いた事があると思います。 これはCPUについてる線の数ですね。 データ用の線の数です。 16ビットなら16本で、あるタイミングの線の状態で 0と1を判断して16ビットの信号と捉えるわけです。 あるタイミングは何メガヘルスとかいうやつです。 で、この16ビットがCPUに与える命令になる訳です。 つまり機械語ですね。 分かりますでしょうか?

okwaveokw
質問者

お礼

この画像の55やECというのはどれにあたりますか?

回答No.1

>数字と英語の組み合わせになっていたり これは、人間が読むときの文字です。 たとえば、 一番上55は、 0101 0101ですよね?4x1+1x1=5ですから。 ですので、 8ビットで 7=0V 6=5V 5=0V 4=5V 3=0V 2=5V 1=0V 0=5V と、与えた時それが、人間のみている”55”という「16進数」 に見えるという具合です。そして、一つ一つは ON/OFFしかない2値であるという事。 >CPUが読み込むのは0と1の2進数ですよね? なので、回答は「その通り」 という事です。 ついでなので、その後の8B ECも書いておきます。 1000 1011 1110 1100ですね。 この「1」を5V(TTLとして)与えた物が コンピューターの0と1です。

okwaveokw
質問者

お礼

ありがとうございます つまり、機械語というのは 0101010等のCPUが読み込む時の形と 8BFF等 CPUは読み込めないけれども、人間にわかりやすくするために16進数表記したもの の2種類のことを指すんですね?

関連するQ&A