実行中のマシンコードは実際どのように見えますか?


21

マシンコードが実際にハードウェアとCPUによって実行されているとき、それはどのように見えますか?

1と0で表される命令のように、バイナリのように見えますか、それともオペコードがバイトコードのような2進数に分解できる16進数として表されるバイトである16進数で構成されるものでしょうか?


24
ワイヤ、ゲート、およびレジスタがシリコン上でちらつきます。例えば、visual6502.org/JSSim
Nayuki

4
@Nayukiこの視覚化はすばらしく、答えに値するに値すると思います!
-nalzok

2
私には何のようにも見えない
ガイウス

3
本当に「実行」されたときでも、実際には存在しません。CPU上の(ハードウェア!)デバイスによってマイクロコードに「コンパイルされた」JITであり、実際にCPUに指示します!
xuq01

2
コンピュータが変換する方法を理解するための一つの簡単な方法は、私は本当にベン・イーターによって作られたもの見て好き、論理ゲートから1を構築することですyoutube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU
Ferrybig

回答:


38

私ができる最善の答えは、実際には何のようにも「見えない」ということです。現在CPUによって実行されている命令は、一連のワイヤで表されます。ワイヤの一部には高電圧があり、一部には低電圧があります。

高電圧と低電圧をゼロと1として解釈できますが、高電圧と低電圧のグループを16進数、またはADD $0 $1(CPUがそれを解釈する方法に最も近い)のようなアセンブリ命令として等しく解釈できます。これらの数字とニーモニック自体は、人間が読むのに便利です。内部的には、ワイヤ上の電圧にすぎません。

これらのオプションのうち、ゼロと1はワイヤの高電圧と低電圧に直接マッピングされるという点で、バイナリは「金属に最も近い」です。しかし、他のどれも不正確ではなく、それらはより頻繁に有用です。人々が実行可能ファイルの16進ダンプを見る理由がありますが、バイナリダンプはほとんどありません。


だから、16進エディタでプログラムを開き、16進で表されたバイトを、ゼロに割り当てられた電圧と1に割り当てられた電圧で実行できるマシンコードバイナリに変換できますか?
ティム・ハード

4
@TimHardlyうん!Hexは読みやすいです。アセンブリも同様に読みやすくなりますが、機械的にゼロと1に変換できます。そのため、アセンブラはコンパイラよりも簡単に記述できます。
ドラコニス

おかげで、この質問全体が私の知識を広げ、混乱を解消しました。
ティム・ハード

1
@TimHardlyアセンブラーは、「NOP」のような一連の文字を「10010000」のような一連のビットに何度もマップし、アセンブリファイルをマシンコードに変換します。オペコードは実際に使用される部分なので、オペコードはCPUによって決定されます。同じ実行可能ファイルを実行できるすべてのコンピューターには、実際に同じオペコードセットがあります。x86セットが最も一般的であり、今日ではほとんどすべてのPCで使用されています。もう1つの一般的なものは、多くのゲームコンソールで使用されるMIPSです。
ドラコニス

1
@TimHardlyもしあなたの質問がそうなら、アセンブラーはCPUにNOP命令のためのオペコードが何であるか尋ねることができます、答えはノーです。アセンブラは、命令が機能する前に、どのバイトを命令に出力するかをすでに知っている必要があります。実際、アセンブラーは1つのプロセッサー用のプログラムを出力できますが、アセンブラー自体は異なるプロセッサータイプで実行されます。
ミスターリスター

11

「Look like」は比metaを意味します。「見た目」を文字通りとると、マザーボードに座っているシリコンのおしゃれなエッチングのように見えます。明らかに比metaが目標でした。比phorを構築するには、それが実際に何であるかを最初に見る必要があります。その後、許容可能な比phorを構築できます。これは少し長いですが、幸いなことに、あなたのためのビデオのメタファーで終わります。

