マシンコードが実際にハードウェアとCPUによって実行されているとき、それはどのように見えますか?
1と0で表される命令のように、バイナリのように見えますか、それともオペコードがバイトコードのような2進数に分解できる16進数として表されるバイトである16進数で構成されるものでしょうか?
マシンコードが実際にハードウェアとCPUによって実行されているとき、それはどのように見えますか?
1と0で表される命令のように、バイナリのように見えますか、それともオペコードがバイトコードのような2進数に分解できる16進数として表されるバイトである16進数で構成されるものでしょうか?
回答:
私ができる最善の答えは、実際には何のようにも「見えない」ということです。現在CPUによって実行されている命令は、一連のワイヤで表されます。ワイヤの一部には高電圧があり、一部には低電圧があります。
高電圧と低電圧をゼロと1として解釈できますが、高電圧と低電圧のグループを16進数、またはADD $0 $1
(CPUがそれを解釈する方法に最も近い)のようなアセンブリ命令として等しく解釈できます。これらの数字とニーモニック自体は、人間が読むのに便利です。内部的には、ワイヤ上の電圧にすぎません。
これらのオプションのうち、ゼロと1はワイヤの高電圧と低電圧に直接マッピングされるという点で、バイナリは「金属に最も近い」です。しかし、他のどれも不正確ではなく、それらはより頻繁に有用です。人々が実行可能ファイルの16進ダンプを見る理由がありますが、バイナリダンプはほとんどありません。
「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:00午前1時17分に、。それはまさに、プログラムがコンピューターで実行されているときの外観です。2行のライトは、アドレスレジスタとデータレジスタの現在の内容を示します。PDP-11には命令レジスタはありませんが、1つがあり、前面にその内容を表示するライトがあれば、ほとんど同じように見えます。16個のライト-一部は点灯、一部は消灯。
点滅するライトが本当に好きな場合は、6つのレジスタ、スタックポインター、プログラムカウンターの現在の内容を表示するライトを増やすことができます。さらに32768のライトについては、キャッシュの各ビットにライトを付けることができます。メモリの各ビットにライトを付けることもできますが、それは本当にたくさんのライトになるでしょう。
これは15.2 MHzで動作するPDP11-70であり、各命令の実行には約1.5マイクロ秒かかります。人間の目は1/10秒までの変化を検出でき、その間にPDP-11は60,000命令を実行できます。基本的に、すべてがぼかしです。
プロセッサを実装およびテスト(およびテストおよびテスト)するハードウェア設計者は、実際に視覚モデルを使用して、設計が何をしているかを確認します。ほとんどの(すべてではないにしても)HDLシミュレーションツールは、すべてのレジスタとワイヤの波形ビューを出力して、簡単にデバッグできるようにします。以下のスクリーンショット(ここから取得)は、いくつかの命令を実行しているRISC-Vプロセッサー用のVCSシミュレーターからのこれらの波を示しています。
これは非常に単純な例で、完全なプロセッサ設計に含まれるロジックの小さなサブセットを示しています。これらのビューをプロセッサ全体に対して開き、データがロジックを介して伝播するのを見ることができます。前述のように、マシンコードの実行を確認する場合は、メモリから命令を読み取るためにプロセッサが使用する命令レジスタまたはバスの波形を確認できます。ほとんどのWaveビューアには、バスとレジスタの柔軟な表示オプションがあり、それらの値をバイナリ、16進数、8進数、さらに列挙ラベルとして表示できます。一部では、ビットパターンを表示する値をマッピングするための独自の関数を定義することもできます。
これはプロセッサのシミュレーションの単なる表現であることは注目に値します。すでに製造されたプロセッサチップでは、このようなビューを取得する方法はありません。
建設中の路地をつまずく盲人を想像してください。どこにでも穴や裂け目があるので、当然彼は倒れるはずです。この盲人ではありません。彼は、巻末に指示、待機するとき、移動するとき、移動する場所、そして道路の端に到達するために自分の環境を操作する方法があります。それがアセンブリであり、盲目的に指示されたリストです-それらはこの路地とこの盲人のためだけに意味があります。理論的には、命令だけから3Dモデルを再構築することもできます(逆コンパイル)。
プラットフォームへのすべての変更は、盲人のための指示を再コンパイルする必要があります。ハードウェア(建設現場のレイアウト)、人間が入力した意図の指示(高レベルコード)を知っておく必要があります。盲人の能力(CPU)。彼は短期記憶、複数のことを一度に行う能力を持っていますか?
これらすべての情報を取得し、一貫した命令スクロールを偽造することは、コンパイラの仕事です。
それでは、プログラムの外観を説明できますか?いいえ。しかし、それを実行するとどのように感じるかを説明できますか?はい、それはジャンプして走り、何かを見ないミラーエッジのように感じ、指示の正確なリストに従って、どこへ行ってもいいでしょう。