Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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



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

Написал вот такой макрос:
Код:

__defdef macro const,value
  ifndef const
    const = value
  endif
endm

Макрос определяет константу, если она не была определена ранее.
Однако есть проблема: компилер выдаёт warning, что "Module is pass depending". Как от этого избавиться?

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

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

Кстати, как проверить - какой ассемблер используется: TASM, MASM или FASM ?
Может, какие-то символы определены для этого?
7in вне форума   Ответить с цитированием
Старый 01.11.2016, 12:29   #2
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,067
Репутация: 855
По умолчанию

Цитата:
Вообще, есть где-нибудь нормальный мануал по макросам в 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 в 18:16.
Mikl___ вне форума   Ответить с цитированием
Старый 01.11.2016, 15:30   #3
7in
(aka Jin X)
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 148
Репутация: 64
По умолчанию

Спасибо!
По остальным вопросам есть какая-нибудь инфа?
7in вне форума   Ответить с цитированием
Старый 01.11.2016, 18:13   #4
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,067
Репутация: 855
По умолчанию

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

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

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

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

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

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

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

Суть в том, что если перед include задана какая-то константа, тогда она используется в коде. Если не задано, используется значение по умолчанию...
7in вне форума   Ответить с цитированием
Старый 10.11.2016, 13:57   #9
7in
(aka Jin X)
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 148
Репутация: 64
По умолчанию

Цитата:
Сообщение от Ethereal2 Посмотреть сообщение
Ибо твой макрос действительно раскроется на первом проходе и не раскроется на втором. Т.е он реально pass dependent
А что изменится от того, что он раскроется или не раскроется в каком-либо проходе? Всё равно значение оно примет одно и то же...
7in вне форума   Ответить с цитированием
Старый 10.11.2016, 15:28   #10
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 25
Репутация: 88
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




15:59.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru