Как компьютер различает, является ли бинарная комбинация инструкцией или просто числом?

Я читаю книгу «Компьютерная организация и встроенные системы» Хамахера, и у меня возникает вопрос: «Как компьютер различает, является ли двоичный шаблон инструкцией или просто числом?»

Может ли кто-нибудь помочь мне понять эту концепцию?


person Curious    schedule 22.02.2018    source источник
comment
Как понять, является ли буква частью слова или просто случайной буквой? Контекст.   -  person Ken White    schedule 22.02.2018
comment
Буква не будет иметь смысла, но слово будет.   -  person Curious    schedule 22.02.2018
comment
Подумай об этом...   -  person Ken White    schedule 22.02.2018
comment
Для гарвардской архитектуры память инструкций и данных отличается, но как насчет архитектуры фон Неймана?   -  person Curious    schedule 22.02.2018
comment
Как человек различает, является ли 00000100 инструкцией или числом? Инструкции являются числами. В архитектуре фон Неймана, если вы поместите число там, где ожидается инструкция, оно будет рассматриваться как инструкция, если вы поместите его там, где ожидаются данные, оно будет рассматриваться как данные.   -  person TessellatingHeckler    schedule 22.02.2018


Ответы (2)


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

Это позволяет программе создавать новый исполняемый код в памяти или даже изменять свой собственный код. С другой стороны, это делает возможным множество атак путем внедрения кода.

person Nefrin    schedule 22.02.2018
comment
ага, точно. Если она декодируется как допустимая инструкция, она запускается, даже если это не полезная инструкция и, например. приводит к загрузке с потенциально недействительного адреса. (Очень распространено, если вы пропустите ret внизу функции в архитектуре, такой как x86, где общий шаблон заполнения, такой как 00 00, является допустимой инструкцией (add [rax], al). - person Peter Cordes; 22.02.2018

То, как компьютер различает инструкции и числа, просто зависит от того, что и где считывает данные. Например, простое арифметико-логическое устройство (АЛУ) будет включать вход для выполняемой операции и два входа для операндов. Данные, поступающие в порты операндов, считываются как числа, тогда как данные, поступающие на ввод оператора, считываются как инструкции.

Все зависит от того, какой блок компьютерной архитектуры считывает данные и на каком входе этот блок их считывает.

person JCollier    schedule 22.02.2018