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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 11:45   #1
Crollspase
 
Регистрация: 26.04.2009
Сообщений: 5
Сообщение Несовершенство макрокоманд или как я разочаровался в MASM'е

Общеприветствую всех сюда зашедших. Я очень люблю использовать Asm для написания своих программ и не променяю его ни на какой другой язык программирования. Все было нормально, пока я программировал на нём железо и видеопамять в MS-DOS и пользовался большинством API функций в Windows. Но когда я начал практиковать 3D графику на OpenGL, я был неприятно удивлён тем, что транслятор, разработанный Мелкомягкими, при обработке директивы INVOKE не поддерживает непосредственные операнды с плавающей точкой. В то же время я заметил, что в тексте программы там и сям в большом количестве начали пестреть команды математического сопроцессора, из-за чего (ИМХО) сильно ухудшилась читабельность программы, да и писать код стало ощутимо тяжелее. Тут то я и вспомнил главы учебника для ВУЗов Юрова (кстати, опять же ИМХО, дрянь-книга... куда только смотрело МинОбра РФ, когда допускало её в качестве учебного пособия для студентов...) посвящённые макрокомандам, которые я в своё время лишь пробежал глазами. Макросредства MASM'а я изучил, однако всё равно остался недоволен. Мне хотелось использовать составленные мной средства языков высокого уровня, не покидая при этом возможности Assembler'а.
С++ для этого не подошёл мне по 3-м причинам:

1) Его средства (опять же ИМХО) недостаточно эффективно реализованы (я видел на какие команды Asm'а раскладывается его исходный код);

2) Всякий раз, когда в тексте потребуется вставить Asm-команду, нужно писать "_asm" и открывать, а потом ещё и закрывать фигурную скобку;

3) Возможности Assembler'a в С++ очень сильно урезаны.

Вот тогда я и задумался: а почему бы мне не написать собственный транслятор, а за одно и линкер тоже?

Поэтому прошу всех, кто сейчас читает этот текст, дать ссылки на материалы по следующим темам:

● структура *.obj *.com и *.exe файлов для платформ MS-DOS, Win16, Win32 и Win64;
● структура и коды машинных команд (в том числе недокументированных).

Желательно, конечно, чтобы материалы были на русском, но ссылки на англоязычные материалы мне также очень помогут. Если что-то конкретное есть в MSDN, просьба также дать ссылки, которые можно (для тех, кто об этом не знает) скопировать из combo box'а, который находится вверху просматриваемой страницы. Заранее спасибо!
Crollspase вне форума Ответить с цитированием
Старый 26.04.2009, 13:31   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

FASM тоже не понравился? Макроязык там лучше (все invoke, if, while, import являются макросами, можно даже переделать, если надо).

http://www.sandpile.org/ia32/
http://wasm.ru/article.php?article=green2red02
Somebody вне форума Ответить с цитированием
Старый 26.04.2009, 18:26   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
В то же время я заметил, что в тексте программы там и сям в большом количестве начали пестреть команды математического сопроцессора, из-за чего (ИМХО) сильно ухудшилась читабельность программы, да и писать код стало ощутимо тяжелее.
Вот всё таки не понял, как это что то само может начать пестреть в тексте программы? Или вы его сами туда написали, а теперь не нравится, что оно там пестреет?

Цитата:
я был неприятно удивлён тем, что транслятор, разработанный Мелкомягкими, при обработке директивы INVOKE не поддерживает непосредственные операнды с плавающей точкой.
Ага, есть такой грешок. Ну если дело только в этом, то зачем же прям так сразу свой транслятор (да ещё и компоновщик) писать. Это же ведь всего навсего константы. Объявите их единожды и используйте дальше в тексте программы сколько влезет без всякого сопроцессора прям в директиве INVOKE.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 26.04.2009, 18:48   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Crollspase Посмотреть сообщение
В то же время я заметил, что в тексте программы там и сям в большом количестве начали пестреть команды математического сопроцессора, из-за чего (ИМХО) сильно ухудшилась читабельность программы, да и писать код стало ощутимо тяжелее.
во-первых, всё зависит от тебя ведь ты же пишешь программу, не нравятся команды математического сопроцессора не используй их.
во-вторых, как же ты без математического сопроцессора будешь работать с дробными числами?