マシンコードは実際にはビットとしてメモリに保存されます。メモリチップは通常DRAMで、これらのビットをコンデンサと電子の両端の電圧として保存します。2つは接続されています-電子なしで電圧について話すのは難しいです。どちらか一方について話すのが便利な場合もありますが、一方がどこに行くか、もう一方が続くことを理解してください。

マシンコードの旅は「フェッチ」から始まります。特定の電圧パターンがRAMチップのワイヤに適用され、この特定のビットセットがCPUに送信される必要があることが示されます。どうして?気にしないでください。通常、CPUが最後の命令を終了し、最初の命令を与えた後に2番目の御treat走を要求する犬のように、本能的な応答として新しい命令を要求しているため、この信号が送信されます。このプロセスは、CPUの自然な不安定性に起因するズボンの最初のキックから始まります。電源がチップに一定の電圧を印加すると、電圧の上昇により最終的にCPUがRAMチップに正しい電圧をかけ、最初の命令を取得します(BIOSレイヤーは少し重要ですが、物語に。それを調べてください)。

最新のメモリは、データを並行してストリーミングします。これは、マシンコードを構成するビットが「レーン」(32または64が一般的)に分割されることを意味します。これは、RAMからCPUへの32/64ワイヤを論理的に表すものです。これらのラインの電圧は、CPUに送信するために必要に応じて上下されます。

CPUに搭載されると、作業を開始できます。これはマイクロアーキテクチャの領域であり、文字通り10億ドルの産業であるため、複雑になる可能性があります。これらの電圧はトランジスタに影響を及ぼし、トランジスタは他の電圧に影響を及ぼします。これは、「ビットの追加」または「乗算」と表現できます。それらはすべて、これらのビットを表す単なる電圧です。同じように、紙に5文字の文字列「2 + 2 = 4」を走らせて、数学をしたと言います。鉛筆のグラファイトは2番ではありません。これは、その数値に使用している物理的な表現にすぎません。

それが実に高いレベルでの実際のシステムの動作です。私はうまくスキップしました...ほとんどすべて......しかし、それはあなたの実際の質問に戻ることができるほど十分です。それは(比phor的に)どのように見えるでしょうか?

そうなると、Martin Molinは彼のMarble Machineで最高の比phorを構築したと思います。機械コードは、コンデンサーの電圧ではなく、中央のいくつかのレゴテクニクスストリップにペグとして(手作業で)エンコードされます。これはDRAM よりもEPROMに似ていますが、両方ともデータを保持します。ビー玉は電子に似ており、電圧(またはビー玉の場合は重力)によって動き回ります。そして、電子が動くと、物事を行うゲートに力を加えます。

彼のマシンは、現代のCPUと比較してシンプルですが、比metaが行く限り、それほど悪くはありません。そして、それはキャッチーです!


1
ビデオでは、大理石の機械は単純すぎます。CPUには状態が必要です。
するThorbjörnRavnアンデルセン

@ThorbjørnRavnAndersen本当です。マーリンのマシンにいくつかのゲートがあり、マリンがレバーをひっくり返す代わりに、自動的にレバーを投げることができたとしたら、それは近いでしょう。
コートアンモン-復帰モニカ

ありがとう!上記の回答で私が尋ねた質問と同様に、組み立てられたアセンブリコードは電圧や物に変換されるマシンコードと見なされますか?
ティム・ハード

@TimHardly「アセンブルされた」、「アセンブリ」、および「マシンコード」の唯一の意味を使用して、アセンブリのアセンブリの製品はマシンコードであると定義されます(そのため、=と見なすことができます)。役に立つかもしれないのは、アセンブリとマシンコードの両方が、「2 + 2 = 4」の数学的概念に近く、その方程式が書かれている紙のグラファイトから遠い「論理」概念と見なされることです。アセンブリ/マシンコードは、磁気ディスクに保存されているか、紙に書かれているか、DRAMのコンデンサに保存されているかにかかわらず、アセンブリ/マシンコードです。
コートアンモン-復帰モニカ

