Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59

Вычислить сумму элементов массива (xmm, mmx)

13.04.2012, 22:14. Показов 3517. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ассемблерные вставки (xmm и mxx команды)
само задание: вычислить сумму элементов массива.
вот код делфи
Delphi
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMan, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    xpmnfst1: TXPManifest;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mas: array of Integer;
  s:string;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  s1:string;
  i:Integer;
begin
s:='';
 repeat
  if not InputQuery( 'Ввод', 'Количество элементов массива'+#13, s)
     then exit;                                             //если нажали кнопку отмена выходим
 until s <> '';
 SetLength(mas, StrToInt(s));                               //установка длины массива
 Edit1.Text:='';
 for i:=0 to StrToInt(s)-1 do
  begin
    repeat
      if not InputQuery( 'Ввод', 'Введите '+inttostr(i+1)+' элемент массива', s1)
       then exit;                                            //если нажали кнопку отмена выходим
    until s1 <> '';
    mas[i]:=StrToInt(s1);                                    //заполняем массив
    Edit1.Text:=Edit1.Text+' '+s1;                           //выводим на экран
    s1:='';
    end;
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 Label1.Caption:='';
Label2.Caption:='';
 Edit1.Enabled:=False;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var i,sum:Integer;
begin
  sum:=0;
 for i:=0 to StrToInt(s)-1 do
  begin
   sum:=sum+mas[i];
  end;
   Label1.Caption:='сумма элементов массива';
Label2.Caption:=IntToStr(sum);
end;
 
end.
вот эту часть кода сделать через ассемблерную вставку
Delphi
1
2
3
4
5
 sum:=0;
 for i:=0 to StrToInt(s)-1 do
  begin
   sum:=sum+mas[i];
  end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2012, 22:14
Ответы с готовыми решениями:

Заполнение mmx или xmm регистра одним байтом
Добрый вечер. Суть проблемы в следующем - есть значение, хранящееся в одном байте где-то в памяти :) . Нужно это значение записать...

Не компилируются команды PSRLDQ, MOVDQA, хотя другие команды MMX с указанием регистров XMM компилируются
Добрый день! Возникла необходимость работать с регистрами XMM. Оказалось, что команды PSRLDQ, MOVDQA не компилируются, хотя другие...

Сумма элементов массива(с использованием MMX и XMM команд)
Здравствуйте уважаемые эксперты! Вобщем нужно найти сумму массива с использованием MMX и XMM команд, что-то не могу найти в инете про эти...

3
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
14.04.2012, 08:41
SSE2
Delphi
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
33
34
35
36
37
38
39
40
41
42
43
procedure TForm1.Button2Click(Sender: TObject);
const
  mask: array[0..6] of integer=(-1,-1,-1,0,0,0,0);
var
  i,sum:Integer;
begin
  sum:=0;
  for i:=0 to length(mas)-1 do
  begin
    sum:=sum+mas[i];
  end;
  Label1.Caption:='сумма элементов массива (Delphi) = '+IntToStr(sum);
  asm
  push   ebx
  xorps  xmm0,xmm0
  mov    ebx,[mas]
  mov    eax,[ebx-4]
  mov    edx,eax
  and    edx,3
  sub    eax,edx
  je @end
    mov   ecx,eax
    @sum:movups xmm1,dqword[ebx+ecx*4-16]
         paddd  xmm0,xmm1
         sub    ecx,4
    jnz @sum
  @end:
  movups  xmm1,dqword[ebx+eax*4]
  sub     edx,3
  neg     edx
  movups  xmm2,dqword[mask+edx*4]
  pand    xmm1,xmm2
  paddd   xmm0,xmm1
  movhlps xmm1,xmm0
  paddd   xmm0,xmm1
  movaps  xmm1,xmm0
  psrlq   xmm1,32
  paddd   xmm0,xmm1
  movd    [sum],xmm0
  pop     ebx
  end;
  Label2.Caption:='сумма элементов массива (Assembler) = '+IntToStr(sum);
end;
1
16 / 16 / 9
Регистрация: 03.06.2011
Сообщений: 59
14.04.2012, 10:13  [ТС]
murderer, на 13 строчке пишет [Warning] Unit1.pas(80): Unsafe code 'ASM'. и не могли бы вы дать небольшие пояснения что есть что?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
14.04.2012, 10:38
http://wasm.ru/article.php?article=1022004
Практически это означает то, что вы берете в руки крутейший инструмент, который не имеет абсолютно никакой защиты от дурака. И если какой-нибудь дельфийский компилятор будет некоторое время удивляться вашим попыткам выстрелить себе в ногу, (а потом возьмет и выстрелит в ногу сам!) то ассемблерный не скажет ни слова, полагая, что имеет дело с профессиональным террористом, который знает что делает...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2012, 10:38
Помогаю со студенческими работами здесь

Умножение матриц с применением инструкций XMM и MMX
Всем добрый вечер или уже ночь) Хочу попросить у вас помощи по переделке программы из pascal в ассемблерную вставку с использованием XMM и...

Сумма элементов массива (с использованием MMX команд)
Здравствуйте уважаемые эксперты! Тему уже создавал, но в разделе &quot;Паскаль&quot;, поэтому прощу не удалять.. Помогите найти сумму элементов...

Вычислить сумму элементов каждого столбца массива. Упорядочить столбцы массива по убыванию сумм элементов столбцов.
Заполнить двумерный числовой массив В целыми числами. Вычислить сумму элементов каждого столбца массива. Упорядочить столбцы массива по...

В одномерном массиве, состоящем из n вещественных элементов вычислить минимальный элемент массива и сумму элементов массива. [CPP]
В одномерном массиве, состоящем из n вещественных элементов вычислить минимальный элемент массива и сумму элементов массива, расположенных...

Вычислить количество положительных элементов массива и сумму элементов массива, расположенных после последнего элемента, равного нулю
В одномерном массиве, состоящем из n вещественных элементов, вычислить: количество положительных элементов массива; сумму элементов...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru