Почему не рекомендуется использовать числовые адреса при написании инструкций по доступу к переменным? Я изучаю ассемблерный язык, и этот вопрос является вопросом, с которым я столкнулся.Числовые адреса на языке ассемблера
ответ
Использование цифровых адресов связывает вас с конкретными местами в памяти. Обычно приложения можно загружать в любом месте в памяти, поэтому он не будет работать, если он загружен в другом месте, чем вы предполагали при его запрограммировании. Даже если вы программируете ядро операционной системы, которое живет в низкой памяти, новая версия ядра может привести к тому, что данные или код ниже вашего адреса будут больше или меньше, и в этом случае вам придется изменить все свои числовые адреса.
Большинство процессоров в эти дни так же быстрые с косвенными адресами, как и с прямыми адресами, поэтому использование цифровых адресов никоим образом не помогает.
спасибо за ваше объяснение. – user3307068
Это будет работать только для загрузчиков. Вы никогда не знаете, на какой адрес будет загружен ваш код, даже в DOS.
Кроме того, числовые адреса изменяются, если вы вставляете целую строчку между указанной точкой (переменная, метка и т. Д.) И точкой использования. Это боль для поддержания.
Несмотря на то, что проблема действительно, мы даже не знаем, что данный код будет запущен на платформе, которая * имеет * операционную систему или одну с переменным адресом нагрузки. И IIRC DOS также поддерживал фиксированный адрес (внутри сегмента), плоский двоичный формат, концептуально совместимый с используемым в предшественнике CP/M. –
OP упомянул, что они ** изучали **. Студент x86-сборки не будет нацелен на страшную OS-less, что-нибыдь. –
Где вы видите x86? Как вы знаете, класс, даже если он основан на x86, нацелен на операционную систему? Я должен сказать, что единственный класс, который я когда-либо имел, касался сборки x86, был в основном голым, но на короткое время начинался с .com-файлов на DOS, прежде чем переходить на встроенные платы разработки без OS. –
- 1. GetChar() на языке ассемблера
- 2. «Ярлык» на языке ассемблера
- 3. Указатели на языке ассемблера
- 4. Регистрация использования на языке ассемблера
- 5. Являются ли адреса памяти на языке ассемблера статически распределены сразу?
- 6. Определение «переменные» на языке ассемблера
- 7. Последовательность Fibonacci на языке ассемблера
- 8. Использование DUP на языке ассемблера
- 9. Шрифт DOS на языке ассемблера
- 10. Серия Tetrabonacci на языке ассемблера
- 11. оператор смещения на языке ассемблера
- 12. Вопрос о языке ассемблера
- 13. Вопрос о языке ассемблера
- 14. Факториал в языке ассемблера
- 15. Сравнение в языке ассемблера
- 16. Использование REPE и SCASB на языке ассемблера
- 17. Простой вопрос на языке ассемблера 8086
- 18. Элемент массива печати на языке ассемблера
- 19. Проверка нулевого символа на языке ассемблера
- 20. Приоритет оператора * на языке ассемблера AT & T
- 21. Как напечатать 0,2,4,6, ... на языке ассемблера?
- 22. 512 бит умножения на языке ассемблера
- 23. Имею огромные проблемы на языке ассемблера. Формат
- 24. для, если на языке ассемблера (пузырь сортировка)
- 25. Как проверить значение EIP на языке ассемблера?
- 26. Как напечатать остаток на языке ассемблера
- 27. Программы на языке ассемблера NASM Cross-OS
- 28. Доступ к массиву на языке ассемблера
- 29. как lisp реализован на языке ассемблера?
- 30. Как изменить число на языке ассемблера
Вы должны объяснить, что означает «числовые адреса». Вы имеете в виду сказать программе, какой точный адрес использовать для переменной? – m0skit0
Ассемблер генерирует числовые адреса или смещения, когда он собирает программу, поэтому вопрос не ясен. Если вы имеете в виду фиксированные адреса, то есть некоторые платформы, на которых I/O сопоставляется с памятью, и это фиксированные адреса (использование equates или определяет в источнике сборки). Также могут быть некоторые фиксированные адреса для таких вещей, как таблицы векторов прерываний. – rcgldr