Машинный код: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
дополнение
Строка 14:
'''Позиционно-независимый код''' ({{lang-en|position-independent code}}) — программа, которая может быть размещена в любой области памяти, так как все ссылки на ячейки памяти в ней относительные (например, относительно [[Счётчик команд|счётчика команд]]). Такую программу можно переместить в другую область памяти в любой момент, в отличие от ''перемещаемой программы'', которая хотя и может быть загружена в любую область памяти, но после загрузки должна оставаться на том же месте.<ref name="Dict"/>
 
Возможность создания позиционно-независимого кода зависит от архитектуры и системы команд целевой платформы. Например, если во всех инструкциях перехода в системе команд должны указываться абсолютные адреса, то код, требующий переходов, практически невозможно сделать позиционно-независимым. В архитектуре [[x86]] непосредственная адресация в инструкциях работы с данными представлена только абсолютными адресами, но поскольку адреса данных считаются относительно [[сегментный регистр|сегментного регистра]], который можно поменять в любой момент, это позволяет создавать позиционно-независимый код со своими ячейками памяти для данных. Кроме того, некоторые ограничения набора команд могут сниматься с помощью [[Самомодифицирующийся код|самомодифицирующегося кода]] или нетривиальных последовательностей инструкций.
 
== Программа «Hello, world!» ==