Если вы скомпилируете свой код для i586 (на самом деле то, что обычно называется x86), он должен нормально работать на процессорах AMD64 (x86-64), поскольку процессоры x86-64 могут выполнять «устаревший» 32-битный код, пока ОСподдерживает это - и обычные ОС обычно делают;В частности, поддержка Windows для 32-битных приложений действительно хороша, так как большинство приложений, установленных в средней системе Windows, все еще 32-битные.
Вместо этого не выполняется, поскольку набор инструкций x86-64 (свободно)говоря) расширение архитектуры x86, поэтому любой не 64-битный процессор x86 не будет знать, как интерпретировать новый машинный код (и даже если бы он знал, у него не было бы ресурсов для его запуска).
Что касается редактирования, вы не можете сгенерировать машинный код, который запускается везде;обычное решение в таких случаях заключается в использовании псевдоскомпилированных языков, которые выводят машинный код промежуточного уровня, для работы которого требуется установленная для конкретной архитектуры виртуальная машина (классический пример здесь - Java и .NET).Если вместо этого вы используете язык, скомпилированный для «нативного кода», вы должны сгенерировать исполняемый файл для каждой целевой платформы.