Альтаир 8800 данные и инструкция
Недавно я немного поигрался с эмулятором Altair 8800, чтобы понять основы вычислений, и мне было интересно, как процессор "узнает", является ли байт инструкцией или данными?
2 ответа
Процессор не знает, является ли байт инструкцией. Он просто выполняет любой код, указанный программным счетчиком.
Если счетчик программы попадает в зону данных (из-за ошибки программирования, поврежденного стека или чего-либо еще), ЦП пытается интерпретировать инструкции, пока не наткнется на какой-то недопустимый код операции, и в этом случае он вызовет специальную "недопустимую инструкцию" (или другое) обработчик и программа аварийно завершают работу / ОС перезагружается / любое поведение определяется для восстановления после ошибки.
РЕДАКТИРОВАТЬ: как Росс отметил, что Альтаир на самом деле не имеет незаконных инструкций, "программа" будет бесконечно работать в хаосе, чтение и запись в случайных местах, пока кто-то не потянет за вилку.
С другой стороны, вы можете загрузить адресный регистр с зоной, содержащей код, и ЦП будет видеть только данные.
Тем не менее, это одна из трудных задач дизассемблирования / обратного инжиниринга, чтобы найти зоны, которые исходные программисты собрали в виде кода, и те, которые просто определяют данные, такие как сообщения об ошибках, графику... Они иногда очень близки / переплетены, особенно когда используется сборка.
Таблицы переходов, динамически вычисляемые точки входа, расшифровка на лету, самоизменяющийся код могут усложнить задачу даже для такого хорошего дизассемблера, как IDAPro. Вам часто приходится помогать дизассемблеру принимать решения, основываясь на том факте, что данные очень похожи на код (узнаваемые коды операций, например: для 68k: 0x4E75
означает RTS, скорее всего, не данные), или то, что код очень похож на данные, потому что он не складывается (непоследовательные, несвязанные строки кода asm)
То, что процессор видит как инструкцию, является байтом по адресу, указанному счетчиком программы. В зависимости от инструкции последующие байты могут быть следующей инструкцией или данными для текущей инструкции ("немедленная инструкция"). В этом случае счетчик программ увеличивается, чтобы перепрыгнуть через данные.
Некоторые инструкции используют содержимое регистров (HL или DE в случае 8080) для определения доступа к памяти. То, что выбирается, считается данными процессором.