Как компьютер различает данные и инструкции?
Я смотрелвидео на 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 не определены.