Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
4 / 4 / 0
Регистрация: 27.03.2011
Сообщений: 38
1

GCC Inline Assembly перевести в Visual Studio Inline Assembler

26.05.2012, 14:32. Просмотров 1563. Ответов 2
Метки нет (Все метки)


Здравствуйте.
Есть код на GCC Inline Assembly и его нужно перевести в Visual Studio Inline Assembler.
Не работал с GCC Inline Assembly и знания в asm довольно поверхностные, поэтому возникает много сложностей.

Вставка копирует данные из указателя src в регистры xmm, по 16 байт за раз. Собственно вставка нужна для замера скорости чтения из RAM (для этого и используется movntdqa) и ничего полезного не делает. Проблема с пониманием директивы .align (выравнивание), т.е. как ее реализовать в Visual Studio Inline Assembler. Буду рад отдельным советам или если кто-то может, полному коду на VS Inline ASM.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void memReadNT(void* src, size_t size) {
    asm volatile("\n\
.align 16 \n\
0: movntdqa (%1), %%xmm0 \n\
movntdqa 16(%1), %%xmm1 \n\
movntdqa 32(%1), %%xmm2 \n\
movntdqa 48(%1), %%xmm3 \n\
add $64, %1 \n\
dec %0 \n\
jnz 0b \n"
        :"+r" (size), "+r" (src)
        :
        :"%xmm0","%xmm1","%xmm2","%xmm3");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2012, 14:32
Ответы с готовыми решениями:

переписать код в GCC Inline Assembly
Добрый день! cld lea di,buffer mov dx,01f0h mov cx,256 ...

Ошибка компиляции GCC Inline Assembly
#include "stdafx.h" #include <stdio.h> #include <windows.h> #include <locale.h> #include...

GCC & Assembly inline
вот захотелось мне зделать сpp код с ассемблеровской вставкой, работаю под убунтой как...

не могу разобраться с GCC Inline Assembly (код внутри)
Случайно не в ту тему кинул! #include "stdafx.h" #include <stdio.h> #include <windows.h>...

__________________
Помогаю в написании студенческих работ здесь.
2
2011 / 1283 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
26.05.2012, 14:49 2
ignisdivine, к сожалению я сейчас за стареньким компом, проц не поддерживает инструкции sse4, так что проверить не могу. Попробуй в Visual Studio использовать для выделения памяти функцию _aligned_malloc, тогда проблем с выравниванием не будет. Также, адреса можно выравнивать вручную. Например, посмотри как это делается в crt функциях Visual Studio. (В папке Microsoft Visual Studio x.0\VC\crt\src\intel\ файлы memcpy.asm, memmove.asm и т.д.)
0
4 / 4 / 0
Регистрация: 27.03.2011
Сообщений: 38
26.05.2012, 21:03  [ТС] 3
Спасибо, а можете объяснить, зачем это используется конкретно здесь?

Добавлено через 19 минут
По логике вроде как понятно, что операнд %1 src смещается на 16 байт, а как это выполнить в Visual Studio?
Assembler
1
movntdqa 16(%1), %%xmm1 \n\
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2012, 21:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?
Здравствуйте. Знаю теорию, но не понимаю, на сколько должна быть маленькая функция, чтоб она...

inline функции vs инструкции inline функций
Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные,...

inline assembler в СИ
Доброго! каким образом можно связать внешную переменную и встроенный ассмблер в Си? чтоб было...

Почему ругается gcc при использовании inline + setjmp() ?
Добрый день. Решил написать простой карусельный переключатель задач для микроконтроллера. Для...


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

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

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