Язык ассемблера по определению не переносим между различными архитектурами ЦП.
В зависимости от используемого вами ассемблера, вы можете сделать несколько вещей, которые облегчат перенос части, как сказал Алекс, например, работать с разными именами регистров или команд с помощью макросов и условной сборки (не думайте, что это сделает ваш код более читабелен и не более удобен в обслуживании, чем наличие двух отдельных файлов).
Но на разных архитектурах нельзя ожидать, что один и тот же код будет работать нормально. Особенно с 32- и 64-битными архитектурами.
Даже если вам удастся иметь общий код, ему, безусловно, не хватит оптимизаций, доступных в различных архитектурах.
И, наконец, что не менее важно, у вас также будут проблемы с ABI. Соглашения о вызовах различаются даже между x86 (обычно CDECL - все аргументы передаются в стеке) и x86_64 (System V - сначала аргументы передаются в регистрах, затем в стеке).