2014-02-18 5 views
3

Почему не рекомендуется использовать числовые адреса при написании инструкций по доступу к переменным? Я изучаю ассемблерный язык, и этот вопрос является вопросом, с которым я столкнулся.Числовые адреса на языке ассемблера

+0

Вы должны объяснить, что означает «числовые адреса». Вы имеете в виду сказать программе, какой точный адрес использовать для переменной? – m0skit0

+0

Ассемблер генерирует числовые адреса или смещения, когда он собирает программу, поэтому вопрос не ясен. Если вы имеете в виду фиксированные адреса, то есть некоторые платформы, на которых I/O сопоставляется с памятью, и это фиксированные адреса (использование equates или определяет в источнике сборки). Также могут быть некоторые фиксированные адреса для таких вещей, как таблицы векторов прерываний. – rcgldr

ответ

0

Использование цифровых адресов связывает вас с конкретными местами в памяти. Обычно приложения можно загружать в любом месте в памяти, поэтому он не будет работать, если он загружен в другом месте, чем вы предполагали при его запрограммировании. Даже если вы программируете ядро ​​операционной системы, которое живет в низкой памяти, новая версия ядра может привести к тому, что данные или код ниже вашего адреса будут больше или меньше, и в этом случае вам придется изменить все свои числовые адреса.

Большинство процессоров в эти дни так же быстрые с косвенными адресами, как и с прямыми адресами, поэтому использование цифровых адресов никоим образом не помогает.

+0

спасибо за ваше объяснение. – user3307068

0

Это будет работать только для загрузчиков. Вы никогда не знаете, на какой адрес будет загружен ваш код, даже в DOS.

Кроме того, числовые адреса изменяются, если вы вставляете целую строчку между указанной точкой (переменная, метка и т. Д.) И точкой использования. Это боль для поддержания.

+0

Несмотря на то, что проблема действительно, мы даже не знаем, что данный код будет запущен на платформе, которая * имеет * операционную систему или одну с переменным адресом нагрузки. И IIRC DOS также поддерживал фиксированный адрес (внутри сегмента), плоский двоичный формат, концептуально совместимый с используемым в предшественнике CP/M. –

+0

OP упомянул, что они ** изучали **. Студент x86-сборки не будет нацелен на страшную OS-less, что-нибыдь. –

+0

Где вы видите x86? Как вы знаете, класс, даже если он основан на x86, нацелен на операционную систему? Я должен сказать, что единственный класс, который я когда-либо имел, касался сборки x86, был в основном голым, но на короткое время начинался с .com-файлов на DOS, прежде чем переходить на встроенные платы разработки без OS. –

Смежные вопросы