Como um computador distingue entre dados e instruções?

Eu assisti umvídeo em um PC de 8 bits sendo alimentado por um programa - manualmente, usando chaves de física.

O programa alimentado foi:

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

O que eu quero saber é como o computador, se o faz, distingue entre Dados e Instruções, porque não há sinalizadores que dividem dados de instruções.

0001 0001 0010 pode ser interpretado como:

1 = LDA [2]

ou:

1 = #10

É porque enquanto o programa é executado, os endereços são tratados como instruções. mas por causa do HLT, o programa para de executar os endereços de memória como se fossem instruções e deixa endereços mais altos; e então LDA / ADD / SUB etc. tratam todos os locais na memória como valores binários.

Nesse caso, seria:

0000 0010 0000 seja interpretado como:

0 = ADD #32

e não

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

** Enquanto escrevia esta pergunta, percebi coisas novas à medida que avançava

melhor exemplo:

Se a parada não existisse, o programa funcionaria bem, mas continuaria indo até os dados e interpretando como:

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

Nesse caso, o computador trava 1: porque o NOP recebe um operando e 2: porque os endereços de memória 12 e 14 são indefinidos.

questionAnswers(1)

yourAnswerToTheQuestion