ассемблер это почти, что язык процессора - и синтакисов очень много, потому и придумали С
чтобы разобраться с ассемблером надо читать по мимо книг ещё и датащиты к процессорам- там все тонкости,
если рассматривать ассемблер с точки зрения высокого языка программирования то у нас есть
константы
регистры (переменные)
порты
флаги
команды(функции)
память(другой тип переменной можно сказать что массив)
стэк
может чё забыл)
команды в свою очередь могут зависеть от флагов или влиять на них вот и весь вот и весь ассемблер, разница в том что в ассемблере структуру программы и типы надо держать в голове в отличии от языка высокого уровня.
Для винды и линукса разница в том, что надо вызывать разные функции ос и в заголовке исполняемого файла, в самом ассемблере разницы нет (если конечно линукс не на каком ни будь арме крутится)