Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: FASM и генерация меток  (Прочитано 9070 раз)
0 Пользователей и 1 Гость смотрят эту тему.
xRom
Интересующийся

ru
Offline Offline

« : 26-04-2011 15:54 » 

Как в фасме получить метки часть имени которых задается числовой константой? Типа
a = 1
@1:

a = 2
@2:

a = 1000
@1000:
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-04-2011 18:01 » 

Это не константа и не часть - метка едина.

Лучше опиши задачу.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-04-2011 20:02 » 

RXL, наверно он хочет вычислять адрес перехода - что-то типа switch.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
xRom
Интересующийся

ru
Offline Offline

« Ответ #3 : 26-04-2011 20:11 » 

Именно! В идеале я хочу получить вот что:
macro        for p1,p2,p3 {
for_count  = for_count + 1
for_nested = for_nested + 1
     if cond==false then jmp @for_exit(for_count*1000+for_nested)
@for(for_count*1000+for_nested):
}

macro next  {
if cond     ==true then jmp @for
@for_exit(for_count*1000+for_nested):
for_nested = for_nested - 1 
}
   for i,1,2
       for j,1,100       ;nested for

       next
   next
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 26-04-2011 21:36 » 

Не совсем понятно, зачем пытаться сделать из ассемблера Си...

Почитай еще раз доку. Препроцессор - это не язык программирования. Проход у него только один, после чего про макросы можно забыть.
« Последнее редактирование: 26-04-2011 21:38 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 27-04-2011 05:39 » 

xRom, вообще switch по-другому делается. Создаётся хэш-таблица или ассоциативный массив, где каждому значению проверяемой переменной ставится в соответствие метка (целевой адрес перехода или указатель, содержащий этот адрес). Сами метки не генерируются, а вручную записывается. Далее пишется код, котый, в случае хэш-таблицы, по значению проверяемой переменной вычисляет индекс массива (хэш-таблицы) и извлекает оттуда указатель на место перехода. В случае, если нельзя построить хэш-функцию, то пишется алгоритм поиска по массиву ключа, соответствующего значению проверяемой переменной (последовательный перебор, двоичный поиск и т.д.).

Можно обойтись без хэш-таблицы, но для этого сами адреса секций кода для case должны иметь регулярную структуру (т.е. код всякого case должен занимать одинаковое количество машинных слов, а пустые места забиваться nop-ами) - тогда можно вычислять не индекс массива, а сам адрес перехода.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
xRom
Интересующийся

ru
Offline Offline

« Ответ #6 : 13-05-2011 19:14 » new

Народ ну вы уж как-то совсем все усложнили, нужно было просто вспомнить о наличии директивы rectore которая позволяет
сделать примерно это
macro for i {
local ..for
         _for equ ..for

_for:
}

macro next {
      jxx _for
      restore _for
}
Позволяет оформлять быстро и удобно арифметиеские циклы, хоть вложенные хоть нет. Чем плохо? Никто ж не заставляет использовать макрос для ВСЕХ циклов в программе, но где нужно - можно.

Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines