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

Я смотрел видео на 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]

or:

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 не определены.


person Community    schedule 18.09.2016    source источник
comment
Вот аналогичная тема с хорошими ответами: stackoverflow_link.   -  person acornagl    schedule 18.09.2016
comment
Возможно, вам понравится История Мела: ... каждый инструкцию, которую он написал, тоже можно было считать числовой константой ...   -  person Damien_The_Unbeliever    schedule 18.09.2016


Ответы (2)


Вы находитесь на пороге важного осознания: данные не имеют смысла без метаданных - чтобы понять заданную последовательность битов, необходимо некоторое "знание" того, как эти биты предполагаются для интерпретации.

Что касается инструкций, набор инструкций ЦП определяет размер каждой инструкции и сопровождающих ее данных. Каждая инструкция начинается с кода операции, и следующие данные обычно имеют фиксированный размер (и размер зависит от кода операции). Каждая инструкция выполняется по порядку (до тех пор, пока не встретится инструкция перехода), начиная с некоторого начального адреса, который жестко подключен к ЦП.

Таким образом, если начальный адрес оказывается адресом метки MAIN, первый код операции, который видит ЦП, будет 0000 0001, и поэтому он будет знать, что это инструкция LDA, за которой, как он знает, должно следовать четырехбитное число. . Все, что следует за этими четырьмя битами, является следующей инструкцией.

Что произойдет, если позже будет выполнена неверная инструкция перехода, отправив ЦП в третью группу битов в вашем примере? (Основываясь на вашем примере, я предполагаю, что ЦП работает с четырехбитными «байтами».) Тогда действительно, ЦП ошибочно принимает 0100 0001 за код операции и некоторое количество следующих битов за данные для этого кода операции, и так далее. скорее всего пойдет очень не так.

person Aasmund Eldhuset    schedule 18.09.2016

В компьютерных системах адрес инструкции поступает с ПК (счетчик программ), а адрес данных - не с ПК. Вот как они различаются.

person hafiz031    schedule 22.01.2020