Как компьютер различает данные и инструкции?

Я смотрелвидео на 8-битном ПК загружается программа - вручную, используя физические переключатели.

Сытая программа была:

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 и т. д. обрабатывают все места в памяти как двоичные значения.

В этом случае:

0000 0010 0000 интерпретируется как:

0 = ADD #32

и не

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

** Во время написания этого вопроса я понял, что нового происходит по мере продвижения

лучший пример:

Если остановки не было, будет ли программа работать нормально, но затем продолжайте переходить к данным и интерпретируйте как:

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

Если это так, произойдет ли сбой компьютера 1: потому что NOP дан операнд, а 2: потому что адреса памяти 12 и 14 не определены.

Ответы на вопрос(1)

Ваш ответ на вопрос