Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2013, 22:34   #1
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию Перечень инструкций и имён регистров текущей версии MASM

Как можно узнать мнемоники команд и имена регистров, которые поддерживает текущая версия MASM? Например, как догадаться, что регистр MMX0 процессора обозначается в ассемблере MM0?
Как поставить соответствие между реальным типом процессора (например, Intel Core 2 Duo) и директивой ассемблера, например, .586P или .686P? Есть ли какое-нибудь руководство?
Dmitry_B вне форума Ответить с цитированием
Старый 12.07.2013, 22:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

686 пенек это как бы вполне определенная серия процев.
Цитата:
Например, как догадаться, что регистр MMX0 процессора обозначается в ассемблере MM0?
надо доки читать, а не гадать.
в описании технологии есть такое:
Цитата:
Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7.

Цитата:
Есть ли какое-нибудь руководство?
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
раздел Processor
надо тискать кстати не соответствие между процами, а между технологиями.
ибо в основном 686 хватит как основа, а далее расширения лишь.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.07.2013, 23:10   #3
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
686 пенек это как бы вполне определенная серия процев.
надо доки читать, а не гадать.
в описании технологии есть такое:
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
раздел Processor
надо тискать кстати не соответствие между процами, а между технологиями.
ибо в основном 686 хватит как основа, а далее расширения лишь.
Читал, разумеется. Не устраивает то, что у Intel такое упоминание можно встретить как единственная оговорка на ~300-й странице описания из ~800-1000 страниц. В остальных местах именно MMX. Логично предположить, что подобное относится и к другим элементам архитектуры процессора.

Далее текст из руководства Intel:
The Intel Xeon processor 5200, 5400, and 7400 series, Intel Core 2 Quad processor Q9000 Series, Intel Core 2 Duo
processor E8000 series support Intel 64 architecture; they are based on the Enhanced Intel® Core microarchitecture
using 45 nm process technology.

Лично мне от этого легче не стало. Терминология Intel и Microsoft не совпадают. Убедитесь в этом сами, почитав Вашу ссылку на директивы ассемблера в MSDN.
Dmitry_B вне форума Ответить с цитированием
Старый 12.07.2013, 23:27   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что именно не совпадает?
Core2Duo уже куда старее чем 686, и он полностью поддерживает инструкции 686-го.
из 32-битных инструкций, помоему ничего более не появлялось, лишь расширения.
дальше идет 64-битный режим.

регистры mmx официально mm0-mm7, что вам не нравится не знаю.
Цитата:
В остальных местах именно MMX.
где то пишется что регистр mmx0 причем в коде?
пруф линк.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 12.07.2013 в 23:30.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.07.2013, 14:45   #5
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Имена регистров и другую основополагающую информацию смотрел здесь:
http://www.intel.com/content/www/us/...al-325462.html
О процессорах Intel (см. ссылку):
16-bit Processors and Segmentation (1978)
The Intel® 286 Processor (1982)
The Intel386™ Processor (1985)
The Intel486™ Processor (1989)
The Intel® Pentium® Processor (1993)
The P6 Family of Processors (1995-1999)
The Intel® Pentium® 4 Processor Family (2000-2006)
The Intel® Xeon® Processor (2001- 2007)
The Intel® Pentium® M Processor (2003-Current)
The Intel® Pentium® Processor Extreme Edition (2005-2007)
The Intel® Core™ Duo and Intel® Core™ Solo Processors (2006-2007)
The Intel® Xeon® Processor 5100, 5300 Series and Intel® Core™2 Processor Family
(2006-Current)
The Intel® Xeon® Processor 5200, 5400, 7400 Series and Intel® Core™2 Processor
Family (2007-Current)
The Intel® Atom™ Processor Family (2008-Current)
The Intel® Core™i7 Processor Family (2008-Current)
The Intel® Xeon® Processor 7500 Series (2010)
2010 Intel® Core™ Processor Family (2010)
The Intel® Xeon® Processor 5600 Series (2010)
2nd Generation Intel® Core™ Processor Family (2011)
Не вижу в этом перечне ни «586», ни «686». Хотелось бы Microsoft – рекомендаций по установлению соответствия между типом процессора и соответствующей директивой ассемблера.
Любопытно отметить наличие в ассемблере директив .MMX и .XMM. Это косвенно свидетельствует об отсутствии однозначного соответствия.

Последний раз редактировалось Dmitry_B; 14.07.2013 в 14:51.
Dmitry_B вне форума Ответить с цитированием
Старый 14.07.2013, 15:05   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Любопытно отметить наличие в ассемблере директив .MMX и .XMM. Это косвенно свидетельствует об отсутствии однозначного соответствия.
соответсвия между чем?

.MMX - набор инструкций MMX (прошлый век), Интел рекомендует отказаться от его использования

.XMM - набор SSE

есть еще

.YMM - набор AVX
f.hump вне форума Ответить с цитированием
Старый 14.07.2013, 15:30   #7
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Если ассемблер должен преобразовать текст программы в машинные коды, то ему необходимо учитывать, для какого именно процессора он должен это делать. Поэтому необходимо как-то указать ассемблеру тип используемого процессора. Но типов процессоров много (полный перечень я выше привёл), а директив ассемблера по сути, две: .586 и .686. Тогда должно быть руководство, какому процессору какая директива соответствует.
Наличие же директив .MMX и .XMM говорит о том, что директивы .686, например, недостаточно для того, чтобы указать ассемблеру, что эти наборы регистров в процессоре присутствуют.
Где можно посмотреть, как правильно применять директивы MASM для описания архитектуры целевого процессора (если уж нельзя просто указать его тип)?
Dmitry_B вне форума Ответить с цитированием
Старый 14.07.2013, 15:46   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ну, эти директивы указывают не на конкретные процессоры, а на наборы инструкций, которые хочется разрешить для использования в программе.
в принципе, эти директивы бесполезны, подтверждением этому является факт, что они больше не поддерживаюся компиляторами, которые идут в комплекте с Windows SDK/WDK. теперь с самого начала для использования разрешено все, что заложено в компилятор, и это приятно.

Цитата:
Если ассемблер должен преобразовать текст программы в машинные коды, то ему необходимо учитывать, для какого именно процессора он должен это делать.
не надо думать лишнего, инструкции асма имеют едиственное представление в опкод.

Последний раз редактировалось f.hump; 14.07.2013 в 15:52.
f.hump вне форума Ответить с цитированием
Старый 14.07.2013, 15:59   #9
Dmitry_B
Пользователь
 
Регистрация: 29.03.2009
Сообщений: 83
По умолчанию

Позавчера скачал и обновил MASM (всё по инструкциям Microsoft). Без без директивы .MMX ассемблер не распознаёт имена регистров в программе, сообщает об ошибке; без .XMM - соответственно то же самое с регистрами XMM.
Разрешать всё, что заложено в компилятор, думаю, нельзя: целевой процессор может быть не самым новым и может не выполнять какие-то команды.
Dmitry_B вне форума Ответить с цитированием
Старый 14.07.2013, 16:10   #10
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Dmitry_B, Вы бы код свой показали на всякий случай.
vadimych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как установить шаблон версии 9.7 на движок версии 9.8? Vallerik WordPress и другие CMS 1 26.03.2013 12:34
Постоение отчета через COM. Как получить список выполненых Word'ом инструкций? Человек_Борща Microsoft Office Word 5 11.03.2013 07:52
Применение логических инструкций. Assembler Wasisualy Помощь студентам 0 11.01.2012 20:43
Перечень(список) номеров блоков fantaYKT Помощь студентам 0 19.05.2011 20:45