Цитата:
Сообщение от Crollspase Посмотреть сообщение
Тут то я и вспомнил главы учебника для ВУЗов Юрова (кстати, опять же ИМХО, дрянь-книга... куда только смотрело МинОбра РФ, когда допускало её в качестве учебного пособия для студентов...) посвящённые макрокомандам, которые я в своё время лишь пробежал глазами.
все книги на русском языке являются лишь пособием для начального изучения ассемблеера, 99% книг посвящены программированию в DOS, не стоит ожидать от них большего. Например, в этих книгах уделяется много внимания тому сколько во сколько тактов выполняются команды, (такая-то-такая-то команда выполняется за 4 такта, такая-сякая команда выполняется за 5 тактов) но многие совсем забывают что технологии производства процессоров не стоят на месте, и большинство команд выполняются быстрее, а некоторые команды за счёт "спаривания" выполняются одновременно!


Цитата:
Сообщение от Crollspase Посмотреть сообщение
Вот тогда я и задумался: а почему бы мне не написать собственный транслятор, а за одно и линкер тоже?

Поэтому прошу всех, кто сейчас читает этот текст, дать ссылки на материалы по следующим темам:

● структура *.obj *.com и *.exe файлов для платформ MS-DOS, Win16, Win32 и Win64;
● структура и коды машинных команд (в том числе недокументированных).

Желательно, конечно, чтобы материалы были на русском, но ссылки на англоязычные материалы мне также очень помогут. Если что-то конкретное есть в MSDN, просьба также дать ссылки, которые можно (для тех, кто об этом не знает) скопировать из combo box'а, который находится вверху просматриваемой страницы. Заранее спасибо!
FASM юзал? вот сначала его поюзай прежде чем писать свой ассемблер
rpy3uH вне форума Ответить с цитированием
Старый 26.04.2009, 21:42   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Вот нарыл в архивах у себя генератор констант single float (может
сгодится)
1. Задаёте стартовое значение.
2. Задаёте финишное значение (естественно больше стартового)
3. Задаёте шаг генерации констант
4. Жмёте кнопку.
5. Получается файл float_const.inc
6. Цепляем файл float_const.inc к своей программе и всё, нам доступны константы single float из указанного диапазона с указанным адресом.