1
私が哲学をワックスするかもしれないならば、マシンコードはマシンコードのように扱うので、マシンコードはマシンコードです。マシンコードと考えています。.wav形式のサウンドを記述するバイトをCPUに向けることができ、実際にマシンコードとして実行します。結果の実行は(サウンドがマシンコードとして構築されていないため)有用なことをする可能性が低く、停止する可能性がありますが、実行される可能性があります。
コートアンモン-復帰モニカ

10

チェックアウトこのビデオを特定1:00午前1時17分に、。それはまさに、プログラムがコンピューターで実行されているときの外観です。2行のライトは、アドレスレジスタとデータレジスタの現在の内容を示します。PDP-11には命令レジスタはありませんが、1つがあり、前面にその内容を表示するライトがあれば、ほとんど同じように見えます。16個のライト-一部は点灯、一部は消灯。

点滅するライトが本当に好きな場合は、6つのレジスタ、スタックポインター、プログラムカウンターの現在の内容を表示するライトを増やすことができます。さらに32768のライトについては、キャッシュの各ビットにライトを付けることができます。メモリの各ビットにライトを付けることもできますが、それは本当にたくさんのライトになるでしょう。

これは15.2 MHzで動作するPDP11-70であり、各命令の実行には約1.5マイクロ秒かかります。人間の目は1/10秒までの変化を検出でき、その間にPDP-11は60,000命令を実行できます。基本的に、すべてがぼかしです。


うわー、それは良い例です、私はそれのような他の人を見ました、あなたがライトと他のものを見ることができるそれらの線に沿った何か。youtube.com/watch?v=yOyaJXpAYZQ
ティム・ハード


6

プロセッサを実装およびテスト(およびテストおよびテスト)するハードウェア設計者は、実際に視覚モデルを使用して、設計が何をしているかを確認します。ほとんどの(すべてではないにしても)HDLシミュレーションツールは、すべてのレジスタとワイヤの波形ビューを出力して、簡単にデバッグできるようにします。以下のスクリーンショット(ここから取得)は、いくつかの命令を実行しているRISC-Vプロセッサー用のVCSシミュレーターからのこれらの波を示しています。

RISC-VのDVEウェーブ

これは非常に単純な例で、完全なプロセッサ設計に含まれるロジックの小さなサブセットを示しています。これらのビューをプロセッサ全体に対して開き、データがロジックを介して伝播するのを見ることができます。前述のように、マシンコードの実行を確認する場合は、メモリから命令を読み取るためにプロセッサが使用する命令レジスタまたはバスの波形を確認できます。ほとんどのWaveビューアには、バスとレジスタの柔軟な表示オプションがあり、それらの値をバイナリ、16進数、8進数、さらに列挙ラベルとして表示できます。一部では、ビットパターンを表示する値をマッピングするための独自の関数を定義することもできます。

これはプロセッサのシミュレーションの単なる表現であることは注目に値します。すでに製造されたプロセッサチップでは、このようなビューを取得する方法はありません。


2

建設中の路地をつまずく盲人を想像してください。どこにでも穴や裂け目があるので、当然彼は倒れるはずです。この盲人ではありません。彼は、巻末に指示、待機するとき、移動するとき、移動する場所、そして道路の端に到達するために自分の環境を操作する方法があります。それがアセンブリであり、盲目的に指示されたリストです-それらはこの路地とこの盲人のためだけに意味があります。理論的には、命令だけから3Dモデルを再構築することもできます(逆コンパイル)。

プラットフォームへのすべての変更は、盲人のための指示を再コンパイルする必要があります。ハードウェア(建設現場のレイアウト)、人間が入力した意図の指示(高レベルコード)を知っておく必要があります。盲人の能力(CPU)。彼は短期記憶、複数のことを一度に行う能力を持っていますか?

これらすべての情報を取得し、一貫した命令スクロールを偽造することは、コンパイラの仕事です。

それでは、プログラムの外観を説明できますか?いいえ。しかし、それを実行するとどのように感じるかを説明できますか?はい、それはジャンプして走り、何かを見ないミラーエッジのように感じ、指示の正確なリストに従って、どこへ行ってもいいでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.