На нашем форуме вы можете получить приватный чит для игры Euro Truck Simulator 2. Подробности по ссылке ниже:
Тема с читом на Euro Truck Simulator 2
Авторизация  
imaginary

О MMX и SSE - некоторые команды, регистры.

Рекомендуемые сообщения

В данном руководстве описано как использовать xmm регистры, а так же некоторые команды.
 

Список некоторых команд (напоминалка):
 

Спойлер

Регистры
xmm0
xmm1
xmm...
xmm15
Выполняют те же функции что и обычные регистры, но могут хранить в разы больше. Могут быть приёмником и источником для команд MMX.

Команды записи
movd *,* - записывает 4 байта из переменной в приёмник.
movq *,* - записывает 8 байт.
movss *,* - записываем float (4 байта) из переменной в приёмник
movsd *,* - записывает doble (8 байт) их переменной в приёмник
Массивные
movups *,* - записывает 4 элемента массива в том порядке в котором они идут в приёмник
movaps *,* - записывает выравненные 4 элемента массива
movhlps *,* - записываем 2 левых элемента из источника в 2 правых приёмника
movlhps *,* - записываем 2 правых элемента из источника в 2 левых приёмника
movhps *,* - записывает 2 левых элемента из источника в 2 левых приёмника.
movlps *,* - то же что и выше но 2 правых элемента.

Арифметические команды. Любые действия выполняются в следующем порядке - приёмник на источник, запись в приёмник. (приёмник это первая *, источник - вторая *)
addsd *,* - сложение двух чисел с плавающей запятой, типа doble (8 байт).
subsd *,* - то же что выше но вычитание.
mulsd *,* - Умножение.
divsd *,* - Деление.
sqrtsd *,* - Корень из doble
addss *,* - Сложение двух float (4 байта)
subss *,* - Вычитание float
mulss *,* - Умножение float
divss *,* - Деление float
sqrtss *,* - Корень из float
Массивные
addps *,* - складывает 2 массива
subps *,* - вычитает массив из массива
divps *,* - делит массив на массив.
mulps *,* - умножает массив на массив.
sqrtps *,* - корни из массива

Команды сравнения
comiss - сравнение двух float
comisd - сравнение doble

Команды преобразования
cvtsi2ss - преобразовать целое в float
cvtsi2sd - преобразовать целое в doble
cvttss2si - преобразовать вещественное в целое с округлением.

 


О регистрах:
Регистры в этих дополнениях сопроцессора очень похожи на основные, но в отличии от них могут содержать целых четыре элемента, и даже работать сразу со всеми четырьмя!

Арифметические операции с регистрами:
Все функции сложения, вычитания, и другие могут быть совершены только с регистрами.
Такая инструкция сработает:

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.
Так же можно вычитать, делить, находить корень, складывать, и многое другое.

Изменено пользователем inaginary

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример:

Спойлер

image.thumb.png.beba9dd0a95b530f3fd321aa2e34134f.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
22 минуты назад, Garik66 сказал:

Пример

В статье нет примеров и видео, поскольку мне кажется тут не о чем больше рассказывать, (в отличии от FPU) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
24 минуты назад, inaginary сказал:

В статье нет примеров и видео, поскольку мне кажется тут не о чем больше рассказывать, (в отличии от FPU) ?

Ты пока не много сталкивался с пользователями,
некоторым приходится ну очень подробно рассказать и показать.:wacko:
ЗЫ: даже то, что я одинаковые лейблы сделал, могут не обратить внимания, и потом задавать вопросы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, Garik66 сказал:

некоторым приходится ну очень подробно рассказать и показать

 

 таким  как я . )))))
у меня появлиась  сразу куча вопросов .  полезная инфа , но много не  понятно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 Спасибо за статью ! 😃

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а xor это что?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация