Идеи Пользователей

Уточнение по относительным адресам
В видео про процессор ты сказал что в программе указаны относительные адреса переменных, а загрузчик прибавляет к относительным адресам стартовый адрес, по которому загружена программа. Это не совсем так. Расскажу как это реализовано относительно 16-битного ассемблера NASM. В код программы адреса захардкожены и ПОСЛЕ компиляции их никто не меняет. При компиляции метки программы это смещения относительно базового адреса, а базовый адрес указывается директивой ORG (например org 0x7C00). Предполагается что программа будет загружена именно по этому базовому адресу, НО тот, кто загружает программу (BIOS или загрузчик ОС) технически вполне может загрузить её по любому другому адресу, НО тогда программа сломается, ибо все адреса указывают не туда куда надо. Раньше я ошибочно думал что ORG именно сама приказывает процессору загрузить программу именно по указанному адресу, но как выяснилось это не совсем так :)
1
·
complete