2016-09-18 5 views
2

私は、物理スイッチを使って手動でプログラムを供給されている8ビットPC上でvideoを見ました。コンピュータはデータと命令をどのように区別しますか?

給餌プログラムは以下のとおりであった:指示からデータを分割なしのフラグが存在しないので、私が知りたいのは何

MAIN: 
    0000 0001 0100  # 0 = LDA [4] 
    0001 0010 0101  # 1 = ADD [5] 
    0010 0101 0000  # 2 = OUT 
    0011 1111 0000  # 3 = HLT 

DATA: 
    0100 00001110  # 4 = #14 
    0101 00011100  # 5 = #28 

は、それがない場合、コンピュータは、データと命令を区別する方法です。

0001 0001 0010はどちらかと解釈することができる。

1 = LDA [2] 

か:プログラムの実行中に、アドレスが命令として扱われるため

1 = #10 

がそれです。 HLTのために、プログラムはあたかもそれらが命令であるかのようにメモリアドレスの実行を停止し、より高いアドレスを残す。 LDA/ADD/SUBなどはメモリ内のすべての場所をバイナリ値として扱います。この質問を書いている間、私があったように、私は新しいことを実現**

0 = ADD #32 

なく

0 = ADD [ ADD [ ADD [ ADD ...]]] 

:その場合は

は、なりますよう

0000 0010 0000を解釈します進行中

さらに良い例:

停止がなかった場合は、プログラムの作業罰金が、その後のデータに下って行く上で続けるだろうとのように解釈されます。その場合は、コンピュータがクラッシュ1が考え

0010 0000 1110  # 4 = NOP [14] 
0101 0001 1100  # 5 = LDA [12] 

:NOPが指定されているので、オペランド、および2:メモリアドレス12と14は定義されていないためです。

+0

ここでは良い回答と同様のトピック:[stackoverflow_link](http://stackoverflow.com/questions/2022489/how-instructions-are-differentiated-from-data)。 – acornagl

+0

あなたは[The Story of Mel](http://www.catb.org/jargon/html/story-of-mel.html)を楽しむかもしれません: "...彼が書いたすべての命令は、数字の定数でもあると考えられます。 ... " –

答えて

5

あなたは重要な実現を迎えています:データにはメタデータなしで意味がありません - ビットの特定のシーケンスを理解するためには、それらのビットがどのように仮定されているかに関するいくつかの「知識」が必要です解釈される。

命令に関する限り、CPUの命令セットは各命令のサイズとそれに付随するデータを定義します。各命令はオペコードで始まり、次のデータは通常固定サイズです(サイズはオペコードによって異なります)。各命令は、(ジャンプ命令に遭遇するまで)順番に実行され、CPUにハードワイヤードされたいくつかの初期アドレスから開始される。

初期アドレスがMAINラベルのアドレスであることを起こるのであれば、CPUが見る最初のオペコードは0000 0001になり、それはそれはそれは知っているLDA命令は、続くことになっていることを知っているだろう4ビットの数字。これらの4つのビットに続くものは、次の命令です。

悪いジャンプ命令が後で実行され、CPUをサンプルの3番目のビットグループに送信するとどうなりますか?(あなたの例に基づいて、私はCPUが4ビットの "バイト"で動作していると推測しています)。実際には、CPUは0100 0001のオペコードとそれに続くいくつかのビットをそのオペコードのデータとして間違えます。おそらく非常に間違っています。

関連する問題