В gcc/g++ можно использовать оба синтаксиса, переключая ключом -masm=intel|att.
Оба синтаксиса в gcc сохраняют контроль над отношением регистров и локальных переменных (входящие/выходящие параметры), в msvs насколько я знаю такого нет.
Меняется сразу и инлайн и выходной асм код (который по ключу -S можно вывести).
Более того мы можем указать компилятору не оптимизировать вставку:
asm volatile ( ... );
asm volatile ( ... );
Тогда они будут выполняться друг за другом, без всяких перестановок.
Точно также можно поступить с переменными обозная их квалификатором volatile, хотя по идее компилятор должен и без него определять как используется переменная, volatile нужен скорей в тех случаях когда переменная может измениться внешнем для приложения образом, например в случае мапирования портов или внешних устройств.
Я предпочитаю intel, и где можно переключаю на него, хотя некоторые программы (дебагеры, отладчики памяти и прочие) дают инфу в att полюбому, так что на практике приходится работать сразу с двумя синтаксисами.
В инлайн вставках лучше использовать управляемые как гцц конструкции где можно указать входящие/выходящие регистры.
Если же создаешь объектный файл целиком в асме то лучше взять какойнибудь fasm и писать в нём - там синтаксис лучше всего отшлифован.
Конверторы не встречал, но теоретически где то во вселенной они могут существовать.