Указатель команд - это видимый регистр программы? - PullRequest
4 голосов
/ 02 февраля 2012

Я читал микропроцессор Intel 8-е издание. Я наткнулся на следующий текст:

enter image description here

Модель программирования

Программная модель от 8086 до Core2 считается видимой программой , потому что ее регистры используются во время прикладного программирования и определяются инструкциями. Другие регистры, подробно описанные далее в этой главе, считаются невидимыми для программы , поскольку они не адресуемы непосредственно при программировании приложений, но могут использоваться косвенно при программировании системы.

Это порождает мысль, что все инструкции в 8086 и 8088 являются программно видимыми регистрами, включая указатель команд. Это так?

Ответы [ 2 ]

6 голосов
/ 02 февраля 2012

Вы не можете напрямую дотронуться до указателя инструкций, но вы можете получить его, если нужно, с помощью простого трюка:

fetch_eip: mov eax, [esp]
           ret

Тогда:

call fetch_eip

Это будетпоместите значение eip, указатель инструкции, в eax (потому что это будет то, на что указатель стека esp ссылался при вызове в fetch_eip).

Недопустимо иметьeip будет пунктом назначения mov, так что вы не можете напрямую играть с eip.Единственный способ повлиять на это - с помощью операций перехода, операций вызова (используемых этим трюком) и некоторых других ограниченных случаев.

1 голос
/ 02 февраля 2012

Указатель инструкций является регистром специального назначения, в этой статье приведен список всех регистров 8086: Внутри центрального процессора 8086 (ЦП)

В общем случае нетпричина, по которой IP является «видимой программой».На его значение будет влиять код, который использует любые инструкции, влияющие на поток управления, например call или jmp.Фактическое значение IP не требуется.

...