Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
S2dent
52 / 50 / 24
Регистрация: 10.05.2009
Сообщений: 216
1

Сумма элементов массива (с использованием MMX команд)

21.05.2010, 17:21. Просмотров 2043. Ответов 1
Метки нет (Все метки)

Здравствуйте уважаемые эксперты! Тему уже создавал, но в разделе "Паскаль", поэтому прощу не удалять.. Помогите найти сумму элементов массива, с использованием MMX команд, вот код в котором эти команды не используются(вставка в Паскале):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
asm
  xor ax,ax {очищаем регистр ax}
  xor bx,bx {очищаем регистр bx}
  mov Sum,0 {инициализируем сумму элементов массива}
  mov cx,n  {инициализируем счетчик cx}
  lea bx,Mas {помещаем адрес массива в bx}
l1:
  mov ax,word ptr[bx]
  add Sum,ax {к содержимому Sum прибавляем ax}
  add bx,2 {увеличиваем счетчик адреса на 2}
loop l1 {повторяем до тех пор, пока сх не станет нулем}
end;
Заранее огромное спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2010, 17:21
Ответы с готовыми решениями:

Сумма элементов матрицы (с использованием SIMD-команд)
Здравствуйте! Прошу помочь мне со следующим заданием: Суммирование элементов...

Сложить два числа с помощью MMX команд в программе на C
всем привет! Помогите решить задачу: нужно сложить два числа с помощью MMX...

Вычислить сумму элементов массива (xmm, mmx)
ассемблерные вставки (xmm и mxx команды) само задание: вычислить сумму...

Вычислить D=(A*B)-C для массивов с использованием MMX
массивы. D=(A*B)-C; не работает программа. Написал исходя из того что смог...

Сложить две матрицы с использованием MMX и без. И посчитать время
Задача такая: Умножить матрицу А на число которое введет пользователь. Затем...

1
Ivan_32
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
21.05.2010, 18:45 2
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    mass dw 1,2,3,4,5,6,7,8
         dw 9,10,11,12,13,14,15,16
         dw 17,18,19,20,21,22,23,24
         dw 25,26,27,28,29,30,31,32
    mm   dw 0,0,0,0
section '.code' code readable writeable executable
 
Main:
    mov esi,mass
    xor ecx,ecx
    movq mm0,[esi]  ; MM0 = Первые четыре Word-а
    add esi,8       ; Переводим указатель на следующие 4 word-а
    
    @@:             
    paddw mm0,[esi] ; MM0=MM0+ следующие 4 word-а 
    add ecx,4       ; увеличиваем счетчик обработанных word-ов на 4
    add esi,8       ; а указатель на 8 , т.к. 4*2 байта = 8 байт. 
    cmp ecx,32      ; это количество word-ов в массиве, не размер массива.
    jb @b           ; если меньше - продолжаем цикл.
    
    movq qword [mm],mm0  ; сохраняем результат в памяти
    movzx eax,[mm]       ; берем первый word результирующего регистра
    movzx edx,[mm+2]     ; берем второй word
    add eax,edx          ; суммируем
    movzx edx,[mm+4]     ; берем следующий(их всего 4) 
    add eax,edx          ; опять суммируем
    movzx edx,[mm+6]     ; и опять берем
    add eax,edx          ; суммируем с последним.
    cinvoke printf,"%i",eax
 
    cinvoke getch
    invoke  ExitProcess, 0

Еще есть очень хороший источник информации по MMX: MMX Instruction Set
Там же есть информация по SSE.

Кстати, очень рекомендую отказаться от использования CISC-подобных команд, вроде LOOP - они просто таки пожирают процессорное время.
Для примера:
mov ecx,1000
@@:
loop @b
~5000 тактов.

mov ecx,1000
@@:
sub ecx,1
cmp ecx,0
ja @b
~1020 тактов.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2010, 18:45

Сложить два массива по 8 натуральных чисел, с насыщением MMX ассемблер NASM
Здравствуйте! Пишу программу, складывающую поэлементно 2 массива по 8...

Разработка программ с использованием цепочечных команд
добрый вечер, может у кого завалялись какие нибудь простенькие программки по...

Разработка программ с использованием цепочечных команд
помогите, пожалуйста, в написании программы: Ввести строку из произвольного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru