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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2016, 09:15   #1
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию Макросы TASM

Написал вот такой макрос:
Код:
__defdef macro const,value
  ifndef const
    const = value
  endif
endm
Макрос определяет константу, если она не была определена ранее.
Однако есть проблема: компилер выдаёт warning, что "Module is pass depending". Как от этого избавиться?

Вообще, есть где-нибудь нормальный мануал по макросам в TASM/MASM ?
Ищу, не могу найти ничего...

И ещё, можно ли как-то определить: используется ли та или иная процедура в коде или нет? Чтобы написать include с несколькими процедурами, а в код включать только те, которые реально используются.

Кстати, как проверить - какой ассемблер используется: TASM, MASM или FASM ?
Может, какие-то символы определены для этого?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 01.11.2016, 11:29   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Вообще, есть где-нибудь нормальный мануал по макросам в TASM/MASM ?
7in,Спрашивай, пока я здесь
Цитата:
Чтобы написать include с несколькими процедурами, а в код включать только те, которые реально используются.
link.exe именно так и работает, подключаешь kernel32.lib, user32.lib, gdi32.lib и т.д. а в импорт попадают только те функции, которые используются в программе
Цитата:
Кстати, как проверить - какой ассемблер используется: TASM, MASM или FASM ?
и тот и другой и третий создают obj-файл, который можно скормит любому линкеру (link, tlink, alink, polink и т.д.) Фасм и Насм могут вообще обходится без линкера и сразу создавать dll, sys, exe, com и т.д.

Последний раз редактировалось Mikl___; 01.11.2016 в 17:16.
Mikl___ вне форума Ответить с цитированием
Старый 01.11.2016, 14:30   #3
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Спасибо!
По остальным вопросам есть какая-нибудь инфа?
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 01.11.2016, 17:13   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
По остальным вопросам есть какая-нибудь инфа?
... как проверить - какой ассемблер используется: TASM, MASM или FASM ?
А возьми какой-нибудь вьювер и посмотри содержимое obj-файла — совсем не сложно увидеть каким компилятором он создавался

Последний раз редактировалось Mikl___; 01.11.2016 в 17:18.
Mikl___ вне форума Ответить с цитированием
Старый 03.11.2016, 03:19   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

скачай сам macros for masm32
Mikl___ вне форума Ответить с цитированием
Старый 09.11.2016, 22:39   #6
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
И ещё, можно ли как-то определить: используется ли та или иная процедура в коде или нет? Чтобы написать include с несколькими процедурами, а в код включать только те, которые реально используются.
В мире ассемблеров для этого служит программа, которая называется "библиотекарь". Например, TLIB из пакета TASM.
Из каждой процедуры создаешь отдельный OBJ-файл, потом объединяешь библиотекарем эти файлы в библиотеку. При компоновке указываешь эту библиотеку среди имен компонуемых файлов и компоновщик из нее выберет только те объектные файлы, что реально используются.

Правда, я библиотекарем никогда не пользовался. Надо попробовать. Пишу чисто теоретически. Но вроде бы все именно так.
И да, я тут про решение на уровне компоновки, а не на уровне include в исходный текст.
Ethereal2 вне форума Ответить с цитированием
Старый 09.11.2016, 22:44   #7
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Однако есть проблема: компилер выдаёт warning, что "Module is pass depending". Как от этого избавиться?
Тупо в командной строке компилятора указать ключ "предупреждения не выводить". У TASM это /w0
Или, если ты используешь TASM не указывать ключа /m
Тогда TASM будет ассемблировать в один проход.
А на уровне текста макроса никак. Ибо твой макрос действительно раскроется на первом проходе и не раскроется на втором. Т.е он реально pass dependent
Ethereal2 вне форума Ответить с цитированием
Старый 10.11.2016, 12:56   #8
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Ethereal2, ну хорошо, может, тогда как-то по-другому этот макрос построить?
Ну, например, создавать константу с другим именем и присваивать ей разные значения в зависимости от существования исходной константы или ещё как-то...

Суть в том, что если перед include задана какая-то константа, тогда она используется в коде. Если не задано, используется значение по умолчанию...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 10.11.2016, 12:57   #9
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Цитата:
Сообщение от Ethereal2 Посмотреть сообщение
Ибо твой макрос действительно раскроется на первом проходе и не раскроется на втором. Т.е он реально pass dependent
А что изменится от того, что он раскроется или не раскроется в каком-либо проходе? Всё равно значение оно примет одно и то же...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 10.11.2016, 14:28   #10
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
А что изменится от того, что он раскроется или не раскроется в каком-либо проходе? Всё равно значение оно примет одно и то же...
Так это ты кому этот вопрос задаешь ? Если ассемблеру, то нет у него искусственного интеллекта. Pass dependent ? Получи warning и сам разбирайся что не так. Если все так - проигнорируй warning. Вот весь его интеллект.
Ethereal2 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макросы Юра154 Microsoft Office Excel 3 29.08.2015 18:59
Макросы TASM pinkiller Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.03.2012 15:35
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
макросы Jana 001 Microsoft Office Excel 2 08.12.2010 22:16
макросы С++ Lazio Помощь студентам 3 18.03.2009 23:38