![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
![]()
Решил тут написать программу, выводящую квадратные корни из первых _N_ чисел на экран (с использованием XMM-регистров).
Схема работает так: 1) Вводится число _N_. 2) XMM1 инициализируется как 4.0 3.0 2.0 1.0 (4 числа типа single). 3) XMM2 инициализируется как 4.0 4.0 4.0 4.0 (то же) 4) В цикле до _N_ shr 2 извлекается корень из 4 чисел сразу, после чего заносится в массив _a_, который и выводится на экран. Проблема: первые 4 значения выводятся нормально, после чего идут одни нули. Вопросы: 1) Как организовать сохранение XMM0, XMM1 и XMM2 в цикле? При выполнении writeln регистры XMM почему-то обнуляются. 2) Как "вытащить" значение XMM0 в массив _а_? Код прилагается. Код:
Последний раз редактировалось alexdelphi; 14.09.2011 в 13:48. |
![]() |
![]() |
![]() |
#2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
не совсем понятно почему четверки (xmm2) задвигаются на N, вместо того, чтобы задвинуть результат (xmm0) на а.
Код:
Последний раз редактировалось f.hump; 14.09.2011 в 12:35. Причина: забыл про x64 |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
эмм, Delphi XE2?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#4 | |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
![]() Цитата:
Да. А может, есть здесь причины использовать 2010? У меня она тоже стоит. P.S. По идее, mysqrt должна вообще-то возвращать результат, а не модифицировать некий массив, но из-за ограничений XE2 не могу с этим справиться. |
|
![]() |
![]() |
![]() |
#5 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
далее, я бы посмотрел как Делфи вовращает результат нужного вам типа(ну тут int32, значит поидее он в eax вернется) ну и возвращать. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
![]()
Т.е. надо написать функцию, возвращающую нужный мне тип, и под отладчиком посмотреть, в какой регистр это значение попадает?
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
ну да, так вы сможете правильно писать функции, и чтоб использовать их по человечески.
кстати, у вас там rax, у вас точно проект 64-битный? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка-ВСТАВКАМИ | sher_man | Помощь студентам | 0 | 15.04.2011 08:03 |
сортировка вставками | Irk-O | Помощь студентам | 1 | 16.10.2010 23:11 |
Сортировка вставками | Katyunya | Помощь студентам | 1 | 20.04.2010 08:27 |
Сортировка вставками | Pti44ka | Помощь студентам | 3 | 17.11.2009 16:49 |