Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
FASM и генерация меток
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: FASM и генерация меток (Прочитано 9074 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
xRom
Интересующийся
Offline
FASM и генерация меток
«
:
26-04-2011 15:54 »
Как в фасме получить метки часть имени которых задается числовой константой? Типа
a = 1
@1:
a = 2
@2:
a = 1000
@1000:
Записан
RXL
Технический
Администратор
Offline
Пол:
Re: FASM и генерация меток
«
Ответ #1 :
26-04-2011 18:01 »
Это не константа и не часть - метка едина.
Лучше опиши задачу.
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба
Offline
Пол:
Re: FASM и генерация меток
«
Ответ #2 :
26-04-2011 20:02 »
RXL
, наверно он хочет вычислять адрес перехода - что-то типа switch.
Записан
Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
xRom
Интересующийся
Offline
Re: FASM и генерация меток
«
Ответ #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
Пол:
Re: FASM и генерация меток
«
Ответ #4 :
26-04-2011 21:36 »
Не совсем понятно, зачем пытаться сделать из ассемблера Си...
Почитай еще раз доку. Препроцессор - это не язык программирования. Проход у него только один, после чего про макросы можно забыть.
«
Последнее редактирование: 26-04-2011 21:38 от RXL
»
Записан
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба
Offline
Пол:
Re: FASM и генерация меток
«
Ответ #5 :
27-04-2011 05:39 »
xRom
, вообще switch по-другому делается. Создаётся хэш-таблица или ассоциативный массив, где каждому значению проверяемой переменной ставится в соответствие метка (целевой адрес перехода или указатель, содержащий этот адрес). Сами метки не генерируются, а вручную записывается. Далее пишется код, котый, в случае хэш-таблицы, по значению проверяемой переменной вычисляет индекс массива (хэш-таблицы) и извлекает оттуда указатель на место перехода. В случае, если нельзя построить хэш-функцию, то пишется алгоритм поиска по массиву ключа, соответствующего значению проверяемой переменной (последовательный перебор, двоичный поиск и т.д.).
Можно обойтись без хэш-таблицы, но для этого сами адреса секций кода для case должны иметь регулярную структуру (т.е. код всякого case должен занимать одинаковое количество машинных слов, а пустые места забиваться nop-ами) - тогда можно вычислять не индекс массива, а сам адрес перехода.
Записан
Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
xRom
Интересующийся
Offline
Re: FASM и генерация меток
«
Ответ #6 :
13-05-2011 19:14 »
Народ ну вы уж как-то совсем все усложнили, нужно было просто вспомнить о наличии директивы rectore которая позволяет
сделать примерно это
macro for i {
local ..for
_for equ ..for
_for:
}
macro next {
jxx _for
restore _for
}
Позволяет оформлять быстро и удобно арифметиеские циклы, хоть вложенные хоть нет. Чем плохо? Никто ж не заставляет использовать макрос для ВСЕХ циклов в программе, но где нужно - можно.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Ассемблер
(Модератор:
Tuborg
) > Тема:
FASM и генерация меток
Загружается...