Во первых ассемблер - в общем случае удобоваримая запись инструкций процессора (которую человеку более менее удобно читать). Соответственно есть разные процессоры (архитектуры) как следствие различные команды, иногда даже синтаксис может несколько меняться. GAS, MASM, TASM - по сути это различные компиляторы ассемблера и отличаются форматом построения предложения (как одна и та же мысль на разных языках записывается по разному (весьма отдаленная аналогия)).
В современных ОС никто не даст программе исполняться напрямую (делать все что ей вздумается). ОС вводит ограничения какие команды сможет использовать программа... Плюс к этому формат исполняемых файлов (заголовки) у Окон и Линуха различаются. Соответственно один и тот же исполняемый файл на обеих системах не заведется.нише
Теоретически может даже получится извернуться и написать такой код в ассемблере, что он будет компилироваться в исполняемый файл для обеих систем, но параметры (целевая архитектура/ос) ассемблеру нужно будет давать разные.
Практически единственная ниша ассемблера - низкоуровневые оптимизации. Когда верблюдов через игольное ушко гоняешь.