В данном руководстве описано как использовать xmm регистры, а так же некоторые команды.
Список некоторых команд (напоминалка):
О регистрах:
Регистры в этих дополнениях сопроцессора очень похожи на основные, но в отличии от них могут содержать целых четыре элемента, и даже работать сразу со всеми четырьмя!
Арифметические операции с регистрами:
Все функции сложения, вычитания, и другие могут быть совершены только с регистрами.
Такая инструкция сработает:
addss xmm0,[MyLabel]
А такая - нет.
addss [MyLabel],xmm0
Потому следует все операции производить после записи регистров.
Например, если необходимо прибавить что нибудь к переменной можно использовать такой код:
movss xmm0,[MyLabel] //Записываем в xmm0 наше число
addss xmm0,[MyAddValue] //Добавляем к нему другое
movss [MyLabel],xmm0 //Записываем из xmm0 назад в число.
Так же нужно помнить что регистры это не стек, и потому значения свои сохраняют после записи.
Как уже было сказано выше, эти регистры могут содержать целых 4 элемента - работа с массивами:
Массив должен состоять из четырёх элементов, например такой:
MyMassiv:
dd (float)2
dd (float)7
dd (float)29324.126
dd (float)8261.3
Что бы записать этот массив в xmm мы можем использовать следующий код:
movups xmm0,[MyMassiv]
После чего получим в xmm0 все четыре числа по порядку.
Теперь мы можем сделать что нибудь с этим массивом, например умножить его на другой массив. К примеру вот такой:
MyMassivMul:
dd (float)1
dd (float)2
dd (float)0.5
dd (float)2
Умножаем:
movups xmm0,[MyMassiv] //Загружаем наш массив
movups xmm1,[MyMassivMul] //Загружаем массив на который умножим
mulps xmm0,xmm1 //Умножаем
movups [MyMassiv],xmm0 //Возвращаем в наш массив.
После выполнения этого кода, массив примет такой вид:
2; 14; 14662,063; 16522,6.
Так же можно вычитать, делить, находить корень, складывать, и многое другое.