Каждая константа имеет уникальное имя:
К примеру:
1. C_FLOAT32_9x95 ==-9.95
2. C_FLOAT322x24 == 2.24
3. C_FLOAT320==0.00
4. C_FLOAT320x01==0.01
Вложения
Тип файла: rar const_float2.rar (17.6 Кб, 9 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 26.04.2009 в 22:08.
Ulex вне форума Ответить с цитированием
Старый 03.05.2009, 15:22   #6
Crollspase
 
Регистрация: 26.04.2009
Сообщений: 5
По умолчанию

Прошу извинить меня за столь длинную паузу: прижали жизненные обстоятельства.

Цитата:
Сообщение от Ulex Посмотреть сообщение
Вот всё таки не понял, как это что то само может начать пестреть в тексте программы? Или вы его сами туда написали, а теперь не нравится, что оно там пестреет?
Ну, я выразился образно. Имелось ввиду то, что мне просто непривычно было видеть так много float-команд в одном проекте (до этого с 3D графикой мне работать не приходилось).

Цитата:
Сообщение от Ulex Посмотреть сообщение
Ага, есть такой грешок. Ну если дело только в этом, то зачем же прям так сразу свой транслятор (да ещё и компоновщик) писать. Это же ведь всего навсего константы. Объявите их единожды и используйте дальше в тексте программы сколько влезет без всякого сопроцессора прям в директиве INVOKE.
Ulex, дело не только в работе с числами с плавающей точкой в INVOKE. Я хочу также усовершенствовать написание кода для таких процессов, как сравнение двух дробных чисел (что является весьма громоздким процессом), действия с командами обработки массивов и.т.д. Мне нужно, чтобы транслятор обладал возможностью полного анализа написанной мной строки кода с помощью выполнения инструкций Asm'а.

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
все книги на русском языке являются лишь пособием для начального изучения ассемблеера, 99% книг посвящены программированию в DOS, не стоит ожидать от них большего. Например, в этих книгах уделяется много внимания тому сколько во сколько тактов выполняются команды, (такая-то-такая-то команда выполняется за 4 такта, такая-сякая команда выполняется за 5 тактов) но многие совсем забывают что технологии производства процессоров не стоят на месте, и большинство команд выполняются быстрее, а некоторые команды за счёт "спаривания" выполняются одновременно!
rpy3uH, дело не в этом. Я имею ввиду то, что автор этой книги, не приведя до главы 3 ни одного примера программы (который можно было бы понаблюдать в отладчике), стал объяснять структуру машинных команд! Во-первых: кому на данном этапе обучения это надо? Во-вторых: если кому-то и надо, то зачем помещать этот материал здесь??? Объясню обьектно: автор начал строить пирамиду с середины, не заложив при этом её основание! Книги, написанные подобным образом, меня просто возмущают!!!

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
FASM юзал? вот сначала его поюзай прежде чем писать свой ассемблер
Скажу честно: FASM'ом не пользовался. Ответь, пожалуйста, на такой вопрос: обладает ли FASM возможностью полного анализа написанного мной кода с помощью выполнения инструкций Assembler'а или каким-либо другим способом? Если не обладает, прошу дать ссылки по интересующим меня темам.

Последний раз редактировалось rpy3uH; 04.05.2009 в 11:05.
Crollspase вне форума Ответить с цитированием
Старый 03.05.2009, 23:02   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
Вопрос

Цитата:
Сообщение от Crollspase Посмотреть сообщение
Ulex, дело не только в работе с числами с плавающей точкой в INVOKE. Я хочу также усовершенствовать написание кода для таких процессов, как сравнение двух дробных чисел (что является весьма громоздким процессом), действия с командами обработки массивов и.т.д. Мне нужно, чтобы транслятор обладал возможностью полного анализа написанной мной строки кода с помощью выполнения инструкций Asm'а.
Скажи, а почему нельзя, например, написать свою библиотеку со всеми необходимыми тебе функциями, а потом вызывать их из своей программы удобным для тебя способом?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 04.05.2009, 00:06   #8
Crollspase
 
Регистрация: 26.04.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение
Скажи, а почему нельзя, например, написать свою библиотеку со всеми необходимыми тебе функциями, а потом вызывать их из своей программы удобным для тебя способом?
Ну, во-первых потребуется выполнять команды "call" и "ret" (что при выполнении таких функций в цикле с большим числом повторений ощутимо снизит производительность процессора (эту проблему можно решить создавая вместо функций макрокоманды)), во-вторых представь себе функцию складывающую, вычитающую, умножающую, делящую или сравнивающую 2 дробных числа: удобочитаемой ли будет программа c применением таких функций и насколько комфортно тебе будет с ними работать? Гораздо лучше сделать транслятор, поддерживающий что-нибудь типа:

Код:
.if FLOAT_VAL_1==FLOAT_VAL_2…
или:

Код:
FLOAT_VAL_3=FLOAT_VAL_1/FLOAT_VAL_2
Crollspase вне форума Ответить с цитированием
Старый 04.05.2009, 00:39   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Если очень нужно здесь исходники фасма на нем же для kolibriOS
Вложения
Тип файла: rar fasm_1675.rar (54.9 Кб, 10 просмотров)
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 04.05.2009, 11:09   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Crollspase Посмотреть сообщение
Гораздо лучше сделать транслятор, поддерживающий что-нибудь типа:

Код:
.if FLOAT_VAL_1==FLOAT_VAL_2…
или:

Код:
FLOAT_VAL_3=FLOAT_VAL_1/FLOAT_VAL_2
это будет уже не ассеблер, а что-то другое. и тем более за сравнение дробных чисел отвечает математический сопроцессор, и так легко всё не получится.

Цитата:
Сообщение от Crollspase Посмотреть сообщение
Скажу честно: FASM'ом не пользовался. Ответь, пожалуйста, на такой вопрос: обладает ли FASM возможностью полного анализа написанного мной кода с помощью выполнения инструкций Assembler'а или каким-либо другим способом? Если не обладает, прошу дать ссылки по интересующим меня темам.
я не понял что за анализ и зачем это надо.
rpy3uH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SSH или как подключится Droniwe Работа с сетью в Delphi 4 30.10.2008 17:27
Daemon или как заключить сделку с демоном Dj_smart PHP 13 04.10.2008 00:07
Закачка файла или как не укачатся Dj_smart Софт 8 02.10.2008 09:39
Как проверить запущено приложение или нет? kiber0net0 Общие вопросы Delphi 2 18.09.2008 19:48
как узнать string или Real Влажимир Общие вопросы Delphi 2 11.04.2008 17:06