Другие языки программирования и технологии

Если у процессоров команды на которых они общаются разные то как асемблер определяет какие лучше для какого?

Андрей Анучин
Андрей Анучин
87 167
Ассемблер не определяет, "какой лучше".

1. Если программа собрана на языке ассемблера неподдерживаемой машины, после чего каким-то образом (нестандартным загрузчиком) была успешно загружена и начато выполнение, то происходит то, что описано в документации по машине - от выполнения случайных команд, вместо запланированных (если у них совпадают опкоды) до аварийного завершения с исключением.

2. Если программа была собрана под более старую версию архитектуры или вообще другую, например с использованием опции компилятора gcc:
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
, или аналогичных у других ассемблеров/компиляторов, то загрузчик определит, что архитектура бинарника левая и выдаст ошибку в консоль при попытке запуска наподобие
risc-v architecture not supported on x64

3. Для случая близких архитектур типа amd x64 / intel x64 - есть общая база, которая будет выполняться на обоих и содержащая большую часть команд. Если программист при сборке задействует специфические команды архитектуры, то получит прямо при сборке ошибку наподобие
CPU you selected does not support amd x86-64 instruction set
если же после этого он полезет в опции и выставит amd-специфическую архитектуру, то на интелевских этот код перестанет выполнятся и при запуске будет ошибка, как в случае 2.

Еще были варианты специфической оптимизации участков кода, например, бинарник Quake3 при запуске определял наличие расширения amd 3dnow!, которых не было на интелевских и переключал выполнение критических участков кода на специфический набор функций с этим расширением, при этом бинарник был единственный для всех процессоров. Естественно, такое определение архитектуры было сделано программистами, а не ассемблером.
ВЛ
Владимир Локшин
30 155
Лучший ответ
"процессоры общаются"? Примерчик такого общения можно?
Так это и есть ассемблер. Ужке лет 30 разницу глазом не ощутишь там наносекунды, даже быстрее
Андрей Анучин у C\C++ есть типа програмно не зависимые команды а вот у асм ...
может для каждой архитектуры свой ассемблер?
Андрей Анучин что то я не заметил что бы в свободном доступе там были отличия