#assembly #arm
#сборка #arm
Вопрос:
Я хочу спросить вас, возможно ли изменять значения в ассемблерном коде во время выполнения?
У меня есть проект для сортировки заданных данных и отображения их результата. И код выглядит следующим образом.
Input_data : .word 5, 4, 3, 2, 1
Output_data : .word 0, 0, 0, 0, 0
Я уже выполнил замену, и все данные сохраняются в последовательном пространстве памяти. Но я не могу найти способ изменить код во время выполнения.
Он имеет в виду показывать только пробелы в памяти? Или я действительно могу изменить asm-код во время его запуска?
Я использую процессор ARM с Zedboard.
Комментарии:
1. вы можете изменять код во время выполнения; обычно вам приходится очищать icache, прежде чем переходить к этому новому коду.
2. Код представляет собой просто битовые значения в памяти, такие же, как данные (по крайней мере, на компьютерной архитектуре Фон Неймана, такой как ПК x86, ARM и большинство используемых в настоящее время компьютерных архитектур). Таким образом, вы, безусловно, можете изменить код. Но специфика может быть сложной, например, в современной ОС вам приходится иметь дело с доступом типа записи / исполнения / чтения в память, где вы готовите новый код, и процессору может потребоваться дополнительный сброс кэша, чтобы заметить новые изменения, или он заметит их автоматически, но с огромным снижением производительности (процессоры x86). Но самоизменяющийся код сегодня обычно не используется, потому что это сложно.
3. И обычно вам не нужно изменять код во время выполнения, в 99% случаев существует решение, которое не требует изменения кода, или изменение кода локализовано в одном специализированном компоненте, таком как JIT compiler. Еще в 1970-1990 годах самоизменяющийся код часто писался вручную, чтобы сэкономить место в памяти, потому что весь компьютер имел, например, 4096 байт памяти … сегодня на моем компьютере 17179869184 байта памяти, и такие трюки просто усложнили бы написание, чтение и отладку кода, поэтому они редко используются сегодня.
4. asm-код не выполняется сам по себе, его необходимо собрать в машинный код. да, вы можете, если ваша программа выполняется в оперативной памяти. если во flash это становится намного сложнее, иногда yes…as упоминалось, что если кэши или другие элементы находятся в wy, вам нужно разобраться с ними, чтобы гарантировать, что изменения, которые вы вносите в код, попадают в процессор так, как вы хотите. обратите внимание, что это очень редко, что вы хотели бы / должны были бы это сделать, можно было бы предположить, что есть другой способ решить, в чем бы ни заключалась ваша проблема.
5. какую реальную проблему вы пытаетесь решить, что, по вашему мнению, самоизменяющийся код является решением?