|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.09.2011, 11:51 | #1 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
дельфи с asm-вставками
Решил тут написать программу, выводящую квадратные корни из первых _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. |
14.09.2011, 12:15 | #2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
не совсем понятно почему четверки (xmm2) задвигаются на N, вместо того, чтобы задвинуть результат (xmm0) на а.
Код:
Последний раз редактировалось f.hump; 14.09.2011 в 12:35. Причина: забыл про x64 |
14.09.2011, 12:45 | #3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
эмм, Delphi XE2?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.09.2011, 13:52 | #4 | |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
Цитата:
Да. А может, есть здесь причины использовать 2010? У меня она тоже стоит. P.S. По идее, mysqrt должна вообще-то возвращать результат, а не модифицировать некий массив, но из-за ограничений XE2 не могу с этим справиться. |
|
14.09.2011, 14:26 | #5 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
|
|
14.09.2011, 14:57 | #6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
далее, я бы посмотрел как Делфи вовращает результат нужного вам типа(ну тут int32, значит поидее он в eax вернется) ну и возвращать. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
14.09.2011, 15:33 | #7 |
Пользователь
Регистрация: 24.08.2011
Сообщений: 40
|
Т.е. надо написать функцию, возвращающую нужный мне тип, и под отладчиком посмотреть, в какой регистр это значение попадает?
|
14.09.2011, 15:42 | #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 |