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.