Я думаю, что один из лучших способов начать изучение языка ассемблера - взглянуть на вывод, созданный компилятором для языка, с которым вы знакомы. Например, если вы знакомы с Visual C ++, напишите очень простой код на C ++ и используйте встроенный отладчик, чтобы показать язык ассемблера, созданный компилятором (убедитесь, что вы компилируете с оптимизацией off ) , Напишите несколько простых циклов for
, присваивание, арифметику и т. Д. И посмотрите, как выглядит созданный язык ассемблера.
Для обучения вам не нужно ничего знать о расширениях набора инструкций, которые вы указали в своем вопросе. Все, что вам нужно, это 32-битные инструкции x86. Вы можете узнать о 64-битных инструкциях, MMX, SSE и т. Д. Позже, когда у вас будет фундамент.
Как только вы поймете основы, вам понадобится ассемблер. Хороший, хорошо поддерживаемый универсальный ассемблер с открытым исходным кодом - nasm .