Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 13:21   #1
gansm
Новичок
Джуниор
 
Регистрация: 27.10.2010
Сообщений: 4
Печаль MMX сложить два числа

всем привет!
Помогите решить задачу: нужно сложить два числа с помощью MMX комманд в программе на C. Как это сделать? Можно ли сложить два дробных числа?
gansm вне форума Ответить с цитированием
Старый 27.10.2010, 13:27   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от gansm
сложить два числа с помощью MMX комманд в программе на C
А ветка-то "программирование на ассемблере" Рука, что ли дрогнула? Хотя на MMX можно и в ассемблере складывать

Последний раз редактировалось Mikl___; 27.10.2010 в 13:42.
Mikl___ вне форума Ответить с цитированием
Старый 27.10.2010, 13:28   #3
gansm
Новичок
Джуниор
 
Регистрация: 27.10.2010
Сообщений: 4
По умолчанию

так мне и нужно на ассемблере
gansm вне форума Ответить с цитированием
Старый 27.10.2010, 14:06   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

gansm
MMX это параллельная обработка. Арифметические MMX-команды работают с упакованными байтами и словами со знаком и без знака, а также с упакованными двойными словами со знаком. Они могут использовать как циклическую арифметику, так и арифметику с насыщением. Для сложения дробных чисел используют FPU
Складывать два числа через MMX -- это как микроскопом колоть орехи
Команды MMX работают с 64-разрядными целочисленными данными, а также с данными, упакованными в группы (векторы) общей длиной 64 бита. Такие данные могут находиться в памяти или в восьми MMX-регистрах. Эти регистры называются MM0, MM1, ...MM7. Команды MMX работают со следующими типами данных:
упакованные байты (восемь байтов в одном 64-разрядном регистре) -- packed byte
упакованные слова (четыре 16-разрядных слова в 64-разрядном регистре) -- packed word
упакованные двойные слова (два 32-разрядных слова в 64-разрядном регистре) -- packed doubleword
64-разрядные слова -- quadword.

MMX-команды имеют следующий синтаксис: instruction dest, src
instruction - имя команды, dest обозначает выходной операнд, src - входной операнд.

Большинство MMX-команд имеют суффикс, который определяет тип данных и используемую арифметику:
US(unsigned saturation) - арифметика с насыщением, данные без знака.
S или SS(signed saturation) - арифметика с насыщением, данные со знаком. Если в суффиксе нет ни S, ни SS, используется циклическая арифметика (wraparound).
B, W, D, Q указывают тип данных. Если в суффиксе есть две из этих букв, первая соответствует входному операнду, а вторая - выходному.
MMX- команды сложения:
PADDB mm, mm/m64;
PADDW mm, mm/m64;
PADDD mm, mm/m64
складываются элементы данных (байты, слова или двойные слова) входного и выходного операнда. Если сумма выходит за границу допустимого диапазона, то по правилам циклической арифметики избыток отсчитывается от другой границы диапазона. "Переноса" единицы из одного элемента данных в другой не происходит.
PADDSB mm, mm/m64;
PADDSW mm, mm/m64
складываются элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.
PADDUSB mm, mm/m64;
PADDUSW mm, mm/m64
складываются элементы данных (байты или слова) входного и выходного операнда. Если сумма выходит за граничное значение допустимого диапазона, то результатом считается это граничное значение.

Последний раз редактировалось Mikl___; 27.10.2010 в 14:24.
Mikl___ вне форума Ответить с цитированием
Старый 27.10.2010, 14:25   #5
gansm
Новичок
Джуниор
 
Регистрация: 27.10.2010
Сообщений: 4
По умолчанию

спасибо за ответ.
я это все читал.
мне бы пример именно с двумя числами. я не силен в asm
gansm вне форума Ответить с цитированием
Старый 27.10.2010, 14:30   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

movq mm0,[esi];первый вектор в mm0
movq mm1,[edi];второй вектор в mm1
paddb mm0,mm1; результат сложения в mm0
Mikl___ вне форума Ответить с цитированием
Старый 27.10.2010, 14:37   #7
gansm
Новичок
Джуниор
 
Регистрация: 27.10.2010
Сообщений: 4
По умолчанию

на сколько я понимаю, это получится сложение 8ми байтовых чисел?

а мне нужно два int числа, например a=1000, b= 23000. как посчитать сумму a+b?
gansm вне форума Ответить с цитированием
Старый 28.10.2010, 03:48   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
мне нужно два int числа, например a=1000, b= 23000. как посчитать сумму a+b?
gansm
B очередной раз спрашиваю, а при чем здесь MMX?
Код:
.data
a qword 1000
b qword 23000
result qword ?
.code
movq mm0,a
paddq mm0,b
movq result,mm0
Mikl___ вне форума Ответить с цитированием
Старый 28.10.2010, 09:22   #9
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
.data
a dword 1000
b dword 23000
result dword ?
.code
movd mm0,a
movd mm1,b
paddq mm0,mm1
movd result,mm0
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 28.10.2010, 10:04   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

airyashov
зачем грузить в mm1, если можно непосредственно paddq mm0,b? Для понту бандитского?
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сложить два числа с плавающей точкой forsy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 19 29.03.2010 02:15
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 22:02
сложить 2 числа breate Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.11.2009 23:06
Сложить два числа и вывести результат на экран We1c0m3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2009 11:41
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27