У каждой архитектуры свой набор машинных команд, поэтому да, если вы что-то напишете на ассемблере, оно будет работать только на том процессоре, на "чьём языке" вы писали.
Есть случаи, когда можно запускать на одном процессоре код для другого процессора. Так, на российских эльбрусах и некоторых ARM системах (например, на новых макбуках на ARM) можно трансляцией запустить x86-64 код (медленнее, чем код исходной архитектуры процессора).
Или в QEMU/любом другом эмуляторе запустить код "чужой" архитектуры. Так, например, запускают игры от стареньких приставок - NES, Sega, PS1, PS2
(сильно медленнее исходной архитектуры)