Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12

Включение поддержки AVX

01.12.2019, 00:44. Показов 2912. Ответов 4
Метки нет (Все метки)

Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Студворк — интернет-сервис помощи студентам
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
org 0x100
 
    ; Enable SSE
    mov eax,cr0
    and al,0xFB     ; clear coprocessor emulation CR0.EM (bit 2)
    or  al,0x2      ; set coprocessor monitoring CR0.MP (bit 1)
    mov cr0,eax
    mov eax,cr4
    or  eax,0x40600 ; set CR4.OSFXSR (bit 9), CR4.OSXMMEXCPT (bit 10) and CR4.OSXSAVE (bit 18)
    mov cr4,eax
 
    ; Enable AVX
    xor ecx,ecx
    xgetbv          ; load XCR0 register
    or  al,7        ; set AVX, SSE, x87 bits
    xsetbv          ; save back to XCR0
 
    ; Test SSE
    xorps   xmm0,xmm0
    xorps   xmm1,xmm1
    addss   xmm0,xmm1
 
    ; Test AVX
    vzeroupper
    vxorps  xmm0,xmm0,xmm0
    vxorps  xmm1,xmm1,xmm1
    vaddps  xmm2,xmm0,xmm1
 
    ret
Запускаю в VMware (MS-DOS).
Доходит до vzeroupper и виснет.
Что ему ещё не хватает?

Инфа: https://wiki.osdev.org/SSE

Добавлено через 1 минуту
Даже добавляю код из Intel SDM для проверки поддержки AVX, выдаёт, что всё ок.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  mov eax, 1
  cpuid
  and ecx, 018000000H
  cmp ecx, 018000000H; check both OSXSAVE and AVX feature flags
  jne not_supported
  ; processor supports AVX instructions and XGETBV is enabled by OS
  mov ecx, 0; specify 0 for XCR0 register
  xgetbv ; result in EDX:EAX
  and eax, 06H
  cmp eax, 06H; check OS has enabled both XMM and YMM state support
  jne not_supported
  mov eax, 1
  jmp done
not_supported:
  mov eax, 0
done:
Добавлено через 1 час 53 минуты
Короче, в RMode и в V86 AVX не пашет, надо переходить в PMode (в 16 битном тоже должно работать).
Пруф: https://software.intel.com/en-... pic/297055

Добавлено через 56 минут
Всё верно.
Заменил or al,0x2 на or al,0x3, добавил cli и в конец:
Assembler
1
2
3
    mov eax,cr0
    and al,not 1
    mov cr0,eax
И всё заработало.

Добавлено через 1 час 53 минуты
При нежелании работать всегда в PMode, можно даже переключаться на время работы с AVX в PMode, а после обратно в RMode.
При этом, если не писать в сегментные регистры, можно спокойно работать с памятью, как будто мы находимся в RMode. Не надо никаких таблиц грузить (GDT и пр)
Я сейчас померил скорость переключения RM-PM-RM в VMware, у меня получилось порядка полумиллиона пар переключений в секунду. Довольно-таки неплохая скорость (в реале наверняка будет больше)
5
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2019, 00:44
Ответы с готовыми решениями:

Сравнение SSE и AVX. Почему AVX медленнее?
Написал такой код для теста: void SSETest(float* v1, float* v2, float* r) { for (int i = 0; i < 2147483647; i++) { ...

Включение полной поддержки ассемблера в Борланде
как это сделать??(не понимает регистр eip , тупит командой call, не использует метки с++...)

Включение поддержки C++/CLI
Подскажите где скачать C++/CLI support. Не могу найти.

4
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
02.12.2019, 11:09
Женя полодчик
2
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
02.12.2019, 12:29
Jin X, почему бы не создать запись в группе Assembler & Low Level forever (for Profi only)?
Чтобы не потерялось...
2
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
03.12.2019, 16:09  [ТС]
liv, лучше сюда: ✅ Полезные ссылки, книги, инструменты
Т.е. в группе как-то всё слишком тихо и безжизненно.
p.s. Done!
3
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.12.2019, 16:11
Jin X, годится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2019, 16:11
Помогаю со студенческими работами здесь

Включение поддержки UNICODE в программе
Помогите пожалуйста с такой проблемой: я написал программу используя просто main(). В программе у меня есть функции, в которых выполняется...

Включение поддержки C99 в CodeBlocks
Здравствуйте! Нужно написать прогу на C (без плюсов, желательно чтоб стандарт С99). Пишу в C::B. Эта сволочь мне выдает: use...

Включение аппаратной поддержки float
Добрый день. У STM32F4 есть аппаратная поддержка чисел типа ftoot. В Keil в настройках проекта опция Ftooting Point Hordware установлена...

УПП 1.3. Включение поддержки на измененной конфигурации с сохранением изменений
Здравствуйте! Имеется 1с8.3 конфигурация УПП 1.3. Включаю возможность редактирования в конфигураторе. Производятся изменения процедур....

8700K AVX
Доброго времени суток. Вопрос в следующем : имею 8700k в разгоне до 4.8, avx - 2 , следовательно частота при использовании avx понижается...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru